Grafana中Prometheus查询报错:如何筛选9-17点的probe_success指标数据?
Prometheus查询报错原因及解决方法
报错原因
你写的查询里,错误地将范围向量后缀[30d:1m]加在了(hour() >=9 and hour() <=17)这个表达式后面。hour()返回的是瞬时向量,加上范围后缀后会变成范围向量;而左边的(probe_success{instance="$target"} ==0)是瞬时向量。Prometheus的二元运算(and)要求操作数只能是「标量+瞬时向量」或「两个瞬时向量」,不允许瞬时向量和范围向量直接运算,因此触发了parse error: binary expression must contain only scalar and instant vector types错误。
正确查询写法
要筛选近30天内每分钟、且处于每日09:00-17:00时段的probe_success==0数据,需要将范围后缀加在整个过滤表达式的外侧,同时用time()函数获取每个样本的时间戳来计算小时(确保过滤的是样本自身的时间,而非查询时刻的时间):
(probe_success{instance="$target"} == 0 and hour(time()) >= 9 and hour(time()) <= 17)[30d:1m]
或者拆分逻辑,先获取范围向量再过滤:
probe_success{instance="$target"}[30d:1m] == 0 and hour(time()) >= 9 and hour(time()) <= 17
这两种写法都能正确返回你需要的时序数据:先匹配probe_success值为0的样本,再筛选这些样本的时间处于每日9-17点之间,最后返回近30天内每分钟的结果。
内容的提问来源于stack exchange,提问作者C-nan
相关产品推荐
相关产品推荐

