Prometheus:警告并发请求数量下降

Prometheus: alert on drop in number of concurrent requests

给定一个 Gauge 指标 number_of_concurrent_requests(示例),我需要在该值突然下降时发送警报。

我想到的一种方法是将当前值与30秒前的值进行比较,如果差异大于20%则发送警报(当然这里的30和20是任意的)

规则表达式类似于:

(number_of_concurrent_requests - (number_of_concurrent_requests offset 30s)) / (number_of_concurrent_requests offset 30s) < -0.20

这有效,但是:

  1. 这是最好的方法吗?
  2. 我想在警报中同时显示百分比和当前值,可以吗?在上面的表达式中,$value 包含比率(例如-0.34)。

您应该对较长时间段内的请求数进行平均。例如:

number_of_concurrent_requests / avg_over_time(number_of_concurrent_requests[5m]) < .8

如果您想与较早时期进行比较,您可以选择向分母添加一个偏移量。当然,请使用您认为最合适的范围,而不是 5m.

关于您的第二个问题,您可以在警报描述模板中使用 printf 函数生成 PromQL 查询;将其通过管道传输到 query function;并输出第一个结果。像这样:

{{ with printf `number_of_concurrent_requests{job="%s",env="%s"}` $labels.job $labels.env | query }}
  {{- . | first | value -}}
{{ end }}

有关详细信息,请参阅 this answer