You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VOLTTRON总线发布数据后Grafana查询方法求助

问题排查与解决步骤

1. 修正VOLTTRON代理的数据发布代码

你当前的发布方式存在两个核心问题:

  • 消息格式错误:将浮点数据拼接成字符串传递,SQL Agent无法正确解析为metric和value字段
  • 数据类型丢失:浮点型数值被转为字符串存储,导致Grafana无法识别为数值类型

修改后的发布代码:

# publish to message bus
self.vip.pubsub.publish(
    peer="pubsub",
    topic=f"LBS_AGENT",  # 若需要更清晰的metric层级,可改为"LBS_AGENT/TOTAL_AIR_FLOW"
    headers={headers.TIMESTAMP: format_timestamp(get_aware_utc_now())},
    message={"TOTAL_AIR_FLOW": total_flow_temp},  # 用键值对字典传递,而非字符串拼接
)

如果选择层级化topic(比如"LBS_AGENT/TOTAL_AIR_FLOW"),可以进一步简化后续查询,此时message直接传浮点数值即可:

self.vip.pubsub.publish(
    peer="pubsub",
    topic=f"LBS_AGENT/TOTAL_AIR_FLOW",
    headers={headers.TIMESTAMP: format_timestamp(get_aware_utc_now())},
    message=total_flow_temp,
)

2. 调整Grafana查询语句

根据修改后的发布方式,对应两种查询场景:

场景1:使用字典格式的message(topic为LBS_AGENT)

此时SQL Agent会将TOTAL_AIR_FLOW作为metric字段存储,直接调整查询的匹配规则:

SELECT
  "time" AS "time",
  metric AS metric,
  value::float AS value  -- 强制转换为浮点型,确保Grafana能识别为数值
FROM slipstream_volttron
WHERE
  $__timeFilter("time") AND
  metric = 'TOTAL_AIR_FLOW'  -- 用精确匹配替代LIKE,效率更高
ORDER BY 1,2

场景2:使用层级化topic(topic为LBS_AGENT/TOTAL_AIR_FLOW)

此时SQL Agent会将整个topic作为metric字段,查询语句需调整为:

SELECT
  "time" AS "time",
  metric AS metric,
  value::float AS value
FROM slipstream_volttron
WHERE
  $__timeFilter("time") AND
  metric = 'LBS_AGENT/TOTAL_AIR_FLOW'
ORDER BY 1,2

3. 验证数据存储

可以先直接查询TimescaleDB确认数据是否正确写入:

SELECT time, metric, value FROM slipstream_volttron ORDER BY time DESC LIMIT 10;

检查metric字段的实际值和value的类型是否符合预期。

内容的提问来源于stack exchange,提问作者bbartling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:42:17