如何在Grafana中将sensorReading标签值转为时序图可用数值?
问题描述
使用PromQL查询语句:
sensorReading{instance="192.168.xxx.xxx", officeSensorNumber="1"}
返回结果如下:
{__name__="sensorReading", instance="192.168.xxx.xxx", job="IPMI", officeSensorNumber="1", sensorReading="43.000"} {__name__="sensorReading", instance="192.168.xxx.xxx", job="IPMI", officeSensorNumber="1", sensorReading="44.000"} {__name__="sensorReading", instance="192.168.xxx.xxx", job="IPMI", officeSensorNumber="1", sensorReading="45.000"}
但所有返回结果的样本数值均为1,在Grafana时序图中仅显示一条带不同颜色点的线(每个颜色对应sensorReading标签的取值),需要提取sensorReading标签的值作为时序图的数值,生成正常的趋势图表。
解决方案
直接用PromQL的label_value()函数提取标签里的数值,替换掉原来的样本值就行,修改后的查询语句是:
label_value(sensorReading{instance="192.168.xxx.xxx", officeSensorNumber="1"}, "sensorReading")
这个函数能把指定标签的字符串值转成数值类型,作为样本的实际值返回,Grafana就能正常绘制趋势图了。
要是想保留原有的标签维度(方便在Grafana里区分不同序列),也可以结合label_replace()函数,同时把标签值转成数值:
label_replace(sensorReading{instance="192.168.xxx.xxx", officeSensorNumber="1"}, "$1", "sensorReading", "sensorReading", "(.*)") * 1
这里label_replace用来保留标签信息,乘以1是为了把字符串标签值隐式转成数值类型,确保Grafana能正确识别。
另外提一句:这种样本值是1、实际数值藏在标签里的情况,大多是指标采集配置出了问题(比如用textfile collector或者自定义exporter时,错误地把数值存在标签而非样本值里)。要是能调整采集配置,直接把传感器读数作为样本值推送,后续查询会更省心。
内容的提问来源于stack exchange,提问作者Philip Scot
相关产品推荐
相关产品推荐

