我有一个类型为计数器的指标 varnish_main_client_req ,我想设置一个警报,如果请求率在给定时间内下降/上升一定量(例如“请求数量”)在最后2分钟偏离了!“)。
使用deriv()函数应该比比较相对值好得多,但它只能用于仪表。是否有可能转换一个不断增加的指标又名。与额定指标相反。评估
查询:deriv(rate(varnish_main_client_req[2m])[5m])
期望: 普罗米修斯计算过去2分钟内客户请求的比率,并在过去5分钟内返回结果值的导数。
实际结果:
“error”:“char 48处的解析错误:必须在范围规范之前 通过一个度量选择器,但在* promql.Call后面改为“
Recording rules可能是一个选项,但对于适用于查询的内容来说,感觉就像是一种廉价的解决方法:
my_gauge_metric = rate(some_counter_metric[2m])
答案 0 :(得分:5)
可以使用subquery-syntax(introduced in Prometheus version 2.7):
deriv(rate(varnish_main_client_req[2m])[5m:10s])
警告:这些子查询非常昂贵,即在Prometheus上产生很高的负载。 当您定期(在警报等情况下)使用这些查询时,请使用recording-rules。
<instant_query>[<range>:<resolution>]
instant_query
:一个PromQL-function,它返回一个instant-vector)range
:开始第一个子查询的偏移量(时间上)resolution
:每个子查询的大小。它返回一个range-vector
。
在上面的示例中,Prometheus运行rate()
(= instant_query
)30次(从5分钟前的第一次到-4:50,...,最后一个-0:10到现在) )。
生成的范围矢量输入到deriv()
函数。
deriv(rate(prometheus_http_request_duration_seconds_sum{job="prometheus"}[1m])[5m:10s])
没有子查询范围([5m:10s]
),您将收到以下错误消息:
char 80处的解析错误:函数“ deriv”的调用中预期的类型范围向量,得到了即时向量
答案 1 :(得分:3)
是的,您需要使用录制规则。
Prometheus计算过去2分钟内客户请求的比率,并在过去5分钟内返回结果值的导数。
这就是问题 - 普罗米修斯在什么时间间隔合成这些数据?