排序函数做什么
sort 与 sort_desc 对瞬时向量按数值升序或降序排列,改变的是结果的行序而不是数值。在表格类面板里使用可以让结论更直观,例如把错误率最高的实例排在最前;对图形面板没有实际意义,因为曲线是按时间绘制的,行序不影响绘制结果。
基本信息
| 作用对象 | 瞬时向量,区间向量与标量不可用 |
|---|---|
| 排序方向 | sort 升序,sort_desc 降序 |
| 返回内容 | 样本集合不变,仅调整返回顺序 |
| 常见搭配 | 与 topk、bottomk 组合先筛选再排序 |
用法示例
用法示例
# 表格里从高到低展示前 5 名
sort_desc(topk(5, sum by (instance) (rate(http_requests_total{code=~"5.."}[5m]))))
# topk 已带筛选,排序可省略
topk(5, sum by (instance) (rate(http_requests_total{code=~"5.."}[5m])))
# 升序:找出请求量最低的实例,排查采集缺失
sort(sum by (instance) (rate(http_requests_total[5m])))与 topk 的分工
| 函数 | 作用 | 是否改变结果集 |
|---|---|---|
| sort | 全部结果排序 | 不改变,只调整顺序 |
| sort_desc | 全部结果降序 | 不改变,只调整顺序 |
| topk | 取数值最大的前 K 条 | 改变,其余被丢弃 |
| bottomk | 取数值最小的前 K 条 | 改变,其余被丢弃 |
典型使用场景
- 表格面板中把错误率最高或延迟最大的实例排在前面
- 巡检时按请求量升序查看,快速发现采集缺失的实例
- 告警排查时先排序再逐个下钻,避免在大列表里人工寻找
- 配合 topk 限定展示数量,控制面板可读性
排序函数只在实际返回的瞬时向量上生效;查询被聚合或聚簇展开时,最终顺序仍以返回结果为准,面板设置里的排序也可能覆盖查询中的顺序。
使用注意
- 排序结果受区间参数影响,跨时间点的图表面板本身没有行序概念
- 想固定展示前若干名,用 topk 控制数量比单纯排序更可靠
- 排序与分页展示无关,超长的表格仍需要靠筛选来控制信息量
- 排序对性能有轻微影响,超大规模结果集上优先在查询层收敛范围
- 需要固定的前 N 名列表时用 topk 控制数量,排序只负责展示顺序