1. はじめに
- 前回の記事「【初心者】Prometheus/Loki/Grafanaを使ってみる (メトリクス/ログの収集と表示) 」で、データの収集と表示を行った。
- 次のステップとして、PrometheusにAlertmangerコンポーネントを追加し、アラートの出力方法を確認する。
- 関連記事の一覧は以下。
-
【初心者】Prometheus/Loki/Grafanaを使ってみる (メトリクス/ログの収集と表示)
- メトリクスとログを収集しGrafanaで表示させる。
- 【初心者】Prometheus/Loki/Grafanaを使ってみる #2 (Alertmanagerによるアラーム通知)
- 本記事。Alertmanagerを追加し、CPU高負荷時にslackへの通知を行う。
-
【初心者】Prometheus/Loki/Grafanaを使ってみる #3 (Amazon Managed Service for Promethus連携)
- 自分のPrometheusで収集したメトリクスをAmazon Managed Service for Promethusに連携する。
-
【初心者】Prometheus/Loki/Grafanaを使ってみる (メトリクス/ログの収集と表示)
2. やったこと
- 既存のPrometheusサーバにAlertmanagerのコンポーネントを追加し、必要な設定を行う。
- Alertmanagerのインストール、サービス化
- Alertmanagerからの通知先設定(今回はslackへ通知)
- Alertmanagerのルール設定(今回は、監視対象サーバのCPU使用率70%超過で通知)
- ルール適合時に実際にalertが通知されることを確認する。
3. 構成図
4. 手順
4.1 事前準備
- 通知先となるslackを用意する。
- 検証用のワークスペースにチャネル mksamba-prometheus-alert を作成する。
- チャネル mksamba-prometheus-alert に対する Webhook (https://hooks.slack.com/services/xxxxxxのようなURL) を設定する。
4.2 Alertmanager
- 既存の監視サーバ(Prometheusインストール済)にAlertmanagerコンポーネントを追加インストールする。
インストール
- 資材をダウンロード、インストールする。
# 2023/9時点の最新版 v0.26.0 (2023/8/23リリース) を使用
[ec2-user@ip-10-0-0-249 alertmanager]$ wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
[ec2-user@ip-10-0-0-249 alertmanager]$ tar xvf alertmanager-0.26.0.linux-amd64.tar.gz
[ec2-user@ip-10-0-0-249 alertmanager]$ cd alertmanager-0.26.0.linux-amd64/
[ec2-user@ip-10-0-0-249 alertmanager-0.26.0.linux-amd64]$ sudo cp -p alertmanager /usr/local/bin
slack通知設定
- alertmanager.ymlのテンプレートを元に編集し、slack通知設定を行う。
/etc/alertmanager/alertmanager.yml
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'slack'
receivers:
- name: 'slack'
slack_configs:
- api_url: 'https://hooks.slack.com/services/xxxxxxxx'
channel: 'mksamba-prometheus-alert'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
routeのreceiver(アラート受信先)で「slack」を定義し、receiversの「slack」のところで、slackのincoming webhookのURLやチャネル名を設定する。send_resolved: true とすることで、復旧時にも通知が行われる。
alertのルール設定
- 既存のprometheus.yml を編集し、Alertmanagerに関する設定を追加する。
/etc/prometheus/prometheus.yml (変更箇所のみ)
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 'localhost:9093'
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- '/etc/prometheus/alert_rules.yml'
Alertmanagerのインストール場所(エンドポイント)として、localhost:9093を指定し、またalertの詳細を記載する外部ファイルとしてalert_rules.ymlを指定する。
- alert定義ファイル alert_rules.ymlを新規作成し、テスト用のルール(CPU使用率70%超過)を設定する。
/etc/prometheus/alert_rules.yml
groups:
- name: example
rules:
- alert: HighCpuUsage
expr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)) > 70
for: 1m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage on instance {{ $labels.instance }} is above 70% for the last 1 minutes."
サービス化
- systemd ユニットファイルを作成する。
/usr/lib/systemd/system/alertmanager.service
[Unit]
Description=Alert Manager
[Service]
Type=simple
ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanag
er.yml
Restart=always
[Install]
WantedBy=multi-user.target
- Alertmanagerをサービスとして登録、再起動する。
[ec2-user@ip-10-0-0-249 ~]$ sudo systemctl daemon-reload
[ec2-user@ip-10-0-0-249 ~]$ sudo systemctl enable alertmanager.service
[ec2-user@ip-10-0-0-249 ~]$ sudo systemctl start alertmanager.service
[ec2-user@ip-10-0-0-249 ~]$ sudo systemctl status alertmanager.service
prometheusのサービス再起動
- 設定変更反映のため、prometheusも再起動する。
[ec2-user@ip-10-0-0-249 ~]$ sudo systemctl restart prometheus.service
4.3 動作確認
-
prometheusのalertの画面(http://監視サーバ:9090/alerts) で、alertがないことを確認する。
-
監視対象サーバにて、stressコマンドを用いてCPU使用率を70%超にする。
[ec2-user@ip-10-0-0-124 ~]$ stress -c 1
-
stressコマンド実行中、slackに通知(Firing)が来ていることを確認する。またstressコマンド停止後、再度通知(Resolved)が来ていることを確認する。
5. 参考サイト
6. 所感
- やっと監視っぽいことを行うことができてきた。