2021年10月11日月曜日

Prometheus で CPU 使用率が高くなったら Slack に通知するサンプル

Prometheus で CPU 使用率が高くなったら Slack に通知するサンプル

概要

Prometheus + Alertmanager + Node Export でノードの CPU 使用率を見て一定以上になったら Slack に通知するサンプルです

よく使う形式なので雛形として残しておきます

環境

  • Ubuntu 18.04
  • docker 20.10.7
  • Prometheus 2.30.3
  • Alertmanager 0.23.0
  • Node export 1.2.2

Node export 起動

  • docker run -d --net="host" --pid="host" -v "/:/host:ro,rslave" quay.io/prometheus/node-exporter:latest --path.rootfs=/host

:9100 ポートで起動します

Alertmanager 起動

  • mkdir data
  • vim alertmanager.yml
route:
  receiver: 'slack'
receivers:
- name: 'slack'
  slack_configs:
    - api_url: 'https://hooks.slack.com/services/xxx/xxx/xxx'
      channel: '#private'
      text: "{{ .CommonAnnotations.summary }}"
      send_resolved: true
  • docker run -d -p 9093:9093 --name alertmanager -v $(pwd):/alertmanager prom/alertmanager --config.file=/alertmanager/alertmanager.yml

:9093 ポートで起動します

Prometheus 起動

  • vim prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 192.168.100.10:9093

rule_files:
  - 'alerts.rule'

scrape_configs:
  - job_name: 'node1'
    static_configs:
    - targets: ['192.168.100.10:9100']
  • vim alerts.rule
groups:
  - name: 'Node1 cpu monitoring'
    rules:
    - alert: 'Node1 cpu usage alert'
      expr: avg without(cpu) (rate(node_cpu_seconds_total{ job="node1",mode!="idle"}[1m])) >= 0.4
      for: 5s
      annotations:
        summary: 'Node1 cpu usage over 40%'
  • docker run -d -p 9090:9090 --name prometheus -v $(pwd):/prometheus-data prom/prometheus --config.file=/prometheus-data/prometheus.yml

:9090 ポートで起動します

動作確認

CPU に負荷テストします

  • stress-ng -c 2 -l 100

-c オプションは CPU のコア数です
各自の環境に合わせて変更してください

これで Slack に通知が来れば OK です

最後に

必要最低限な設定としてセットで覚えちゃってもいいかもしれません

stress-ng で 100% 負荷なのに Prometheus 的には 40% ほぼの負荷にしかなっていなかったのは CPU のモードごとに Prometheus が管理しているだと思います

stress-ng 実行後に top コマンドでコアごとの使用率を見ると 100% だったので top と同じ値を監視したい場合は監視ルールを少し変更する必要がありそうです

0 件のコメント:

コメントを投稿