PrometheusとAlertmanagerの連携による監視アラート環境の構築

Alertmanagerのデプロイメント

Alertmanagerを環境に導入する方法は複数あります。ここでは、バイナリ、Docker、Docker Composeを用いた3つの主要なデプロイメント手法を紹介します。

1. バイナリファイルによるインストール

公式リリースページからバイナリをダウンロードし、直接実行する方法です。

# v0.26.0のダウンロード
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz

# /optディレクトリへの展開
tar -xvf alertmanager-0.26.0.linux-amd64.tar.gz -C /opt/
mv /opt/alertmanager-0.26.0.linux-amd64 /opt/alertmanager
cd /opt/alertmanager

# バックグラウンドでの起動
nohup ./alertmanager --config.file=alertmanager.yml > alertmanager.log 2>&1 &

# 設定ファイルの構文チェック
./amtool check-config alertmanager.yml

2. Dockerコンテナによる起動

Docker CLIを使用して単一コンテナとして実行します。

docker run -d \
  --name alertmgr \
  -p 9093:9093 \
  -v /opt/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
  prom/alertmanager:v0.26.0

3. Docker Composeによる起動

インフラストラクチャをコードとして管理する場合に最適です。

version: '3.8'
services:
  alertmanager:
    image: prom/alertmanager:v0.26.0
    container_name: alertmgr_service
    ports:
      - "9093:9093"
    volumes:
      - ./config/alertmanager.yml:/etc/alertmanager/alertmanager.yml
    restart: always

上記の構成ファイルを作成後、docker-compose up -d コマンドで起動します。

設定ファイルの構成

PrometheusとAlertmanagerを連携させ、効果的なアラート通知を行うための各設定ファイルの詳細を解説します。

alertmanager.yml

アラートのルーティング、受信者、および抑制ルールを定義します。メール通知を利用する場合は、SMTPサーバーの設定が必須です。

global:
  resolve_timeout: 10m
  smtp_smarthost: 'smtp.gmail.com:587'
  smtp_from: 'monitoring@example.com'
  smtp_auth_username: 'monitoring@example.com'
  smtp_auth_password: 'your_app_password'
  smtp_require_tls: true

route:
  group_by: ['cluster', 'alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h
  receiver: 'default-mail'

receivers:
  - name: 'default-mail'
    email_configs:
      - to: 'ops-team@example.com'
        send_resolved: true

inhibit_rules:
  - source_matchers:
      - severity = critical
    target_matchers:
      - severity = warning
    equal: ['alertname', 'cluster', 'instance']

prometheus.yml

Prometheus側でAlertmanagerのエンドポイントを指定し、評価するルールファイルをロードします。

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - '10.0.0.50:9093'

rule_files:
  - "/etc/prometheus/rules/*.yml"

node_rules.yml (記録ルール)

頻繁に使用されるPromQLクエリを事前に計算し、メトリクスとして保存するための記録ルール(Recording Rules)です。

groups:
  - name: node_recording_rules
    interval: 30s
    rules:
      - record: node:cpu_utilization:ratio
        expr: 1 - avg without(cpu) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
        labels:
          metric_category: compute

      - record: node:memory_utilization:ratio
        expr: 1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
        labels:
          metric_category: memory

      - record: node:disk_utilization:ratio
        expr: 1 - (node_filesystem_avail_bytes / node_filesystem_size_bytes)
        labels:
          metric_category: storage

node_alerts.yml (アラートルール)

記録ルールで算出されたメトリクスを評価し、閾値を超えた場合にアラートを発砲するルールです。

groups:
  - name: node_alerting_rules
    rules:
      - alert: HighCpuUsage
        expr: node:cpu_utilization:ratio * 100 > 75
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "CPU使用率が高くなっています: {{ $labels.instance }}"
          description: "インスタンス {{ $labels.instance }} のCPU使用率が5分間連続で {{ $value | printf \"%.2f\" }}% を超えています。"

      - alert: HighMemoryUsage
        expr: node:memory_utilization:ratio * 100 > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "メモリ使用率が高くなっています: {{ $labels.instance }}"
          description: "インスタンス {{ $labels.instance }} のメモリ使用率が {{ $value | printf \"%.2f\" }}% に達しています。"

      - alert: DiskSpaceRunningOut
        expr: node:disk_utilization:ratio * 100 > 90
        for: 10m
        labels:
          severity: critical
        annotations:
          summary: "ディスク容量の不足: {{ $labels.instance }}"
          description: "インスタンス {{ $labels.instance }} のディスク使用率が {{ $value | printf \"%.2f\" }}% を超えました。ディスクの拡張または不要ファイルの削除を検討してください。"

prometheus-docker-compose.yml

Prometheus自体をDocker Composeで管理するための構成ファイルです。

version: '3.8'
services:
  prometheus:
    image: prom/prometheus:v2.47.0
    container_name: prometheus_server
    ports:
      - "9090:9090"
    volumes:
      - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./data:/prometheus
      - ./rules:/etc/prometheus/rules
    restart: unless-stopped
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.retention.time=30d'

動作確認

すべてのコンテナが正常に起動した後、ブラウザから以下のURLにアクセスしてアラートの状態を確認します。

Alertmanagerのダッシュボード: http://<サーバーIP>:9093

Prometheusのアラート画面: http://<サーバーIP>:9090/alerts

意図的に負荷をかけて閾値を超えさせ、設定したメールアドレスにアラート通知が正しく送信されることを確認します。

タグ: Prometheus Alertmanager Docker Compose PromQL SMTP

9月9日 15:20 投稿