新手求助:如何在Grafana中绘制SNMP_Exporter标签内的浮点值?
解决SNMP Exporter浮点值存标签的Grafana绘图问题
嘿,我完全懂你的烦恼——把本该是数值的浮点值存在标签里,确实有点别扭,毕竟标签本来是用来做维度区分的,不是存数据的。不过别慌,咱们不用搞复杂的配置,在Grafana里用PromQL就能搞定,一步步来:
第一步:用PromQL把标签里的字符串转成数值
Prometheus里的标签值都是字符串类型,所以首先得把标签里的浮点字符串转成可用于绘图的数值。假设你的SNMP指标叫snmp_device_metric(替换成你实际的指标名),存储浮点值的标签叫float_value(同样替换成你实际的标签名),你可以用这个查询语句:
snmp_device_metric{job="你的SNMP采集任务名"} * 0 + strtofloat(snmp_device_metric{job="你的SNMP采集任务名"}.labels.float_value)
解释一下这个语句:
snmp_device_metric * 0:把原指标的数值清零(因为原指标的数值可能没意义,真正的数据在标签里)strtofloat(...):把标签float_value的字符串值转换成浮点数- 两者相加后,就得到了以标签里的浮点值为数值的时间序列,这样Grafana就能识别成可绘图的数值了
如果担心标签里有非法的非数字内容,可以先过滤掉这些序列:
(snmp_device_metric{job="你的SNMP采集任务名", float_value=~"^[0-9.]+$"} * 0) + strtofloat(snmp_device_metric{job="你的SNMP采集任务名", float_value=~"^[0-9.]+$"}.labels.float_value)
这里的float_value=~"^[0-9.]+$"会只保留标签值是合法浮点数的序列。
第二步:在Grafana里配置可视化
- 打开Grafana,新建一个面板(比如折线图、仪表盘都可以)
- 选择你的Prometheus数据源
- 在查询框里输入上面写好的PromQL语句
- 调整时间范围、可视化样式(比如折线图的颜色、仪表盘的阈值),就能正常看到浮点值的变化趋势或当前值了
可选:从根源解决(调整SNMP Exporter配置)
如果以后不想每次都转数值,可以看看自动生成的snmp.yml配置:
- 找到对应OID的配置段,检查是不是把数值映射成了
labels而不是value - 如果是,把配置里的
labels字段改成value,重启SNMP Exporter后,采集到的指标就会直接把浮点值作为指标数值存储,不用再在Grafana里转换了
不过这一步需要稍微懂点SNMP Exporter的配置逻辑,如果你觉得麻烦,用前面的PromQL转换方法就足够啦。
内容的提问来源于stack exchange,提问作者HyperDevil
相关产品推荐
相关产品推荐

