使用警报主题
Kapacitor 的警报系统允许使用发布-订阅设计模式。警报发布到topic
(主题),handlers
(处理程序)订阅该主题。
本示例将引导读者完成设置一个简单的 CPU 阈值警报,该警报将警报发送到 Slack。
要求
期望读者已经熟悉 入门 指南中介绍的 Kapacitor 基础知识。读者还应该基本了解如何使用任务和 TICKscript。
进一步期望已安装可用的 Telegraf 和 Kapacitor 以完成本示例。如果尚未安装,请花一点时间设置它们。
任务
本演练将演示如何设置 cpu
警报主题并将警报发送到该主题。
首先定义一个简单的 CPU 警报。
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')
上面的 TICKscript 为 CPU 使用率创建了一个阈值警报,并将警报发送到 cpu
主题。
将以上脚本另存为 cpu_alert.tick
。通过运行以下命令创建并启动任务
$ kapacitor define cpu_alert -tick cpu_alert.tick
$ kapacitor enable cpu_alert
Slack 处理程序
此时,Kapacitor 任务正在生成警报并将它们发送到 cpu
主题,但由于该主题没有任何处理程序,因此警报不会发生任何事情。
通过检查主题确认没有处理程序
$ kapacitor show-topic cpu
输出应如下所示
ID: cpu
Level: OK
Collected: 27
Handlers: []
Events:
Event Level Message Date
cpu:cpu=cpu3,host=localhost OK cpu:cpu=cpu3,host=localhost is OK 23 Jan 17 14:04 MST
如果返回错误消息 unknown topic: "cpu"
,请注意,主题仅在需要时创建,因此,如果任务尚未触发警报,则该主题将不存在。如果返回关于主题不存在的此错误,请尝试触发警报。可以更改任务上的阈值或创建一些 CPU 负载。
要配置处理程序,首先必须定义处理程序绑定。处理程序绑定有几个部分
- 主题 - 主题 ID。
- ID - 处理程序的唯一 ID。
- 类型 - 处理程序的类型,在本例中将是
slack
处理程序 - 匹配 - 用于过滤匹配警报的 lambda 表达式。默认情况下,所有警报都匹配。
- 选项 - 值映射,因类型而异。
slack 处理程序绑定可以使用 yaml 或 json 定义,这里使用 yaml
topic: cpu
id: slack
kind: slack
options:
channel: '#alerts'
上面的处理程序绑定定义了一个将警报发送到 Slack 频道 #alerts
的处理程序。
将以上文本另存为 slack.yaml
。现在可以使用 kapacitor
客户端将新处理程序绑定到主题。为此,使用 define-topic-handler
命令。它接受一个参数。
$ kapacitor define-topic-handler
Usage: kapacitor define-topic-handler <path to handler spec file>
$ kapacitor define-topic-handler ./slack.yaml
验证处理程序是否按预期定义
$ kapacitor show-topic-handler cpu slack
最后确认主题已按预期配置
$ kapacitor show-topic cpu
输出应如下所示
ID: cpu
Level: OK
Collected: 27
Handlers: [slack]
Events:
Event Level Message Date
cpu:cpu=cpu3,host=localhost OK cpu:cpu=cpu3,host=localhost is OK 23 Jan 17 14:04 MST
就是这样!未来由 cpu_alert
任务触发的警报将通过 cpu
主题发送到 Slack。
总结
虽然在 TICKscript 中直接定义警报处理程序很简单,但是一旦创建了许多任务,跟踪和维护可能会变得繁琐。使用主题将警报的定义与警报的处理解耦。通过定义的主题和处理程序绑定,要更改 Slack 频道只需进行一次 API 调用来更新 Slack 处理程序。更重要的是,无需更改任何 TICKscript。
进一步深入
链式主题
可以使用 publish
操作处理程序将主题链接在一起。这允许将警报进一步分组到各种主题中。
例如,可以修改上面的任务以将警报发送到 system
主题,而不是 cpu
主题。这样,所有系统相关的警报都可以以一致的方式处理。
新的 TICKscript
stream
|from()
.measurement('cpu')
.groupBy(*)
|alert()
.warn(lambda: "usage_idle" < 20)
.crit(lambda: "usage_idle" < 10)
// Send alerts to the `system` topic
.topic('system')
要将所有系统警报发送到新的主题 ops_team
,请为 system
主题创建一个新的处理程序。
topic: system
id: publish-to-ops_team
kind: publish
options:
topics:
- ops_team
kapacitor define-topic-handler ./publish-to-ops_team.yaml
由于运维团队有轮班值班,因此可以相应地设置 ops_team
主题上警报的处理。
topic: ops_team
id: victorops
kind: victorops
options:
routing-key: ops_team
kapacitor define-topic-handler ./victorops.yaml
现在,所有 system
相关警报都将发送到 ops_team
主题,然后由 Victor Ops 处理。
匹配条件
匹配条件可以应用于处理程序。只有符合条件的警报才会被该处理程序处理。
例如,通常仅在警报状态更改时发送 Slack 消息,而不是在每次评估警报时都发送。从第一个示例修改 slack 处理程序定义,得到以下结果
topic: cpu
id: slack
kind: slack
match: changed() == TRUE
options:
channel: '#alerts'
现在更新处理程序,只有状态已更改的警报才会发送到 Slack。
kapacitor define-topic-handler ./slack.yaml
此页面是否对您有帮助?
感谢您的反馈!