告警 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 崩溃或重启也能发送已解决的通知。

本页内容