告警 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 崩潰或重啟,也能傳送“已解決”通知。