LoginSignup
19
16

More than 5 years have passed since last update.

prometheusでテストアラート by pushgateway

Posted at

TL;DR

  • prometheusの通知テストしたい
  • pushgateway使ったらできた
  • metricsごとテストをshell scriptにまとめとくと便利

はじめに

prometheusのalert ruleやalertmanagerのreviecer定義を変えた際、その通知テストがしたい。
てかpromtoolのcheck-configがとてもざるなので、slack上とかで実際にアラート鳴らしてみたら表示崩れたり...

そこでpushgatewayを使って偽metrics情報を送り込めるので(本来の使い方とは違うが)やってみた。

pushgatewayについて

インストール+起動はこんな感じ

installation_of_pushgateway
# install
$ cd your_pushgateway_dir
$ wget https://github.com/prometheus/pushgateway/releases/download/v0.3.1/pushgateway-0.3.1.linux-amd64.tar.gz
$ tar xvf pushgateway-0.3.1.linux-amd64.tar.gz

# run
$ cd pushgateway-0.3.1.linux-amd64
$ ./pushgateway > pushgateway.log 2>&1 &

# confirm behavior
$ curl localhost:9091/metrics
---
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 6.0085000000000005e-05
go_gc_duration_seconds{quantile="0.25"} 6.0085000000000005e-05
...
---

prometheus側の設定もpushagateway足しとく

adding_pushgateway_to_prometheus

$ cd your_prometheus_dir
$ vim prometheus.yml
# add following
---
scrape_configs:
...
# add following
  - job_name:       'pushgateway'
    static_configs:
      - targets: ['localhost:9091']
        labels:
          environment: "hoge"
          category: "pushgateway"
...
# maybe following job has already existed.
  - job_name:       'hoge'
    static_configs:
      - targets: ['localhost:XXXX']
        labels:
          environment: "hoge"
          category: "anything"

...
---
# reload prometheus setting
$ curl -X POST http://localhost:9090/prometheus/-/reload

pushgatewayへmetricsをpush

pushgatewayのREADME.mdにあるように
hoge_metrics{job="TEST_JOB",host_name="TEST_HOST"}

というgaugeのmetricsのアラートを鳴らしたいなら以下のようにcurlで送ればよい。
labelをもっと足したければURLの後ろにどんどん/label_name/label_string/label_name/label_string/...と増やせば良い

push_sample_metrics
# push metrics
$ cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/TEST_JOB/host_name/TEST_HOST/ENVIRONMENT/TEST_LOCATION
# TYPE hoge_metrics gauge
# HELP hoge_metrics
hoge_metrics 0.0
EOF

# confirm pushgaway metrics
$ curl localhost:9091/metrics
---
...
# TYPE hoge_metrics gauge
hoge_metrics{host_name="TEST_HOST",instance="",job="TEST_JOB"} 0
...
---

prometheus.png
prometheus上からも確認できる。

テストアラートを鳴らす

では実際にアラート鳴らしてみる。お試し条件としては、以下とする。

alert rule定義例

alert.rule
ALERT hoge_alert
  IF hoge_metrics == 0
  FOR 1s
  LABELS {
    severity="critical",
  }
  ANNOTATIONS {
    summary = "hoge of {{ $labels.host_name }} is NG.",
  }

alertmanagerのreciever定義例

alertmanager.yml
global:

route:
  receiver: 'slack'
  group_by: [alertname, host_name]
  group_interval: 5s
  group_wait: 5s

receivers:
- name: 'slack'
  slack_configs:
    - api_url: 'https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXX'
      channel: '#alerting-test'
      text: "{{ .CommonAnnotations.summary }}"
      send_resolved: true

...

また、pushgatewayへのmetrics送付はshell script化(テストアラートスクリプト)しておくと便利。
ここで、NG用だけだとずっとアラート鳴りっぱなしなのでOK用も作っておく(正常値のvalueにするだけ)。
で、あとは鳴らすだけ。

alert_scripts
$ cd your_pushgateway_dir
$ mkdir alert_tests
$ cd alert_tests

# create ng script
$ vim hoge_metrics_ng
---
cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/TEST_JOB/host_name/TEST_HOST/ENVIRONMENT/TEST_LOCATION
# TYPE hoge_metrics gauge
# HELP hoge_metrics
hoge_metrics 0.0
EOF
---

# create ok script
$ vim hoge_metrics_ok
---
cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/TEST_JOB/host_name/TEST_HOST/ENVIRONMENT/TEST_LOCATION
# TYPE hoge_metrics gauge
# HELP hoge_metrics
hoge_metrics 1.0
EOF
---

$ chmod +x hoge_metrics_*

# fire ng script
$ ./hoge_metrics_ng

# fire ok script
$ ./hoge_metrics_ok

slack.png

できた。

まとめ

  • alertを実際にならしてみてどう通知されるか?がコマンド1つ2つでできるのは便利
    • 特にresolved時に文言打ち分けとかlabelとvalueの情報をバキバキ通知に使ってると...
  • 運用上気にすること
    • labelは好きに増やせるけどlabel名と中身のペアが崩れてるとエラーで拾ってくれない
    • metricsを増やしたらテストアラートスクリプトも一緒につくる
    • アラート種別分、テストアラートスクリプトにコマンドまとめるといっぺんに確認できて便利
    • NG用だけだとずっとアラート鳴りっぱなしなのでOK用も作っておく
    • metrics情報を汚す。なので検証環境のprometheusに向け。deleteもあるが...
    • pushgateway経由のmetricsはjobはるとexprted_jobとして突っ込まれる(↑のprometheusの図参照)
  • その他
    • pushgatewayをmetrics/label変更時の過去データ引っ越しに使えないか... なくはないが...
    • しかしpushgatewayの使い方として、既存のmetrics上書きはいかがなものか

以上。

19
16
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
19
16