解決alertmanager重複傳送訊息的問題

高興的才哥發表於2020-10-11

1,問題

在前一篇部落格中有講到說使用alertmanager,即便設定了repeat_interval,但還是收到了兩條告警,且間隔時間是for標籤的時間

alertmanager片段示例:
routes:
  - receiver: message
    match:
      xxxx:xxxx
    repeat_interval: 3600s
    continue: true
receivers:
- name: message
  webhook_configs:
  - send_resolved: true
    url: http://localhost:8080/message/yyyy
prometheus 規則片段示例:
rules:
- alert: alertName
  expr: up == 1
  for: 5m
  labels:
    xxxx:xxxx

2,可能的原因

1,send_resloved = true

這個標籤表示告警恢復後,會傳送通知,已經正常了。(就是這個標籤的鍋)

2,沒有group_by標籤。

後邊查證,沒有group_by標籤,預設在一組裡邊,所以也沒影響。

3,repeat_interval設定的是s不是h。

這個就更離譜了,Prometheus的duration裡邊有常用的時間單位,當然包含s。

3,結果

1,試驗了一下,是send_resloved=true引起的。

至於收到兩條告警,猜想原因是第二條告警是告警恢復通知,但是由於routes裡邊配置的都是web_hook,觸發到業務介面,都當成告警處理了,所以其實第二個通知的內容可能是告警已經恢復的通知,而不是告警,所以這裡可能是業務邏輯的bug,但還好,在設定send_resloved = false後,就沒有收到第二條訊息了,ps,send_resloved預設就是false的,我就是手殘,沒事兒設定這個,測試還專門提了bug。服氣。

2,關於repeat_interval的理解。

如果repeat_interval:1h,那麼這個小時內,如果有產生多個告警,那麼只會通知一次,一條訊息。

相關文章