创建自定义检查
在用户界面中,您可以创建两种检查:threshold和deadman。
使用 Flux 任务,可以创建一个自定义检查,提供一些优势:
- 自定义并转换您希望用于检查的数据。
- 为您的警报设置自定义条件(除了
threshold和deadman)。
创建任务
在 InfluxDB 用户界面中,选择左侧导航菜单中的 任务。
点击 创建任务。
在 Name 字段中,输入一个描述性名称,然后在 Every 字段中输入任务运行的频率(例如,
10m)。有关更多详细信息,例如使用 cron 语法或包含偏移,请参阅 Task configuration options。输入您的自定义检查的Flux脚本,包括
monitor.check函数。
使用/api/v2/checks/{checkID}/query API接口查看在UI中构建的检查的Flux代码。 这对构建自定义检查非常有用。
示例:监控失败的任务
下面的脚本相当复杂,可以作为类似任务的框架。 它执行以下操作:
- 导入必要的
influxdata/influxdb/monitor包,以及其他数据处理的包。 - 查询
_tasks存储桶以获取您的检查生成的所有状态。 - 设置要警报的
_level,例如crit、warn、info或ok。 - 创建一个
check对象,用于指定检查的 ID、名称和类型。 - 定义
ok和crit状态。 - 在
check上执行monitor函数,使用task_data。
示例警报任务脚本
import "strings"
import "regexp"
import "influxdata/influxdb/monitor"
import "influxdata/influxdb/schema"
option task = {name: "Failed Tasks Check", every: 1h, offset: 4m}
task_data = from(bucket: "_tasks")
|> range(start: -task.every)
|> filter(fn: (r) => r["_measurement"] == "runs")
|> filter(fn: (r) => r["_field"] == "logs")
|> map(fn: (r) => ({r with name: strings.split(v: regexp.findString(r: /option task = \{([^\}]+)/, v: r._value), t: "\\\\\\\"")[1]}))
|> drop(columns: ["_value", "_start", "_stop"])
|> group(columns: ["name", "taskID", "status", "_measurement"])
|> map(fn: (r) => ({r with _value: if r.status == "failed" then 1 else 0}))
|> last()
check = {
// 16 characters, alphanumeric
_check_id: "0000000000000001",
// Name string
_check_name: "Failed Tasks Check",
// Check type (threshold, deadman, or custom)
_type: "custom",
tags: {},
}
ok = (r) => r["logs"] == 0
crit = (r) => r["logs"] == 1
messageFn = (r) => "The task: ${r.taskID} - ${r.name} has a status of ${r.status}"
task_data
|> schema["fieldsAsCols"]()
|> monitor["check"](data: check, messageFn: messageFn, ok: ok, crit: crit)