You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Prometheus API请求以按kpi_metrics<1条件获取结果

解决Prometheus按条件计数自定义指标的问题

嘿,这个问题我之前也碰到过——你踩了PromQL语法的小坑啦!直接在count()里写kpi_metrics<1是不符合Prometheus查询规则的,所以才返回空结果。

为什么原查询失效?

PromQL的聚合函数(比如count())需要接收一个向量类型的参数,但count(kpi_metrics<1)的写法相当于把比较运算嵌套在了聚合函数内部,Prometheus无法正确解析这种逻辑。你得先筛选出符合条件的样本,再对这些样本做聚合操作。

正确的查询写法(适配query_range接口)

因为你用的是范围查询接口,推荐使用count_over_time()函数来统计每个时间步长内符合条件的样本数量,具体写法如下:

1. 核心查询语句

count_over_time((kpi_metrics < 1)[1m:])
  • kpi_metrics < 1:先筛选出所有值小于1的样本;
  • [1m:]:定义一个1分钟的时间窗口(和你的step=60参数对应);
  • count_over_time():统计每个时间窗口内符合条件的样本总数。

2. 完整的API请求URL

注意URL里的<需要编码成%3C(否则会被当作URL特殊字符解析出错),最终请求如下:

http://prometheus01/api/v1/query_range?query=count_over_time((kpi_metrics%3C1)[1m:])&start=1515747230&end=1515750830&step=60

其他可选写法

如果你的需求是统计整个时间范围内,存在至少一个值小于1的时间序列的数量(而非每个步长的样本数),可以用下面的查询:

count(kpi_metrics < 1)

对应的URL是:

http://prometheus01/api/v1/query_range?query=count(kpi_metrics%3C1)&start=1515747230&end=1515750830&step=60

这种写法会在每个步长返回当前时刻符合条件的时间序列总数。

内容的提问来源于stack exchange,提问作者Nikolay Baranenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:55:49