2023年11月29日水曜日

Gitlab の alertmanager でメール本文をカスタマイズする方法

Gitlab の alertmanager でメール本文をカスタマイズする方法

概要

前回 routes を設定する方法を紹介しました
今回はメールの本文やタイトルをカスタムする方法を紹介します

環境

  • Gitlab 16.3.6
  • Alertmanager 0.25.0

gitlab.rb

alertmanager['receivers'] の email_configs 内にある headers.subject, text を編集します
デフォルトの html メールは無効にするためブランクを設定しておきます

メールの内容には golang のテンプレート構文が使えます
注意するのは変数の定義で golang ではダラー1つで定義しますが今回は docker-compose 内でテンプレートを定義するためダラーを2つにする必要があります

使用できるテンプレート文字列やテンプレート構文に関しては各種公式を参考にしてください

alertmanager['listen_address'] = '0.0.0.0:9093'
alertmanager['receivers'] = [
  {
    name: 'email',
    email_configs: [
      to: 'your_to@mail',
      from: 'your_from@mail',
      smarthost: 'smtp.ess.nifcloud.com:465',
      auth_username: 'your_access_key',
      auth_password: 'your_secret_key',
      require_tls: false,
      headers: {
        subject: '[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] ({{ $$alerts := "" }}{{ $$instance_id := (index .Alerts 0).Labels.instance_id }}{{ range .Alerts }}{{ $$alerts = (printf "%v %v" $$alerts .Labels.alertname) }}{{ end }}{{ $$instance_id }} ->{{ $$alerts }})'
      },
      html: '',
      text: '{{ range .Alerts.Firing }}{{ range .Annotations.SortedPairs }}  - {{ .Name }} = {{ .Value }}{{ "\n" }}{{ end }}{{ end }}',

      send_resolved: true
    ]
  }
]
alertmanager['routes'] = [
  {
    receiver: 'email',
    group_wait: '30s',
    group_interval: '5m',
    repeat_interval: '4h',
    matchers: [ 'instance_id = hoge' ]
  }
]

custom.rules

groups:
- name: Custom
  rules:
  - alert: RedisDown
    expr: avg_over_time(redis_up[5m]) * 100 < 50
    labels:
      severity: critical
      instance_id: hoge
    annotations:
      description: The Redis service is not responding for more than 50% of the time for 5 minutes.
      summary: The Redis service is not responding

動作確認

実際に redis をダウンさせるとカスタムした本文とタイトルでテキストメールが届くと思います

最後に

Gitlab 内の alertmanager のメール本文をカスタムする方法を紹介しました
golang の知識が必要になると alertmanager に送信させる json の内容も把握する必要があります

alertmanager に送信される json 情報はどこかで確認することができるのだろうか

参考サイト

0 件のコメント:

コメントを投稿