Prometheus アラート設定

スポンサーリンク

Prometheusは障害発生時にEmail, Slack, Hipchatなど多数の通知機能を備えています。このページではアラートを定義し、アラートを通知する簡易的な操作を説明します。

単にアラートを発報するだけでは運用は成り立ちません。多くの場合はアラートを抑制したり類似アラートをまとめたりの必要性に迫られるでしょう。このような機能は「Prometheus アラートマネージャー」を参照ください。

前提

参照資料

動作確認済環境

  • Rocky Linux 8.6
  • Prometheus 2.36.2
  • alertmanager 0.24.0

構成図

3台の仮想マシンに対して、以下コンポーネントがインストール済の状態とします。

+----------------+ +----------------+ +----------------+
| linux040       | | linux041       | | linux042       |
| 172.16.1.40/24 | | 172.16.1.41/24 | | 172.16.1.42/24 |
| node_exporter  | | node_exporter  | | node_exporter  |
| prometheus     | |                | |                |
+----------------+ +----------------+ +----------------+

アラートに関する設定

アラートの設定

アラートの書式は「Prometheus レコーディング」と非常によく似ています。以下のように設定すれば、jobがnodeという名前のマシンについて、80%未満が生存していればアラート「SomeInstancesDown」を発報し、50%未満が生存していればアラート「ManyInstancesDown」を発報します。

cat << EOF > /etc/prometheus/rules.yml 
groups:
  - name: example
    rules:
      - record: job:up:avg
        expr: avg without(instance)(up{job="node"})
      - alert: SomeInstancesDown
        expr: job:up:avg < 0.8
        for: 5m
        labels:
          severity: warn
      - alert: ManyInstancesDown
        expr: job:up:avg < 0.5
        for: 5m
        labels:
          severity: critical
EOF

Prometheus レコーディング」と同様に、prometheus.ymlに外部ファイルrules.ymlを参照するように設定する。

cat << EOF > /etc/prometheus/prometheus.yml 
global:
  scrape_interval: 10s
  evaluation_interval: 10s

rule_files:
   - rules.yml

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
        - 172.16.1.40:9090
  - job_name: node
    static_configs:
      - targets:
        - 172.16.1.40:9100
        - 172.16.1.41:9100
        - 172.16.1.42:9100
EOF

アラートマネージャーの設定

アラートを発報するにはアラートマネージャーというソフトウェアが必要です。このページでは動作確認用の最低限の説明に留めます。

まずは、アラートマネージャーをインストールします。

dnf install alertmanager

メールを用いた通報をするには以下のように設定します。

cat << EOF > /etc/prometheus/alertmanager.yml 
route:
  receiver: 'email-notice'

receivers:
- name: 'email-notice'
  email_configs:
  - to: '<宛先メールアドレス>'
    from: '送信元名 <送信元メールアドレス>'
    smarthost: '<メールサーバFQDN>:<メールサーバポート番号>'
    auth_username: '<メールユーザ名>'
    auth_password: '<メールパスワード>'
    require_tls: false
EOF

アラートマネージャーを起動します。

systemctl enable alertmanager.service --now

アラートマネージャーはtcp9093でlistenしています。Prometheusからアラートマネージャーのtcp9093へ通報するように設定します。

cat << EOF > /etc/prometheus/prometheus.yml 
global:
  scrape_interval: 10s
  evaluation_interval: 10s

rule_files:
   - rules.yml

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
        - 172.16.1.40:9090
  - job_name: node
    static_configs:
      - targets:
        - 172.16.1.40:9100
        - 172.16.1.41:9100
        - 172.16.1.42:9100

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 'localhost:9093'
EOF

アラートの動作確認

アラートの状態遷移

アラート画面(http://<IPアドレス>9090/alerts)をブラウザで閲覧します。すると、アラートが緑色で「inactive」と表示されます。これが正常な状態です。

アラートの状態 Inactive

1台のマシンでNode Exporterを停止し、疑似的な障害を発生させます。

systemctl stop node_exporter.service 

アラート画面を見ると、黄色で「pending」と表示されます。この時点ではアラートは発報されません。

アラートの状態 Pending

ここでrules.ymlに設定したアラートのルールを思い出してください。以下にrules.yamlを再掲します。「for:5m」という期間を設定しています。これは一時的なダウンで発報しないための仕様で、exprの条件を満たした時間がforを超過すると、「pending」から「firing」に変わります。

cat << EOF > /etc/prometheus/rules.yml 
groups:
  - name: example
    rules:
      - record: job:up:avg
        expr: avg without(instance)(up{job="node"})
      - alert: SomeInstancesDown
        expr: job:up:avg < 0.8
        for: 5m
      - alert: ManyInstancesDown
        expr: job:up:avg < 0.5
        for: 5m
EOF

5分経過後、再度、アラート画面を見ます。状態が「pending」から「firing」に変わった事を確認します。

アラートの状態 Firing

メールの受信確認

メールサーバの設定に誤りがないならば、以下スクリーンショットのようにメールの受信を確認できます。もし、メールサーバの構築が手間ならばSMTPによる接続を公開しているフリーメール(Gmail, Yahooメールなど)を利用しても良いでしょう。

メール確認

補足 メール以外の通知方法

webhook

アラートマネージャーはwebhookによる通知も可能です。適当な動作確認用のwebhookをすぐに準備できない方はwebhook.siteを利用すると良いでしょう。以下スクリーンショットのようなサービスです。

webhook.siteのスクリーンショット

webhookに通知するには以下のような設定を作成します。urlの部分は環境に合わせて適宜変更してください。

cat << EOF > /etc/prometheus/alertmanager.yml 
route:
  receiver: 'webhook-notice'

receivers:
- name: webhook-notice
  webhook_configs:
  - url: https://webhook.site/18b24b33-efcc-4713-9cc9-4a83909af3a6
EOF

node exporterのうち1台を停止させると、以下のようなアラートが発報されます。

webhookの動作確認

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