加载目录服务
加载目录服务启用基于文件的Kapacitor任务、模板和主题处理程序的定义,这些定义在启动时或当向进程发送SIGHUP信号时加载。
配置
负载目录服务的配置在Kapacitor配置文件的[load]部分指定。
[load]
enabled = true
dir="/path/to/directory"
dir 指定定义文件所在的目录。
该服务将尝试从三个子目录加载定义。
目录 tasks 应该包含任务 TICKscripts 和相关的模板任务定义文件(可以是 YAML 或 JSON)。
目录 templates 应包含模板化的 TICKscripts。
handlers目录将包含YAML或JSON格式的主题处理程序定义。
任务
任务文件必须放置在负载服务目录的 tasks 子目录中。任务 TICK 脚本是根据以下方案指定的:
id- 不带.tick扩展名的文件名type- 由任务的自我检查确定(流或批处理)dbrp- 使用dbrp关键字定义,后跟指定的数据库和保留策略
在以下示例中,TICKscript 将为 dbrp telegraf.autogen 创建一个名为 my_task 的 stream 任务。
// /path/to/directory/tasks/my_task.tick
dbrp "telegraf"."autogen"
stream
|from()
.measurement('cpu')
.groupBy(*)
|alert()
.warn(lambda: "usage_idle" < 20)
.crit(lambda: "usage_idle" < 10)
// Send alerts to the `cpu` topic
.topic('cpu')
任务模板
模板文件必须放置在加载服务目录的 templates 子目录中。任务模板按照以下方案定义:
id- 文件名,不带扩展名type- 由任务的自省确定(流或批处理)dbrp- 使用dbrp关键字定义,后面跟随指定的数据库和保留策略
以下TICKscript示例将为dbrp telegraf.autogen 创建一个名为 my_template 的 stream 模板。
// /path/to/directory/templates/my_template.tick
dbrp "telegraf"."autogen"
var measurement string
var where_filter = lambda: TRUE
var groups = [*]
var field string
var warn lambda
var crit lambda
var window = 5m
var slack_channel = '#alerts'
stream
|from()
.measurement(measurement)
.where(where_filter)
.groupBy(groups)
|window()
.period(window)
.every(window)
|mean(field)
|alert()
.warn(warn)
.crit(crit)
.slack()
.channel(slack_channel)
模板化任务
模板任务文件必须放在负载服务目录的 tasks 子目录中。
模板任务根据以下方案定义:
id- 不带扩展名的文件名,没有yaml、yml或json扩展名dbrps- 如果在模板中未指定则为必需template-id- 必需vars- 模板变量的列表
在这个例子中,模板化任务 YAML 文件创建了一个 stream 任务,名为 my_templated_task,用于 dbrp telegraf.autogen。
# /path/to/directory/tasks/my_templated_task.tick
dbrps:
- { db: "telegraf", rp: "autogen"}
template-id: my_template
vars:
measurement:
type: string
value: cpu
where_filter:
type: lambda
value: "\"cpu\" == 'cpu-total'"
groups:
type: list
value:
- type: string
value: host
- type: string
value: dc
field:
type: string
value : usage_idle
warn:
type: lambda
value: "\"mean\" < 30.0"
crit:
type: lambda
value: "\"mean\" < 10.0"
window:
type: duration
value : 1m
slack_channel:
type: string
value: "#alerts_testing"
也可以使用JSON创建相同的任务,如此示例所示:
{
"dbrps": [{"db": "telegraf", "rp": "autogen"}],
"template-id": "my_template",
"vars": {
"measurement": {"type" : "string", "value" : "cpu" },
"where_filter": {"type": "lambda", "value": "\"cpu\" == 'cpu-total'"},
"groups": {"type": "list", "value": [{"type":"string", "value":"host"},{"type":"string", "value":"dc"}]},
"field": {"type" : "string", "value" : "usage_idle" },
"warn": {"type" : "lambda", "value" : "\"mean\" < 30.0" },
"crit": {"type" : "lambda", "value" : "\"mean\" < 10.0" },
"window": {"type" : "duration", "value" : "1m" },
"slack_channel": {"type" : "string", "value" : "#alerts_testing" }
}
}
主题处理器
主题处理程序文件必须放置在加载服务目录的 handlers 子目录中。
id: handler-id
topic: cpu
kind: slack
match: changed() == TRUE
options:
channel: '#alerts'