文档文档

使用告警主题

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_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 负载。

要配置处理程序,首先必须定义处理程序绑定。处理程序绑定包含几个部分:

  • 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_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

此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2