告警 API
重要提示:Prometheus 负责向 Alertmanager 发送告警。建议在 Prometheus 中根据时间序列数据配置告警规则,而不是向告警 API 发送告警,因为 Prometheus 支持多种特殊情况,以确保即使 Alertmanager 崩溃或重启,告警也能被送达。
您可以通过 APIv2 向 Alertmanager 发送告警。APIv2 是一个 OpenAPI 规范,可以在这里 找到。
APIv1 在 Alertmanager 0.16.0 版本中被弃用,并在 Alertmanager 0.27.0 版本中被移除。
要向 APIv2 发送告警,请向 api/v2/alerts 发送一个 POST 请求。您必须将 Content-Type 头部设置为 application/json,并发送包含一个告警数组的 JSON 数据。
这里有一个例子
[
{
"labels": {
"alertname": "<required_value>",
"<name>": "<value>",
...
},
"annotations": {
"<name>": "<value>",
},
"startsAt": "<RFC3339>",
"endsAt": "<RFC3339>",
"generatorURL": "<value>"
},
...
]
所有告警都有标签、注解、一个可选的 startsAt 时间戳和一个可选的 endsAt 时间戳。所有时间戳都应为 RFC3339 格式。
标签用于对同一告警的相同实例进行去重,而注解则用于包含告警的其他信息,例如摘要、描述或指向运行手册的 URL。
startsAt 时间戳是告警触发的时间。如果省略,Alertmanager 会将 startsAt 设置为当前时间。
endsAt 时间戳是告警应解决的时间。如果省略,Alertmanager 会将 endsAt 设置为当前时间 + resolve_timeout。
generatorURL 是一个唯一的 URL,链接到告警的来源。例如,它可能链接到 Prometheus 中触发的规则。
对客户端的期望
客户端应定期向 Alertmanager 重新发送触发中的告警,直到告警解决为止。
具体的间隔取决于多个变量,例如 endsAt 时间戳,或者如果省略,则取决于 resolve_timeout 的值。如果省略 endsAt 时间戳,Alertmanager 会将告警现有的 endsAt 时间戳更新为当前时间 + resolve_timeout。
触发中的告警在其 endsAt 时间戳过后即被解决。
为确保已解决的告警能发送解决通知,客户端还应在告警解决后最多 5 分钟内,向 Alertmanager 重新发送已解决的告警。由于 Alertmanager 是无状态的,这可以确保即使 Alertmanager 崩溃或重启,解决通知也能被发送。