在Prometheus中切换警报和恢复通知的内容

总结:

    • 復旧時のslack通知textがアラート時と同じでつらい

 

    • slack通知にlabelsが全部入るのもつらい

 

    alert ruleのANNOTATIONに好きなプロパティ入るので、alertmanagerのtextにif書いてそのプロパティを呼び出した

首先

除了警报名称之外,有时我们也想添加一些详细信息或文字来进行警报通知。

通过alert rule的ANNOTATIONS中指定的summary,可以将文本流向slack,像text: ‘{{ .CommonAnnotations.summary }}’这样指定。

当在alertmanager的设置中指定send_resolved: true时,如果警报恢复,它会通过slack通知我们。

告警规则 | Prometheus
配置 | Prometheus
自定义 Alertmanager 模板 | Prometheus

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

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

slack.png

看起来很明显,通知底部的文字部分还是不合适,感觉很不舒服。

因此,我試著根據每個警報規則指定不同的警報語句和恢復語句來區別。

另外,Slack的标题相当的位置上堆积着一排乱七八糟的标签。老实说,我觉得不需要像”localhost:9091″之类的本地主机或工作监控目标。

在“警报规则”中定义恢复时的消息。

由于可以在注解中定义喜欢的属性,可以按照以下方式进行编写。

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

在Alertmanager中切换警报时和恢复时的内容。

标题:虽然警报名可通过{{ .GroupLabels.alertname }}获得,但我想要在开头加上[FIRING]或[RESOLVED],所以需要用条件分支进行判断。

将来自alert规则的ANNOTATIONS的调用,与{{ .CommonAnnotations.firing_text }}和{{ .CommonAnnotations.resolved_text }}同样。

...
receivers:
- name: 'slack'
  slack_configs:
    - api_url: 'https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXX'
      channel: '#alerting-test'
      title: '{{ if eq .Status "firing" }}[FIRING]{{else}}[RESOLVED]{{end}} {{ .GroupLabels.alertname }}'
      text: '{{ if eq .Status "firing" }}{{ .CommonAnnotations.firing_text }}{{else}}{{ .CommonAnnotations.resolved_text }}{{end}}'
      send_resolved: true
...

动作确认:尝试触发警报

就这样。
通过 pushgateway 在 Prometheus 上进行测试警报 – Qiita

slack2.png

完成了!标签消失了,而且文本也可以在警报时和恢复时进行更改。

概括

    • 通知内容をalert内容からあれこれカスタムできるようになったのはよかった

 

    • 本来はちゃんとtemplateごりごり書くというか、defaultのtemplateがでかいのであんまりいじりたくないな感

alertmanager/default.tmpl at master · prometheus/alertmanager

alertmanagerのgroup_byでgroupingした値(今回はhost_name)もtitle:にいれてもよかったかも

しかしつらいこと

prometheusのruleもalertmanagerのymlもつかえる変数がわからんのでなかなかつらい(どれかのgithub issuesにあったような)
alert ruleのANNOTATIONSにlabelだけじゃなくてその時のvalueもいれようとするじゃん。で、resolved時も回復した値を知りたいから入れるじゃん。でもなぜか回復前のvalueが出てきちゃって意味分からなかったりはした。アラート時のmetricsじゃなくてALERTっていうmetricsのvalueになっちゃうのかな?

以上。 (Chinese: .)

广告
将在 10 秒后关闭
bannerAds