サーバーに問題が発生したとき、気づかないうちにサービスが落ちていた……という事態を防ぐのがアラートです。この記事ではPrometheusのAlertmanagerを使ったアラート設定の全体像を解説します。
アラート設定の全体像
PrometheusとAlertmanagerを連携させたアラートの流れは以下の通りです。
| ステップ | 内容 |
|---|---|
| ① | Prometheusがメトリクスを収集 |
| ② | アラートルール(alert.rules.yml)の条件を満たしたら発火 |
| ③ | PrometheusがAlertmanagerにアラートを送信 |
| ④ | AlertmanagerがSlack・メールなどに通知 |
Alertmanagerのインストール
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
tar -xzf alertmanager-0.27.0.linux-amd64.tar.gz
sudo mv alertmanager-0.27.0.linux-amd64/alertmanager /usr/local/bin/
sudo mv alertmanager-0.27.0.linux-amd64/amtool /usr/local/bin/
sudo mkdir -p /etc/alertmanager /var/lib/alertmanager
Alertmanagerのsystemdサービス登録
sudo nano /etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --storage.path=/var/lib/alertmanager
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start alertmanager
sudo systemctl enable alertmanager
ブラウザで http://サーバーIP:9093 にアクセスしてAlertmanagerのWeb UIが表示されれば起動成功です。
PrometheusからAlertmanagerへの接続設定
Prometheusがアラートを発火したとき、AlertmanagerのURLに通知を送る設定が必要です。/etc/prometheus/prometheus.yml に以下を追記します。
global:
scrape_interval: 15s
evaluation_interval: 15s
# アラートルールファイルの指定
rule_files:
- "/etc/prometheus/alert.rules.yml"
# AlertmanagerへのURL
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
sudo systemctl reload prometheus
アラートルールの設定
sudo nano /etc/prometheus/alert.rules.yml
groups:
- name: server_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU使用率が80%を超えています"
description: "{{ $labels.instance }} のCPU使用率が {{ $value }}% です"
- alert: DiskAlmostFull
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
for: 5m
labels:
severity: critical
annotations:
summary: "ディスク残量が10%未満です"
description: "{{ $labels.instance }} のディスク残量が {{ $value }}% です"
Slack通知の設定
sudo nano /etc/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver: 'slack'
receivers:
- name: 'slack'
slack_configs:
- api_url: 'あなたのSlack Webhook URL'
channel: '#alerts'
title: '[{{ .Status | toUpper }}] {{ .CommonAnnotations.summary }}'
text: '{{ .CommonAnnotations.description }}'
sudo systemctl restart alertmanager
アラートルールの動作確認
promtool check rules /etc/prometheus/alert.rules.yml
PrometheusのWeb UI(http://サーバーIP:9090)の「Alerts」タブでルールの発火状況を確認できます。
まとめ
- アラートの流れ:Prometheus(収集・評価)→ Alertmanager(通知)→ Slack/メール
- prometheus.ymlに
rule_filesとalerting.alertmanagersの両方を設定する - Alertmanagerはsystemdサービスとして起動・管理する(ポート9093)
- PromQLのアラート条件を
alert.rules.ymlに記述する promtool check rulesでルールの構文チェックができる



コメント