【Prometheus】Alertmanagerでアラートを一時的に停止する

2022.07.03
2024.03.24
監視
AlertmanagerDocker ComposePrometheusSilence

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

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上のアラートも消えました。

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee