【Prometheus】Alertmanagerでアラートを一時的に停止する
はじめに
Prometheusのコンポーネントの1つであるAlertmanagerでサイレンス(Silence)を作成する方法を紹介します。
AlertmanagerのSilence
AlertmanagerのSilenceは、特定のアラートを一定の期間無視する設定です。
問題があることがあらかじめわかっているときや、メンテナンスの際に設定して無駄なアラートが飛ばないようにします。
Silenceの作成
Silenceの作成は、AlertmanagerのWeb UIから作成できます。
すでにあるアラートから作成する方法と「New Silence」から作成する方法があります。
作成画面で、Silenceする期間と対象としたいアラートのラベル、誰が作成したかとコメントを記入します。
「Preview Alerts」から実際に対象になるアラートを確認することができます。
問題なければ、「Create」で作成完了です。
Silenceの確認
作成したSilenceを確認する場合は、上部のメニューから「Silences」を選択します。
ここでは、有効になっているSilence、期間が外れていてまだ適用されていないSilence、無効になっているSilenceが確認できます。
「View」から各Silenceの詳細が確認できます。
設定した内容とSilenceされているアラートが確認できます。
試してみる
ここからは、Docker Composeを使ってローカルで試していきます。
PrometheusとAlertmanagerの構築
作成するファイルは下記の通りです。
1.
2├── alertmanager
3│ └── alertmanager.yml
4├── docker-compose.yml
5└── prometheus
6 ├── alert.rules
7 └── prometheus.yml
docker-compose.yml
構築するコンテナはPrometheus、Alertmanager、node-exporterの3つです。
1version: '3'
2services:
3 prometheus:
4 image: prom/prometheus
5 container_name: prometheus
6 volumes:
7 - ./prometheus:/etc/prometheus
8 command:
9 - "--config.file=/etc/prometheus/prometheus.yml"
10 ports:
11 - '9090:9090'
12 alertmanager:
13 image: prom/alertmanager
14 container_name: alertmanager
15 volumes:
16 - ./alertmanager:/etc/alertmanager
17 command:
18 - "--config.file=/etc/alertmanager/alertmanager.yml"
19 ports:
20 - '9093:9093'
21 node-exporter:
22 image: prom/node-exporter
23 container_name: node-exporter
24 ports:
25 - 9100:9100
prometheus.ymlとalert.rules
Prometheusの設定ファイルを作成します。
1global:
2 scrape_interval: 15s
3 evaluation_interval: 15s
4 external_labels:
5 monitor: 'codelab-monitor'
6rule_files:
7 - /etc/prometheus/alert.rules
8alerting:
9 alertmanagers:
10 - scheme: http
11 static_configs:
12 - targets:
13 - alertmanager:9093
14scrape_configs:
15 - job_name: 'node'
16 static_configs:
17 - targets:
18 - node-exporter:9100
alert.rules
でノードがダウンした際にアラートが飛ぶようにします。
1groups:
2- name: example
3 rules:
4 - alert: InstanceDown
5 expr: up == 0
6 for: 1m
7 labels:
8 severity: page
9 annotations:
10 summary: "Instance {{ $labels.instance }} down"
11 description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
alertmanager.yml
Slackにアラートが飛ぶように、Alertmanagerの設定ファイルを作成します。
今回は、Silenceの動きを試したいので、同じアラートが頻繁に来るようにしています。
1global:
2 slack_api_url: 'slackのwebhook URL'
3route:
4 receiver: 'slack'
5 group_wait: 10s
6 group_interval: 30s
7 repeat_interval: 1m
8receivers:
9 - name: 'slack'
10 slack_configs:
11 - channel: '#alert-test'
コンテナ起動
必要なファイルを作成したら、コンテナを起動します。
1docker-compose up -d
アラートの発生
node-exporterのコンテナを停止してアラートを発生させます。
1docker container stop node-exporter
localhost:9090
にアクセスしてStatus/Targetsを確認すると、インスタンスがダウンしていることが確認できます。
Slackにもアラートがくることが確認できます。
localhost:9093
からAlertmanagerにアクセスすると、発生しているアラートを確認できます。
アラートの停止
Silenceを作成して、先ほどのアラートを無視できるようにしていきます。
「New Silence」からSilenceを作成します。
Silenceを作成すると、インスタンスはdownのままですが、Slackへのアラートが止まり、AlertmanagerのWeb UI上のアラートも消えました。