告警 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 中觸發的規則。

對客戶端的預期

客戶端應當定期向 Alertmanager 重新發送處於觸發狀態的告警,直到告警被解決。

確切的間隔取決於許多變數,例如 endsAt 時間戳,或者如果省略,則取決於 resolve_timeout 的值。如果省略了 endsAt 時間戳,Alertmanager 將把告警現有的 endsAt 時間戳更新為當前時間 + resolve_timeout

一旦 endsAt 時間戳過期,觸發中的告警即被視為已解決。

為確保向已解決的告警傳送“已解決”通知,客戶端還應當在告警解決後最多 5 分鐘內,繼續向 Alertmanager 重新發送已解決的告警。由於 Alertmanager 是無狀態的,這可以確保即使 Alertmanager 崩潰或重啟,也能傳送“已解決”通知。

本頁內容