我目前有一个Prometheus警报,当我的成功率下降到85%以下时会触发。
我想将比率的绝对数字添加到警报描述中。我该怎么办?
我的YAML当前看起来像这样(我清理了一些无关的细节):
groups:
- name: recording_rules
rules:
- record: number_of_successes_24h
expr: avg(sum by(instance)(my_status{kubernetes_name="my-prom",timeRange="1d",status=~"success"}))
- record: number_of_total_24h
expr: avg(sum by(instance)(my_status{kubernetes_name="my-prom",timeRange="1d"}))
- record: success_rate_24h
expr: clamp_max(number_of_successes_24h / number_of_total_24h * 100, 100)
- name: alerting_rules
rules:
- alert: LowSuccessRate24H
expr: success_rate_24h < 85
labels:
severity: critical
annotations:
summary: "CRITICAL: Low success rate 24h"
description: "Success rate in the last 24 hours went below 85% (value: {{ $value }}%)"
我的问题是,如何在说明中添加number_of_successes_24h
和number_of_total_24h
?
我在https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/阅读了官方文档,但迷路了;我搜索了SO,但没有找到任何相关内容。
我读到$labels
中还有其他详细信息,因此我尝试打印该示例以查看其中的内容,但是我得到了map[__name__:success_rate_24h]
,但我不知道该怎么做。看看里面的东西。
欢迎部分答案和指南。谢谢。
答案 0 :(得分:3)
这是我的TasksMissing
警报的简化版本,它在摘要中输出缺少的任务数,任务总数和受影响的实例:
- alert: TasksMissing
expr: |
job_env:up:ratio < .7
for: 2m
labels:
severity: warning
annotations:
summary: Tasks missing for {{ $labels.job }} in {{ $labels.env }}
description:
'{{ with printf `job_env:up:count{job="%s",env="%s"} - job_env:up:sum{job="%s",env="%s"}` $labels.job $labels.env $labels.job $labels.env | query }}
{{- . | first | value -}}
{{ end }}
of
{{ with printf `job_env:up:count{job="%s",env="%s"}` $labels.job $labels.env | query }}
{{- . | first | value -}}
{{ end }}
{{ $labels.job }} instances are missing in {{ $labels.env }}:
{{ range printf `up{job="%s",env="%s"}==0` $labels.job $labels.env | query }}
{{- .Labels.instance }}
{{ end }}'
预期结果描述类似于“ prod中缺少3个foo服务实例中的2个:foo01.prod.foo.org:8080 foo02.prod.foo.org:8080”。
这个想法是,您可以使用Go模板来生成查询(通过使用$labels
用来自printf
的值填充模板),然后将其通过管道传送到Prometheus-defined query
function中,并返回一个结果(您可以使用with
处理)或多个值(您可以使用range
进行迭代)。然后,您可以直接打印时间序列值或某些标签(例如实例名称)。