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