如何配置 Grafana 以捕捉 Prometheus 指标的急剧下降?
Posted
技术标签:
【中文标题】如何配置 Grafana 以捕捉 Prometheus 指标的急剧下降?【英文标题】:How can Grafana be configured to catch a steep drop in a metric from Prometheus? 【发布时间】:2020-07-14 16:32:04 【问题描述】:我们正在使用 Grafana 来监控某些事件和火灾警报。数据存储在 Prometheus 中(但我们没有使用 Prometheus 警报管理器)。
昨晚,我们的一个指标出现问题,我们目前没有警报。我想添加一个,但我正在努力确定添加的最佳方法。
在这种情况下,该指标的 Y 轴非常低,并且一夜之间(图表左侧的 02:00-07:00)您可以看到该指标下降到接近于零。
我们想在晚上 8 点检测右侧的急剧下降。我们在晚上 9 点左右检测到下降到完全为零(平线),但我想确定突然下降。
我们的普罗米修斯查询是:
sum(rate(__name__=~"metric_name_.+"[1m])) by (grouping)
我尝试过查看以下内容:
sum(increase(__name__=~"metric_name_.+"[1m])) by (grouping)
但总的来说,它们最终都会得到与下图相似的图表,但在 Y 轴尺度上存在差异,因此很难区分“接近零和安静”和“接近零”,因为指标有掉下悬崖”。
我们可以使用 Grafana 和 Prometheus 设置的哪种组合来有效地识别这种变化?
【问题讨论】:
【参考方案1】:你用错了函数:对于仪表,你应该使用delta() function。它将在一分钟内暴露下降:
sum(delta(rate(__name__=~"metric_name_.+"[1m])[1m:])) by (grouping)
下一步是定义将触发错误的下降百分比 - 下降 80%(注意:为清楚起见,省略 sum by(grouping)
):
(-100 * delta(rate(__name__=~"metric_name_.+"[1m])[1m:]) / rate(__name__=~"metric_name_.+"[1m] offset 1m)) > 80
然后,您可能希望在检测到跌落后有一段时间的警报。在这种情况下,您必须使用子查询或记录规则(此处命名为 drop_rate_percent
):
rules:
- record: metric_name_rate
expr: sum(rate(__name__=~"metric_name_.+"[1m])) by(grouping)
- record: drop_rate_percent
expr: -100 * delta(metric_name_rate[1m]) / (metric_name_rate offset 1m)
- alert: SteepDrop
expr: max_over_time(drop_rate_percent[15m]) > 80
【讨论】:
感谢@michael-doubez。我不确定我是否做对了,我很抱歉。如果我过滤到单个主机以避免总和问题,我最终会得到这样的图表:i.stack.imgur.com/CYhqV.png。它与rate
函数的形状相同,但轴要小得多。切换到仪表仅显示带有0.00031
的值。您能否详细说明您的查询 - 例如为什么是100?为什么要将增量除以总数?此外,> 80%
也会导致错误(“在 char 189 处解析错误:找不到有效表达式”,如果相关的话,我正在使用 prometheus 1.6.3)。感谢您的帮助!
这是我的完整查询,以提供图像中的一些额外上下文:100 * (delta(__name__=~"[[env]]_pubsub_mm_events_live_ref.+",host="ip-172-20-4-73"[1m]) / __name__=~"[[env]]_pubsub_mm_events_live_ref.+",host="ip-172-20-4-73" offset 1m)
是的,对不起。应该是 80% 而不是 80% - 我被逻辑冲昏了头脑。
逻辑是计算一分钟(或更长时间)的下降百分比。 delta(foo[1m])
为您提供范围内的值差异,foo offset 1m
为您提供增量开头的值。这些值乘以 -100 的比率为您提供了下降比例的信息。
是的。如果我认为作为实际指标的“急剧下降”是另一个表达式(如比率),那么您应该将我的答案元素应用于您的表达式。请注意,它随后需要可能很昂贵的子查询。记录规则可以节省您的周期和打字。以上是关于如何配置 Grafana 以捕捉 Prometheus 指标的急剧下降?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SpringBoot 2、InfluxDB 和 Grafana 理解微米指标?