Prometheus查询使用>=运算符报错,求条件校验方法
Prometheus查询
asm_disk{percent_utilized >= 30}报错的解决办法 问题根源
percent_utilized是字符串类型的标签,不是指标的样本数值,Prometheus不支持直接对字符串标签做数值比较,这就是报错的原因。从你给出的指标样本能看到,asm_disk的样本值都是1,使用率数据存在标签里:
asm_disk{exported_job="asm_disk_status", free_mb="2431500", group_number="3", instance="pr14xg-as-4p.cable.comcast.com:9091", itrc_env="production", job="pushgateway", percent_utilized="53.44094669117647", total_mb="5222400"} 1 asm_disk{exported_job="asm_disk_status", free_mb="30500", group_number="4", instance="pr14xg-as-4p.cable.comcast.com:9091", itrc_env="production", job="pushgateway", percent_utilized="40.4296875", total_mb="51200"} 1
正确查询方式
方式1:临时转换标签为数值过滤
用to_number函数把字符串标签转成数值后再做比较,查询语句如下:
asm_disk where to_number(percent_utilized) >= 30
方式2:优化指标采集(推荐)
从根源解决的话,修改指标采集配置,把使用率数值作为指标的样本值,而不是标签。调整后的指标格式类似:
asm_disk_percent_utilized{exported_job="asm_disk_status", free_mb="2431500", group_number="3", instance="pr14xg-as-4p.cable.comcast.com:9091", itrc_env="production", job="pushgateway", total_mb="5222400"} 53.44094669117647 asm_disk_percent_utilized{exported_job="asm_disk_status", free_mb="30500", group_number="4", instance="pr14xg-as-4p.cable.comcast.com:9091", itrc_env="production", job="pushgateway", total_mb="51200"} 40.4296875
之后直接用asm_disk_percent_utilized >= 30就能完成查询,这种方式更符合Prometheus的指标设计规范,查询效率也更高。
内容的提问来源于stack exchange,提问作者Swathika
相关产品推荐
相关产品推荐

