模板任务
在 CLI 和 API 中使用模板来定义和重用任务。
要创建任务模板,请执行以下操作
某些第三方服务拒绝以换行符结尾的标准 json
。要删除换行符,请在模板中将 {{ json . }}
替换为 {{ jsonCompact . }}
。
创建任务模板时,请考虑以下事项
Chronograf 不 显示模板详细信息,包括变量值。
创建任务模板脚本
以下任务模板脚本计算字段的平均值并触发警报。
示例:generic_alert_template.tick
// Which measurement to consume
var measurement string
// Optional where filter
var where_filter = lambda: TRUE
// Optional list of group by dimensions
var groups = [*]
// Which field to process
var field string
// Warning criteria, has access to 'mean' field
var warn lambda
// Critical criteria, has access to 'mean' field
var crit lambda
// How much data to window
var window = 5m
// The slack channel for alerts
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)
请注意,脚本中的所有字段都声明为变量,这使您可以在使用模板定义任务时自定义变量值。
定义变量
在任务模板中,使用以下模式定义变量
// Required variable pattern
var varName dataType
// Optional variable patterns
var varName = dataType: defaultValue
var varName = [*]
有关可用数据类型的更多信息,请参阅 字面值类型。
可选变量
在某些情况下,模板任务可能用于不需要所有模板变量值的任务。要确保变量是可选的,请提供默认值。在大多数情况下,默认值可以简单地为 TRUE
// Pattern
var varName = datatype: defaultValue
// Examples
var where_filter = lambda: TRUE
var warn = lambda: TRUE
var groups = [*]
运行 define-template
命令
要定义新模板,请运行 define-template
命令
kapacitor define-template generic_mean_alert -tick path/to/template_script.tick
使用 show-template
查看有关新创建模板的更多信息。
kapacitor show-template generic_mean_alert
为模板声明的变量列表在控制台输出的 vars
组中返回,如本示例所示
示例:kapacitor show-template 输出的 Vars 部分
...
Vars:
Name Type Default Value Description
crit lambda <required> Critical criteria, has access to 'mean' field
field string <required> Which field to process
groups list [*] Optional list of group by dimensions
measurement string <required> Which measurement to consume
slack_channel string #alerts The slack channel for alerts
warn lambda <required> Warning criteria, has access to 'mean' field
where_filter lambda TRUE Optional where filter
window duration 5m0s How much data to window
...
每个任务都将从模板中获取其类型和 TICKscript 结构。变量描述从模板中每个变量上方的注释派生而来。变量和数据库/保留策略的具体值对于使用模板创建的每个任务都是唯一的。
定义新任务
使用模板定义新任务,以触发有关 CPU 使用率的警报。
使用简单的 JSON 文件将变量值传递到模板中。
示例:JSON 变量文件
{ "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" } }
通过运行带有
-template
和-vars
参数的命令,传入模板文件和 JSON 变量文件kapacitor define cpu_alert -template generic_mean_alert -vars cpu_vars.json -dbrp telegraf.autogen
使用
show
命令显示与新创建的任务关联的变量值。对于启用身份验证的 Kapacitor 实例,请使用以下形式
./kapacitor -url http://username:password@MYSERVER:9092 show TASKNAME
示例
kapacitor show cpu_alert
...
Vars:
Name Type Value
crit lambda "mean" < 10.0
field string usage_idle
groups list [host,dc]
measurement string cpu
slack_channel string #alerts_testing
warn lambda "mean" < 30.0
where_filter lambda "cpu" == 'cpu-total'
window duration 1m0s
...
也可以使用相同的模板为基于内存的警报创建类似的任务。创建一个 mem_vars.json
并使用此代码段。
示例:用于内存警报的 JSON 变量文件
{
"measurement": {"type" : "string", "value" : "mem" },
"groups": {"type": "list", "value": [{"type":"star", "value":"*"}]},
"field": {"type" : "string", "value" : "used_percent" },
"warn": {"type" : "lambda", "value" : "\"mean\" > 80.0" },
"crit": {"type" : "lambda", "value" : "\"mean\" > 90.0" },
"window": {"type" : "duration", "value" : "10m" },
"slack_channel": {"type" : "string", "value" : "#alerts_testing" }
}
现在可以像以前一样定义任务,但是这次使用新的变量文件和不同的任务标识符。
kapacitor define mem_alert -template generic_mean_alert -vars mem_vars.json -dbrp telegraf.autogen
运行 show
将显示与此任务关联的 vars
,这些变量对于 mem_alert
任务是唯一的。
kapacitor show mem_alert
再次显示 vars
输出
示例:mem_alert 任务的 Vars 部分
...
Vars:
Name Type Value
crit lambda "mean" > 90.0
field string used_percent
groups list [*]
measurement string mem
slack_channel string #alerts_testing
warn lambda "mean" > 80.0
window duration 10m0s
...
可以使用相同的模板定义任意数量的任务。
注意: 对模板的更新将更新所有关联的任务,并在必要时重新加载它们。
使用变量
变量也适用于普通任务,可用于覆盖脚本中的任何默认值。由于 TICKscript 随时可能作为模板派上用场,因此建议的最佳实践是在 TICKscript 中始终使用 var
声明。普通任务可以工作,如果在以后您确定需要另一个类似的任务,则可以轻松地从现有 TICKscript 创建模板,并使用变量文件定义其他任务。
使用 -file
标志
从 Kapacitor 1.4 开始,可以使用任务定义文件从模板生成任务。任务定义文件是从以前版本的变量文件扩展而来的。提供了三个新字段。
template-id
字段用于选择模板。dbrps
字段用于定义任务将使用的一个或多个数据库/保留策略集。vars
字段将变量分组在一起,这些变量是以前版本文件中心的内容。
此文件可以是 JSON 或 YAML 格式。
可以使用上面定义的同一模板创建基于内存的警报的任务。使用示例 7 中的代码段创建 mem_template_task.json
文件。
示例:JSON 格式的任务定义文件
{
"template-id": "generic_mean_alert",
"dbrps": [{"db": "telegraf", "rp": "autogen"}],
"vars": {
"measurement": {"type" : "string", "value" : "mem" },
"groups": {"type": "list", "value": [{"type":"star", "value":"*"}]},
"field": {"type" : "string", "value" : "used_percent" },
"warn": {"type" : "lambda", "value" : "\"mean\" > 80.0" },
"crit": {"type" : "lambda", "value" : "\"mean\" > 90.0" },
"window": {"type" : "duration", "value" : "10m" },
"slack_channel": {"type" : "string", "value" : "#alerts_testing" }
}
}
然后可以使用 file
参数定义任务,该参数与任务定义文件的新内容一起替换了命令行参数 template
、dbrp
和 vars
。
kapacitor define mem_alert -file mem_template_task.json
使用 YAML,任务定义文件 mem_template_task.yaml
如下所示
示例:YAML 格式的任务定义文件
template-id: generic_mean_alert
dbrps:
- db: telegraf
rp: autogen
vars:
measurement:
type: string
value: mem
groups:
type: list
value:
- type: star
value: "*"
field:
type: string
value: used_percent
warn:
type: lambda
value: '"mean" > 80.0'
crit:
type: lambda
value: '"mean" > 90.0'
window:
type: duration
value: 10m
slack_channel:
type: string
value: "#alerts_testing"
然后可以使用先前显示的 file
参数定义任务。
kapacitor define mem_alert -file mem_template_task.yaml
隐式指定 dbrp
以下是一个简单的示例,该示例定义了一个模板,该模板计算字段的平均值并触发警报,其中 dbrp
在模板中指定。
示例:在模板中定义数据库和保留策略
dbrp "telegraf"."autogen"
// Which measurement to consume
var measurement string
// Optional where filter
var where_filter = lambda: TRUE
// Optional list of group by dimensions
var groups = [*]
// Which field to process
var field string
// Warning criteria, has access to 'mean' field
var warn lambda
// Critical criteria, has access to 'mean' field
var crit lambda
// How much data to window
var window = 5m
// The slack channel for alerts
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)
从此模板脚本定义新模板
kapacitor define-template implicit_generic_mean_alert -tick path/to/script.tick
然后在 YAML 文件 implicit_mem_template_task.yaml
中定义任务
示例:利用具有预定义数据库和保留策略的模板的 YAML vars 文件
template-id: implicit_generic_mean_alert
vars:
measurement:
type: string
value: mem
groups:
type: list
value:
- type: star
value: "*"
field:
type: string
value: used_percent
warn:
type: lambda
value: '"mean" > 80.0'
crit:
type: lambda
value: '"mean" > 90.0'
window:
type: duration
value: 10m
slack_channel:
type: string
value: "#alerts_testing"
创建任务
kapacitor define mem_alert -file implicit_mem_template_task.yaml
注意: 当 dbrp
值已在模板中声明时,dbrps
字段不得出现在任务定义文件中,例如在 implicit_mem_template_task.yaml
中。这样做会导致错误。
此页面是否对您有帮助?
感谢您的反馈!