topk展示的时候,如何实现定义时间范围

Viewed 43

目标: 想要通过topk 展示cpu使用率最高的5台机器
使用排行榜这个图表格式, 设置查询语句为 topk(5,system_cpu_usage)
发现会展示出所有机器的排序数据,而不是期望的5台机器
换一个写法 topk(5,last_over_time(system_cpu_usage[5m]))倒是可以正常展示最近5分钟内的top5的机器了,但这样就写死了只查询最近5分钟的数据,无法根据右上角的时间范围联动查询

想问一下,有联动查询方式么,或者有没有内置的变量表示查询时间范围的

P.S
通过排查按钮, 可以看到__range确实是生效了, 但是返回的数据却还是有多条, 应该是服务端的问题
image.png

P.P.S
查看了一下这个地方走的是 /api/n9e/query-range-batch 接口, 即prometheus的query_range接口, 以vm cluster版本为例子,最终效果类似于
curl -G 'http://xxx:xxx/select/0/prometheus/api/v1/query_range?' --data-urlencode "query=topk(5,last_over_time(system_load1[1800s]))"
会返回多条数据(即有可能返回超过5条数据)

如果修改为使用query接口, 而不是query_range, 则可以正确的返回5条数据, 比如
curl -G 'http://xxx:xxx/select/0/prometheus/api/v1/query?' --data-urlencode "query=topk(5,last_over_time(system_load1[1800s]))"

3 Answers

vm话试试 MetricsQL topk_avg(5, sum(system_cpu_usage[$__range])) by (ident))

是大盘内置变量,即时查询里没有这个

${__range} $__range
尝试使用文本卡片展示这个变量无效 ![image.png](https://answer.flashcat.cloud/uploads/post/54Y8mgRPrGC.png)

尝试使用topk也有一个警告提示
image.png

告警提示是一个 bug 可以先忽略不影响功能。文本卡片暂不支持内置变量,只能用用户自己定义的变量