文档文档

使用警报主题

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

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像当前一样使用它,而无需对代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、最近数据引擎,可实时收集和处理数据,并将其持久保存到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及用于更快查询和优化存储的数据压缩。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看