【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の構築

作成するファイルは下記の通りです。

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

参考

タイトルとURLをコピーしました