はじめに
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の構築
作成するファイルは下記の通りです。
.
├── alertmanager
│ └── alertmanager.yml
├── docker-compose.yml
└── prometheus
├── alert.rules
└── prometheus.yml
docker-compose.yml
構築するコンテナはPrometheus、Alertmanager、node-exporterの3つです。
version: '3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus:/etc/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
ports:
- '9090:9090'
alertmanager:
image: prom/alertmanager
container_name: alertmanager
volumes:
- ./alertmanager:/etc/alertmanager
command:
- "--config.file=/etc/alertmanager/alertmanager.yml"
ports:
- '9093:9093'
node-exporter:
image: prom/node-exporter
container_name: node-exporter
ports:
- 9100:9100
prometheus.ymlとalert.rules
Prometheusの設定ファイルを作成します。
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'codelab-monitor'
rule_files:
- /etc/prometheus/alert.rules
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- alertmanager:9093
scrape_configs:
- job_name: 'node'
static_configs:
- targets:
- node-exporter:9100
alert.rules
でノードがダウンした際にアラートが飛ぶようにします。
groups:
- name: example
rules:
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
alertmanager.yml
Slackにアラートが飛ぶように、Alertmanagerの設定ファイルを作成します。
今回は、Silenceの動きを試したいので、同じアラートが頻繁に来るようにしています。
global:
slack_api_url: 'slackのwebhook URL'
route:
receiver: 'slack'
group_wait: 10s
group_interval: 30s
repeat_interval: 1m
receivers:
- name: 'slack'
slack_configs:
- channel: '#alert-test'
コンテナ起動
必要なファイルを作成したら、コンテナを起動します。
docker-compose up -d
アラートの発生
node-exporterのコンテナを停止してアラートを発生させます。
docker container stop node-exporter
localhost:9090
にアクセスしてStatus/Targetsを確認すると、インスタンスがダウンしていることが確認できます。
Slackにもアラートがくることが確認できます。
localhost:9093
からAlertmanagerにアクセスすると、発生しているアラートを確認できます。
アラートの停止
Silenceを作成して、先ほどのアラートを無視できるようにしていきます。
「New Silence」からSilenceを作成します。
Silenceを作成すると、インスタンスはdownのままですが、Slackへのアラートが止まり、AlertmanagerのWeb UI上のアラートも消えました。