LoginSignup
1
1

【初心者】Prometheus/Loki/Grafanaを使ってみる #2 (Alertmanagerによるアラーム通知)

Last updated at Posted at 2023-10-02

1. はじめに

2. やったこと

  • 既存のPrometheusサーバにAlertmanagerのコンポーネントを追加し、必要な設定を行う。
    • Alertmanagerのインストール、サービス化
    • Alertmanagerからの通知先設定(今回はslackへ通知)
    • Alertmanagerのルール設定(今回は、監視対象サーバのCPU使用率70%超過で通知)
  • ルール適合時に実際にalertが通知されることを確認する。

3. 構成図

image.png

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がないことを確認する。
    image.png

  • 監視対象サーバにて、stressコマンドを用いてCPU使用率を70%超にする。

[ec2-user@ip-10-0-0-124 ~]$ stress -c 1
  • stressコマンド実行中、prometheusのalert画面で、alertが出ていることを確認する。
    image.png

  • stressコマンド実行中、slackに通知(Firing)が来ていることを確認する。またstressコマンド停止後、再度通知(Resolved)が来ていることを確認する。

pro02.png

5. 参考サイト

6. 所感

  • やっと監視っぽいことを行うことができてきた。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1