告警 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 格式。
标签用于对同一告警的相同实例进行去重,而注解用于包含有关告警的其他信息,例如摘要、描述或指向 runbook 的 URL。
startsAt 时间戳是告警触发的时间。如果省略,Alertmanager 会将 startsAt 设置为当前时间。
endsAt 时间戳是告警应被解决的时间。如果省略,Alertmanager 会将 endsAt 设置为当前时间 + resolve_timeout。
generatorURL 是一个唯一标识告警来源的 URL。例如,它可以指向 Prometheus 中触发规则的 URL。
客户端的期望
客户端应定期将触发的告警重新发送到 Alertmanager,直到告警被解决。
确切的间隔取决于多个变量,例如 endsAt 时间戳,或者如果省略了 resolve_timeout 的值。如果省略了 endsAt 时间戳,Alertmanager 将把告警的现有 endsAt 时间戳更新为当前时间 + resolve_timeout。
触发的告警将在其 endsAt 时间戳过后被解决。
为确保已解决的告警发送了已解决的通知,客户端还应在告警解决后的 5 分钟内将已解决的告警重新发送到 Alertmanager。由于 Alertmanager 是无状态的,这可以确保即使 Alertmanager 崩溃或重启也能发送已解决的通知。