通过Pushgateway进行Prometheus的测试警报

太长不看。

    • prometheusの通知テストしたい

 

    • pushgateway使ったらできた

 

    metricsごとテストをshell scriptにまとめとくと便利

首先

当我更改Prometheus的警告规则或Alertmanager的接收者定义时,我想要进行通知测试。
因为Promtool的check-config很差劲,所以在Slack等地方实际触发警报后,可能会导致显示错乱…

所以我尝试使用pushgateway来发送虚假的指标信息(虽然这不是它的正确使用方法)。

关于pushgateway

    • prometheus/pushgateway: push acceptor for ephemeral and batch jobs

 

    • exporterはpull型前提だけど、バッチとかpushでデータためたい時用のもの

 

    • prometheus同様goのバイナリ落としてきて起動するだけ release page

prometheusにはpushgatewayをみるようjob追加しておくこと

安装和启动的过程如下:

# 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 的配置也添加到 pushgateway 中。


$ 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

按照 pushgateway 的 README.md 文件中所述,hoge_metrics{job=”TEST_JOB”,host_name=”TEST_HOST”}

如果想要触发名为”gauge”的度量标准的警报,在curl中发送以下内容即可:
如果想要增加更多的标签,只需在URL后面不断添加/label_name/label_string/label_name/label_string/…即可。

# 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

响起考试警报

那么我们来实际试一下警报声。试验条件如下所示。

警報規則的定義例

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

Alertmanager的接收器定義示例。

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的方式可以通过编写一个Shell脚本(用于测试警报)来方便执行。
在这里,只有NG警报可能一直持续响起,所以还需要制作OK警报(只需设置为正常值)。
然后,只需触发警报即可。

$ 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上書きはいかがなものか

以上。

广告
将在 10 秒后关闭
bannerAds