Kapacitor 告警概览
Kapacitor 允许以两种不同的方式处理告警消息。
- 消息可以直接推送到通过 Alert 节点公开的事件处理器。
- 消息可以发布到主题命名空间,一个或多个告警处理器可以订阅该命名空间。
无论使用哪种方法,都需要在配置文件中启用和配置处理器。如果处理器需要令牌和密码等敏感信息,也可以使用 Kapacitor HTTP API 进行配置。
推送到处理器
将消息推送到处理器是在 Kapacitor 入门 指南中介绍的基本方法。这涉及简单地调用通过 alert 节点提供的相关链式方法。消息可以推送到 log()
文件、email()
服务、httpOut()
缓存和许多 第三方服务。
发布和订阅
告警主题只是一个用于分组告警的命名空间。当告警事件触发时,它可以发布到主题。多个处理器可以订阅(可以绑定)到该主题,并且所有处理器都处理该主题的每个告警事件。处理器通过 kapacitor
命令行客户端和处理器绑定文件绑定到主题。处理器绑定文件可以用 yaml
或 json
编写。它们包含四个关键字段和一个可选字段。
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。 |
发送包含告警数据的电子邮件。 | |
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 | 将告警消息发布到 Telegram 客户端。 |
Zenoss | VictorOps |
将告警发送到 VictorOps。
Zenoss
将告警发送到 Zenoss。
匹配表达式
告警处理器支持匹配表达式,用于过滤处理器处理哪些告警事件。 | 匹配表达式是 TICKscript lambda 表达式。触发告警的数据可用于匹配表达式,包括所有字段和标签。 | 描述 |
---|---|---|
除了触发告警的数据外,还提供了关于告警的元数据。此告警元数据通过各种函数可用。 | 名称 | 类型 |
级别 | 整型 | 事件的告警级别,为 ‘0’、‘1’、‘2’ 或 ‘3’ 之一,分别对应 ‘OK’、‘INFO’、‘WARNING’ 和 ‘CRITICAL’。 |
已更改 | 布尔型 | 指示此事件是否更改了告警级别。 |
名称 | 布尔型 | 字符串 |
返回触发数据的指标名称。 | 返回触发数据的指标名称。 | 任务名称 |
返回生成告警事件的任务名称。
持续时间
match: level() == CRITICAL
返回事件处于非 OK 状态的持续时间。
此外,已定义变量 OK
、INFO
、WARNING
和 CRITICAL
以对应于 level
函数的返回值。
match: changed() == TRUE
例如,要仅将严重告警发送到处理器,请使用此匹配表达式
match: level() >= WARNING
示例
match: "\"host\" == 's001.example.com'"
仅将已更改的事件发送到处理器
仅将 WARNING 和 CRITICAL 事件发送到处理器
告警处理器支持匹配表达式,用于过滤处理器处理哪些告警事件。 | 描述 |
---|---|
将标签“host”等于 s001.example.com 的事件发送到处理器 | 告警事件数据 |
发送到处理器的每个告警事件都包含以下告警数据 | ID |
告警的 ID,用户自定义。 | 消息 |
告警消息,用户自定义。 | 详情 |
告警详情,用户自定义 HTML 内容。 | 时间 |
告警发生的时间。 | 持续时间 |
告警的持续时间,以纳秒为单位。 | 级别 |
OK、INFO、WARNING 或 CRITICAL 之一。 | 数据 |
influxql.Result,包含触发告警的数据。
可恢复
|alert()
// ...
.message('{{ .ID }} is {{ .Level }} value:{{ index .Fields "value" }}, {{ if not .Recoverable }}non-recoverable{{ end }}')