使用告警主题
Kapacitor 的告警系统允许使用发布-订阅设计模式。告警被发布到一个 topic,然后 handlers 订阅它。
本示例将引导读者完成设置一个简单的 CPU 阈值告警,该告警将告警发送到 Slack。
要求
预期读者已熟悉 入门指南 中介绍的 Kapacitor 基本知识。读者还应基本了解如何使用任务和 TICKscripts。
此外,还预期读者已安装了正在运行的 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_alertSlack 处理程序
此时,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 负载。
要配置处理程序,首先必须定义处理程序绑定。处理程序绑定包含几个部分:
- Topic - 主题 ID。
- ID - 处理程序的唯一 ID。
- Kind - 处理程序的类型,在这种情况下将是
slack处理程序。 - Match - 用于过滤匹配告警的 lambda 表达式。默认情况下,所有告警都匹配。
- Options - 一个值映射,根据类型而异。
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 处理程序。更重要的是,无需更改任何 TICKscripts。
深入了解
链接主题
可以使用 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_teamkapacitor define-topic-handler ./publish-to-ops_team.yaml由于运维团队有轮班值班,因此可以相应地设置对 ops_team 主题的告警处理。
topic: ops_team
id: victorops
kind: victorops
options:
routing-key: ops_teamkapacitor 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此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 Kapacitor 和本文档提供反馈和错误报告。要获取支持,请使用以下资源: