如何配置 Grafana 以捕捉 Prometheus 指标的急剧下降?

edh*_*ose 5 grafana prometheus

我们正在使用 Grafana 来监控某些事件和火灾警报。数据存储在 Prometheus 中(但我们没有使用 Prometheus Alert Manager)。

昨晚,我们的一项指标出现问题,目前我们没有警报。我想添加一个,但我正在努力确定这样做的最佳方法。

Grafana 仪表板图像正弦波模式 - 除了急剧下降

在这种情况下,该指标的 Y 轴非常低,一夜之间(图表左侧的 02:00-07:00),您可以看到该指标下降到接近零。

我们想检测到晚上 8 点右侧的急剧下降。我们在晚上 9 点(平线)检测到下降完全为零,但我想确定突然下降。

我们的普罗米修斯查询是:

sum(rate({__name__=~"metric_name_.+"}[1m])) by (grouping)
Run Code Online (Sandbox Code Playgroud)

我试过看一些东西,比如:

sum(increase({__name__=~"metric_name_.+"}[1m])) by (grouping)
Run Code Online (Sandbox Code Playgroud)

但它们大体上最终都得到了与下图相似的图形,但在 Y 轴刻度上存在差异,并且很难区分“接近零和安静”和“接近零”,因为指标已经下降了悬崖”。

我们可以使用 Grafana 和 Prometheus 设置的哪些组合来有效识别此更改?

Mic*_*bez 4

您使用了错误的函数:对于仪表,您应该使用delta() 函数。它将在一分钟内暴露水滴:

sum(delta(rate({__name__=~"metric_name_.+"}[1m])[1m:])) by (grouping)
Run Code Online (Sandbox Code Playgroud)

下一步是定义将触发错误的下降百分比 - 下降 80%(注意:sum by(grouping)为了清楚起见,省略 ):

(-100 * delta(rate({__name__=~"metric_name_.+"}[1m])[1m:]) / rate({__name__=~"metric_name_.+"}[1m] offset 1m)) > 80
Run Code Online (Sandbox Code Playgroud)

然后,您可能希望在检测到跌落后保持一段时间的警报。在这种情况下,您必须使用子查询或记录规则(此处命名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
Run Code Online (Sandbox Code Playgroud)