文档文档

Kapacitor 告警概述

Kapacitor 允许以两种不同的方式处理告警消息。

  • 消息可以直接推送到通过 Alert 节点暴露的事件处理程序。
  • 消息可以发布到一个主题命名空间,一个或多个告警处理程序可以订阅该命名空间。

无论使用哪种方法,处理程序都需要在 配置文件 中启用和配置。如果处理程序需要敏感信息,如令牌和密码,它也可以使用 Kapacitor HTTP API 进行配置。

推送到处理程序

将消息推送到处理程序是《Kapacitor 入门》指南中介绍的基本方法。这只需要调用 alert 节点提供的相关链接方法即可。消息可以推送到 log() 文件、email() 服务、httpOut() 缓存以及许多 第三方服务

发布和订阅

告警主题只是一个用于对告警进行分组的命名空间。当触发告警事件时,它可以发布到一个主题。多个处理程序可以订阅(可以绑定)到该主题,并且所有处理程序都会处理该主题的每个告警事件。处理程序通过 kapacitor 命令行客户端和处理程序绑定文件绑定到主题。处理程序绑定文件可以用 yamljson 编写。它们包含四个主要字段和一个可选字段。

  • topic: 声明处理程序将订阅的主题。
  • id: 声明绑定的身份。
  • kind: 声明要使用的事件处理程序的类型。请注意,这需要在 kapacitord 配置文件中启用。
  • match: (可选) 声明一个匹配表达式,用于过滤将要处理的告警事件。请参阅下面的 匹配表达式 部分。
  • options: 特定于所讨论的处理程序的选项。这些在下面的 处理程序列表 部分列出。

示例 1:用于 slack 处理程序和 cpu 主题的处理程序绑定文件

topic: cpu
id: slack
kind: slack
options:
  channel: '#kapacitor'

示例 1 可以保存到名为 slack_cpu_handler.yaml 的文件中。

然后可以使用命令行客户端将其生成为 Kapacitor 主题处理程序。

$ kapacitor define-topic-handler slack_cpu_handler.yaml

也可以通过 HTTP API 创建处理程序绑定。请参阅 HTTP API 文档的 创建处理程序 部分。

有关定义和使用告警主题的演练,请参阅 使用告警主题 演练。

处理程序

处理程序会对特定主题的传入告警事件执行操作。每个处理程序只处理一个主题。

处理程序列表

以下是可用的告警事件处理程序列表

处理程序描述
aggregate在指定的时间间隔内聚合告警消息。
Alerta将告警消息发布到 Alerta。
BigPanda将告警消息发送到 BigPanda。
Discord将告警消息发送到 Discord。
email发送包含告警数据的电子邮件。
exec执行命令,通过 STDIN 传递告警数据。
HipChat将告警消息发布到 HipChat 房间。
Kafka将告警发送到 Apache Kafka 集群。
log将告警数据记录到文件。
Microsoft Teams将告警消息发送到 Microsoft Teams 频道。
MQTT将告警消息发布到 MQTT。
OpsGenie v1使用其 v1 API 将告警发送到 OpsGenie。(已弃用)
OpsGenie v2使用其 v2 API 将告警发送到 OpsGenie。
PagerDuty v1使用其 v1 API 将告警发送到 PagerDuty。(已弃用)
PagerDuty v2使用其 v2 API 将告警发送到 PagerDuty。
post将数据 HTTP POST 到指定 URL。
publish将告警发布到多个 Kapacitor 主题。
Pushover将告警发送到 Pushover。
Sensu将告警消息发布到 Sensu 客户端。
ServiceNow将告警发送到 ServiceNow。
Slack将告警消息发布到 Slack 频道。
SNMPTrap触发 SNMP trap。
tcp通过原始 TCP 将数据发送到指定地址。
Telegram将告警消息发布到 Telegram 客户端。
VictorOps将告警发送到 VictorOps。
Zenoss将告警发送到 Zenoss。

匹配表达式

告警处理程序支持匹配表达式,用于过滤处理程序将处理的告警事件。

匹配表达式是 TICKscript lambda 表达式。触发告警的数据对匹配表达式可用,包括所有字段和标签。

除了触发告警的数据之外,还可以获取有关告警的元数据。此告警元数据可通过各种函数访问。

名称类型描述
levelint事件的告警级别,为 ‘OK’、‘INFO’、‘WARNING’ 和 ‘CRITICAL’ 对应的 ‘0’、‘1’、‘2’ 或 ‘3’。
changedbool指示此事件的告警级别是否已更改。
namestring返回触发数据的测量名称。
taskNamestring返回生成告警事件的任务名称。
持续时间持续时间返回非 OK 状态的事件持续时间。

此外,还定义了变量 OKINFOWARNINGCRITICAL,以对应 level 函数的返回值。

例如,要只将 critical 告警发送到处理程序,请使用此匹配表达式

match: level() == CRITICAL

示例

仅将更改的事件发送到处理程序

match: changed() == TRUE

仅将 WARNING 和 CRITICAL 事件发送到处理程序

match: level() >= WARNING

将标签 “host” 等于 s001.example.com 的事件发送到处理程序

match: "\"host\" == 's001.example.com'"

告警事件数据

发送到处理程序的每个告警事件都包含以下告警数据

名称描述
ID告警的 ID,用户定义。
消息告警消息,用户定义。
Details告警详情,用户定义的 HTML 内容。
时间告警发生的事件。
Duration告警的持续时间(以纳秒为单位)。
LevelOK、INFO、WARNING 或 CRITICAL 之一。
数据包含触发告警数据的 influxql.Result。
Recoverable指示告警是否可自动恢复。由 .noRecoveries() 属性决定。

此数据由 事件处理程序 在处理告警事件时使用。

告警消息使用 Golang Template,并且可以访问告警数据。

|alert()
  // ...
  .message('{{ .ID }} is {{ .Level }} value:{{ index .Fields "value" }}, {{ if not .Recoverable }}non-recoverable{{ end }}')

此页面是否有帮助?

感谢您的反馈!


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