サーバー構築

アラート設定でサーバー障害を即座に検知する【Prometheus Alertmanager入門】

サーバー構築
記事内に広告が含まれています。

サーバーに問題が発生したとき、気づかないうちにサービスが落ちていた……という事態を防ぐのがアラートです。この記事では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_filesalerting.alertmanagers の両方を設定する
  • Alertmanagerはsystemdサービスとして起動・管理する(ポート9093)
  • PromQLのアラート条件を alert.rules.yml に記述する
  • promtool check rules でルールの構文チェックができる

コメント

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