我为Prometheus定义了一些警报规则,并且我希望获得有关Prometheus触发的警报数量的统计信息。
我试图计算使用grafana触发警报的次数,但它不起作用:
SUM(ALERTS{alertname="XXX", alertstate="firing"})
有一种方法可以计算触发警报的次数?
答案 0 :(得分:0)
您的PromQL是正确的。请记住,标签(包括警报名称)是区分大小写的:也许是问题所在?
答案 1 :(得分:0)
您的查询返回现在触发了多少警报,而不是每个警报被触发了多少次。
我发现此查询(主要用于Prometheus 2.4.0及更高版本):
changes(ALERTS_FOR_STATE[24h])
它将返回每个警报在过去24小时内从“待处理”到“触发”的次数,这意味着它仅适用于首先处于待处理状态的警报(例如,带有{{1的警报}})。
for: <some_duration>
是新添加的Prometheus内部指标,用于在Prometheus重新启动后恢复警报。并不是所有的文档都有据可查(实际上根本没有),但是似乎可以正常工作。
哦,如果您希望将结果按警报(或环境,工作或其他内容)分组,则可以按该标签或一组标签对结果进行求和:
ALERTS_FOR_STATE
将为您提供跨作业,环境等触发每个警报的次数。
答案 2 :(得分:0)
受“ AlinSînpălean”的启发,我计算了firing
状态的警报,而忽略了pending
状态。
计算当前警报:
count(ALERTS{alertstate="firing"}) by(alertname)
计算每个警报已触发多少次:
# Add a rule
groups:
- name: recording_rules
rules:
- record: ALERTS_FOR_STATE:firing
expr: ALERTS_FOR_STATE and ignoring(alertstate) ALERTS{alertstate="firing"}
sum(changes(ALERTS_FOR_STATE:firing[1w]) + 1) by(alertname)