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 | 将告警发送到 VictorOps。 |
| Zenoss | 将告警发送到 Zenoss。 |
匹配表达式
告警处理程序支持匹配表达式,用于过滤处理程序将处理的告警事件。
匹配表达式是 TICKscript lambda 表达式。触发告警的数据对匹配表达式可用,包括所有字段和标签。
除了触发告警的数据之外,还可以获取有关告警的元数据。此告警元数据可通过各种函数访问。
| 名称 | 类型 | 描述 |
|---|---|---|
| level | int | 事件的告警级别,为 ‘OK’、‘INFO’、‘WARNING’ 和 ‘CRITICAL’ 对应的 ‘0’、‘1’、‘2’ 或 ‘3’。 |
| changed | bool | 指示此事件的告警级别是否已更改。 |
| name | string | 返回触发数据的测量名称。 |
| taskName | string | 返回生成告警事件的任务名称。 |
| 持续时间 | 持续时间 | 返回非 OK 状态的事件持续时间。 |
此外,还定义了变量 OK、INFO、WARNING 和 CRITICAL,以对应 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 | 告警的持续时间(以纳秒为单位)。 |
| Level | OK、INFO、WARNING 或 CRITICAL 之一。 |
| 数据 | 包含触发告警数据的 influxql.Result。 |
| Recoverable | 指示告警是否可自动恢复。由 .noRecoveries() 属性决定。 |
此数据由 事件处理程序 在处理告警事件时使用。
告警消息使用 Golang Template,并且可以访问告警数据。
|alert()
// ...
.message('{{ .ID }} is {{ .Level }} value:{{ index .Fields "value" }}, {{ if not .Recoverable }}non-recoverable{{ end }}')此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 Kapacitor 和本文档提供反馈和错误报告。要获取支持,请使用以下资源: