如何在PromQL即时查询中优先展示指定指标并排序结果
PromQL实现指定标签指标优先排序的方法
PromQL原生的sort、sort_desc函数默认按指标样本值排序,没有直接按标签优先级排序的内置能力,要实现指定标签的结果优先展示,可以通过附加排序权重的方式实现,适配你的查询需求的写法如下:
具体实现语句
sort_desc( # 给cpu_usage_value类指标叠加足够大的权重值,保证排序优先级最高 ( {__name__=~"cpu_usage_value|memory_usage_value|request_rate", __name__="cpu_usage_value"} * 0 + 1e12 ) or # 保留其余两类指标的原始值 {__name__=~"cpu_usage_value|memory_usage_value|request_rate", __name__!="cpu_usage_value"} )
逻辑说明
- 第一部分查询先匹配所有
cpu_usage_value指标,乘以0消除原始值影响后,加一个远大于其余两类指标所有可能取值的常数(示例用1e12,可根据你实际业务的指标取值范围调整),相当于给这类指标标记最高排序权重 - 用
or操作符拼接剩余两类目标指标,保留其原始样本值 - 最外层用
sort_desc()做降序排列:因为cpu类指标叠加权重后数值远大于其余两类,会全部排在结果最前端;cpu类内部、其余两类指标内部的数值相对大小没有被改变,会保持正常的有序排列
扩展:多优先级排序
如果后续需要给三类指标设置明确的展示优先级(比如cpu第一、内存第二、请求率第三),可以给每类指标叠加梯度权重即可,示例写法:
sort_desc( ({__name__="cpu_usage_value"} * 0 + 3e12) or ({__name__="memory_usage_value"} * 0 + 2e12) or {__name__="request_rate"} )
如果需要整体升序排列,只需要把权重改成远小于所有指标实际值的负数,外层换用sort()函数即可。
内容的提问来源于stack exchange,提问作者Manish Purohit
相关产品推荐
相关产品推荐

