请参与 Prometheus 用户调研(2026 年 3 月版) ,帮助社区确定未来开发工作的优先级!

警报 API

重要提示:Prometheus 会负责将警报发送到 Alertmanager。建议在 Prometheus 中基于时间序列数据配置警报规则,而不是直接向警报 API 发送警报,因为 Prometheus 支持许多特殊情况,可确保即使在 Alertmanager 崩溃或重启时,警报也能被正确投递。

您可以通过 APIv2 向 Alertmanager 发送警报。APIv2 是作为 OpenAPI 规范定义的,可以在此处 找到。

APIv1 在 Alertmanager 0.16.0 版本中被弃用,并在 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 是一个唯一链接,指向警报的来源。例如,它可以链接到 Prometheus 中的触发规则。

客户端的期望

客户端需要定期向 Alertmanager 重新发送触发中的警报,直到警报被解决。

具体间隔取决于多个变量,例如 endsAt 时间戳,或者如果省略该时间戳,则取决于 resolve_timeout 的值。如果省略 endsAt 时间戳,Alertmanager 会将该警报现有的 endsAt 时间戳更新为当前时间 + resolve_timeout

触发中的警报会在其 endsAt 时间戳过期后被解决。

为了确保已解决的警报能够发送解决通知,客户端还需要在警报解决后的 5 分钟内,继续向 Alertmanager 重新发送已解决的警报。由于 Alertmanager 是无状态的,这可以确保即使 Alertmanager 崩溃或重启,已解决的通知也能被成功发送。

本页内容