将 Flux 任务与 Kapacitor 结合使用
使用 Kapacitor 1.6+ 针对 InfluxDB 和其他数据源运行 Flux 任务。利用完整的 Flux 函数库在 Kapacitor 中构建强大的数据处理和监控任务。
开始之前
在开始使用 Flux 任务之前,请注意以下事项:
- Kapacitor Flux 任务无法使用 Kapacitor 主题(topics)或事件处理器(event handlers)。你只能通过 Flux 脚本内部使用 Flux 通知端点(notification endpoints)来发送警报。
- Flux 任务由内置于 Kapacitor 1.6+ 中的 Flux 任务引擎调度和执行。该引擎与 Kapacitor 的 TICKscript 任务引擎是分开的。
- Flux 任务通过 Flux 任务脚本内的 Flux
task选项进行配置。这包括任务名称和执行计划。
选择你正在使用的 InfluxDB 版本
在 InfluxDB 中设置 Flux 任务数据库
(可选,但建议配置)
当 Kapacitor 执行 Flux 任务时,它可以将有关任务执行(run)的信息存储在 InfluxDB 数据库中。要存储此数据,请执行以下操作:
在 InfluxDB 中创建一个新数据库,用于存储 Flux 任务的运行记录和日志数据。
CREATE DATABASE kapacitorfluxtasks为防止磁盘上积累大量的 Kapacitor Flux 任务日志数据,请更新默认的
autogen保留策略(RP)并设置有限的保留期,或者创建一个具有有限保留期的新保留策略。
-- Syntax
ALTER RETENTION POLICY <rp-name> ON <db-name> DURATION <new-retention-duration>
-- Example
ALTER RETENTION POLICY autogen ON kapacitorfluxtasks DURATION 3d-- Syntax
CREATE RETENTION POLICY <rp-name> on <db-name> DURATION <retention-duration>
-- Example
CREATE RETENTION POLICY threedays on kapacitorfluxtasks DURATION 3d配置 Kapacitor Flux 任务
在 kapacitor.conf 的 [fluxtask] 下更新或添加以下设置:
- enabled:
true - task-run-influxdb: 用于存储 Flux 任务数据的 InfluxDB 配置(位于
kapacitor.conf中)的名称。若要禁用 Flux 任务日志记录,请设置为"none"。 - task-run-bucket: 用于存储 Flux 任务数据和日志的 InfluxDB 数据库。建议将其留空。默认情况下,数据会写入
kapacitor_fluxtask_logs数据库。要指定另一个数据库来写入任务日志数据,请使用"db-name"命名规范(不支持包含保留策略的"db-name/rp"格式)。如果指定的数据库在 InfluxDB 中尚不存在,Kapacitor 将尝试创建该数据库。如果开启了身份验证,则需要CREATE DATABASE的权限。更多信息,请参阅 InfluxDB 中的身份验证和授权。 - 提供以下任一选项:
- task-run-org: 留为空字符串 (
"") - task-run-orgid: 留为空字符串 (
"")
- task-run-org: 留为空字符串 (
- task-run-measurement: 用于存储任务运行和日志数据的 InfluxDB measurement。默认值为
"runs"。
Kapacitor Flux 任务配置示例
# ...
[fluxtask]
enabled = true
task-run-influxdb = "default"
task-run-bucket = "kapacitor_fluxtask_logs"
task-run-org = ""
task-run-orgid = ""
task-run-measurement = "runs"
# ...有关 Kapacitor [fluxtask] 配置选项的更多信息,请参阅 配置 Kapacitor。
创建 Flux 任务
创建一个 Flux 任务脚本。在脚本中包含 任务选项 以配置 Kapacitor Flux 任务。有关编写 Flux 任务的更多信息,请参阅:
提供 InfluxDB 连接凭据
from()和to()函数需要你的 InfluxDB 主机地址 (host) 和 令牌 (token)。- host: InfluxDB URL。
- token: 如果 启用了 InfluxDB 身份验证,请使用
用户名:密码语法。否则,令牌请使用空字符串 ("")。
Bucket 名称语法
使用 Flux 查询或写入 InfluxDB 1.x 时,请使用
数据库名称/保留策略名称的模式来指定你的 bucket。example-task.flux
option task = { name: "example-task-name", every: 1h, offset: 10m } host = "https://:8086" token = "" from(bucket: "example-db/example-rp", host: host, token: token) |> range(start: -task.every) |> filter(fn: (r) => r._measurement == "example-measurement") |> aggregateWindow(every: 10m, fn: mean) |> to(bucket: "example-db/example-rp-downsampled", host: host, token: token)使用
kapacitor flux task create命令将你的 Flux 脚本添加为 Kapacitor Flux 任务。kapacitor flux task create --file /path/to/example-task.flux
有关创建 Kapacitor Flux 任务的更多详细信息,请参阅 创建 Kapacitor Flux 任务。
考虑使用 InfluxDB 任务
如果你使用的是 InfluxDB Cloud 或 InfluxDB OSS 2.x,请考虑使用 原生的 InfluxDB 任务 进行数据处理。
为 InfluxDB Cloud 或 2.x 设置 Kapacitor
配置 Kapacitor 以连接到 InfluxDB Cloud 或 InfluxDB OSS 2.x。详细说明请参阅以下内容:
为 InfluxDB Cloud 或 2.x 配置 Kapacitor Flux 任务
在 kapacitor.conf 的 [fluxtask] 下更新或添加以下设置:
- enabled:
true - task-run-influxdb: 用于存储 Flux 任务数据的 InfluxDB 配置(位于
kapacitor.conf中)的名称。若要禁用 Flux 任务日志记录,请设置为"none"。 - task-run-bucket: 用于存储 Flux 任务数据和日志的 InfluxDB bucket。建议将其留空。默认情况下,数据写入
kapacitor_fluxtask_logsbucket。要指定另一个用于写入任务日志数据的 bucket,请使用 _tasks 系统 bucket 或 创建一个新 bucket。如果指定的 bucket 在 InfluxDB 中尚不存在,Kapacitor 将尝试通过POST /api/v2/buckets创建它,在这种情况下,你的 API 令牌必须拥有在 InfluxDB 中创建 bucket 的权限。更多信息,请参阅 管理 API 令牌。 - 提供以下任一选项:
- task-run-org: InfluxDB 组织名称。
- task-run-orgid: InfluxDB 组织 ID。
- task-run-measurement: 用于存储任务运行和日志数据的 InfluxDB measurement。默认值为
"runs"。
# ...
[fluxtask]
enabled = true
task-run-influxdb = "InfluxDB"
task-run-bucket = "kapacitor_fluxtask_logs"
task-run-org = "example-org"
task-run-measurement = "runs"
# ...创建 Flux 任务
创建一个 Flux 任务脚本。在脚本中包含 任务选项 以配置 Kapacitor Flux 任务。有关编写 Flux 任务的更多信息,请参阅:
提供 InfluxDB 连接凭据
from()和to()函数需要你的 InfluxDB 主机地址 和 令牌。- host: InfluxDB URL。
- token: 如果 启用了 InfluxDB 身份验证,请使用
用户名:密码语法。否则,令牌请使用空字符串 ("")。
example-task.flux
option task = { name: "example-task-name", every: 1h, offset: 10m } host = "https://:8086" token = "" from(bucket: "example-bucket", host: host, token: token) |> range(start: -task.every) |> filter(fn: (r) => r._measurement == "example-measurement") |> aggregateWindow(every: 10m, fn: mean) |> to(bucket: "example-bucket-downsampled", host: host, token: token)使用
kapacitor flux task create命令将你的 Flux 脚本添加为 Kapacitor Flux 任务。kapacitor flux task create --file /path/to/example-task.flux
有关创建 Kapacitor Flux 任务的更多详细信息,请参阅 创建 Kapacitor Flux 任务。
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 Kapacitor 和本文档提供反馈和错误报告。要获取支持,请使用以下资源: