🐥

Prometheus Alertmanagerで特定時間だけアラート通知をミュートする

2022/02/17に公開

概要

この時間帯にはアラート鳴ってほしくねぇ、というときがありますね。
Prometheus Alertmanagerにはv0.22から、指定のアラートを特定の時間だけミュートする機能が追加されていました。(よかった。)

alertmanagerの設定ファイルにmute_time_intervalというfieldを追加してやることで実現可能です。

公式ドキュメント
https://prometheus.io/docs/alerting/0.22/configuration/#mute_time_interval

設定例

2パターン書いてみました。(こんなユースケースはあるのだろうか。)

  • 平日10:00~19:00の勤務時間以外は鳴ってほしくない(out-of-business-hours)
  • 毎月最後の1週間は鳴ってほしくない(last-week-of-month-in-utc)
route:
  receiver: default-receiver
  routes:
    - matchers: [ foo = bar01 ]
      receiver: sample-receiver01
      mute_time_intervals:
        - out-of-business-hours
    - matchers: [ foo = bar02 ]
      receiver: sample-receiver02
      mute_time_intervals:
        - last-week-of-month-in-utc
    - matchers: [ foo = bar03 ]
      receiver: sample-receiver03

mute_time_intervals:
  - name: out-of-business-hours
    time_intervals:
      - weekdays: ['Saturday','Sunday']
      - times:
        - start_time: '10:00' #JST 19:00
          end_time: '24:00' #JST 09:00
        - start_time: '00:00' #JST 09:00
          end_time: '01:00' #JST 10:00
  - name: last-week-of-month-in-utc
    time_intervals:
      - days_of_month: ['-7:-1']

上に示した設定例だと、
fooラベルがbar01のアラート -> 平日勤務時間以外の時間帯はミュート。
fooラベルがbar02のアラート -> 月末一週間はミュート。
fooラベルがbar03のアラート -> 常にミュート状態ではない。
となります。

扱いづらいのは、サポートされているtimezoneがUTCだけであるところ。
これは2022/02時点で最新のv0.23.0でも同様です。
UTCしかサポートしていないことが明示されています。
https://github.com/prometheus/alertmanager/blob/61046b17771a57cfd4c4a51be370ab930a4d7d54/docs/configuration.md?plain=1#L255-L256

私の勤務する会社では10:00~19:00勤務なのですが、この場合の勤務時間外をUTCで表現するとだいぶややこしいことになっていますね。。

またdays_of_monthには負の数を入れることができます。
-1は月の最終日を表します。
最終日が31日ならば、-7は25日を表します。
そしてこれもUTC。
日本時間ならば25日午前9:00から、翌月1日午前9:00までがミュート期間となります。

timezone対応のPull Request

https://github.com/prometheus/alertmanager/pull/2782

このPull Requestでtimezoneの指定がサポートされそうです。
早く、リリースされるといいなぁ。

Discussion