Kapacitor 警报概述
Kapacitor使得以两种不同方式处理警报消息成为可能。
- 消息可以直接推送到通过Alert节点暴露的事件处理程序。
- 消息可以发布到一个主题名称空间,多个警报处理程序可以订阅。
无论使用哪种方法,处理程序都需要在配置文件中启用和配置。如果处理程序需要敏感信息,如令牌和密码,您也可以使用Kapacitor HTTP API进行配置。
推送到处理程序
将消息推送到处理程序是开始使用Kapacitor指南中介绍的基本方法。这仅涉及通过alert节点调用相关的链接方法。消息可以推送到log()文件、email()服务、httpOut()缓存以及许多 треть-party services。
发布与订阅
警报主题仅仅是一个命名空间,用于分组警报。当警报事件触发时,它可以被发布到一个主题。多个处理程序可以订阅(可以绑定)到该主题,所有处理程序针对该主题处理每个警报事件。处理程序通过 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文档。
有关定义和使用警报主题的详细说明,请参阅 Using Alert Topics 的操作指南。
处理程序
处理器对特定主题的传入警报事件采取行动。
每个处理器恰好操作一个主题。
处理程序列表
以下是可用的警报事件处理程序列表:
| 处理器 | 描述 |
|---|---|
| aggregate | 在指定的时间间隔内聚合警报消息。 |
| 告警 | 向告警系统发送告警信息。 |
| 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陷阱。 |
| tcp | 通过原始 TCP 将数据发送到指定地址。 |
| Telegram | 将警报消息发送到Telegram客户端。 |
| VictorOps | 向VictorOps发送警报。 |
| Zenoss | 向 Zenoss 发送警报。 |
匹配表达式
警报处理器支持匹配表达式,以过滤处理的警报事件。
匹配表达式是一个TICKscript lambda表达式。触发警报的数据可以被匹配表达式访问,包括所有字段和标签。
除了触发警报的数据之外,关于警报的元数据也是可用的。 该警报元数据可以通过各种函数获取。
| 名称 | 类型 | 描述 |
|---|---|---|
| 级别 | int | 事件的警报级别,其中之一为‘0’,‘1’,‘2’,或‘3’,对应‘正常’,‘信息’,‘警告’,和‘严重’。 |
| changed | bool | 指示警报级别是否因该事件而改变。 |
| 名称 | 字符串 | 返回触发数据的测量名称。 |
| 任务名称 | 字符串 | 返回触发警报事件的任务名称。 |
| 持续时间 | 持续时间 | 返回事件在非正常状态下的持续时间。 |
此外,变量 OK、INFO、WARNING 和 CRITICAL 已被定义,以对应 level 函数的返回值。
例如,发送仅限于关键警报到处理程序,请使用此匹配表达式:
match: level() == CRITICAL
示例
仅将更改的事件发送到处理程序:
match: changed() == TRUE
仅将警告和严重事件发送到处理程序:
match: level() >= WARNING
将标签为“host”等于 s001.example.com 的事件发送到处理程序:
match: "\"host\" == 's001.example.com'"
警报事件数据
发送到处理程序的每个警报事件包含以下警报数据:
| 名称 | 描述 |
|---|---|
| ID | 警报的ID,用户定义。 |
| 消息 | 警报消息,用户定义。 |
| 详细信息 | 警报详细信息,用户定义的HTML内容。 |
| 时间 | 警报发生的时间。 |
| 持续时间 | 警报持续的时间(以纳秒为单位)。 |
| 级别 | 可以是 OK、INFO、WARNING 或 CRITICAL 之一。 |
| 数据 | 包含触发警报的数据的 influxql.Result。 |
| 可恢复 | 指示警报是否可以自动恢复。由.noRecoveries()属性决定。 |
这些数据被 事件处理器 在处理警报事件时使用。
警报消息使用 Golang Template 并且可以访问警报数据。
|alert()
// ...
.message('{{ .ID }} is {{ .Level }} value:{{ index .Fields "value" }}, {{ if not .Recoverable }}non-recoverable{{ end }}')