You need to enable JavaScript to run this app. Telegraf MQTT Consumer传JSON至InfluxDB时64位整数精度丢失问题
优惠活动
大模型
产品
解决方案
定价
更多

Telegraf MQTT Consumer传JSON至InfluxDB时64位整数精度丢失问题

Telegraf MQTT JSON解析大整数精度丢失解决方案

你遇到的精度丢失问题确实是JSON默认解析规则导致的:标准JSON没有细分整数、浮点数类型,Telegraf默认的JSON解析器会将所有数值统一转换为float64类型,而float64仅能精确表示不超过2^53(约9007199254740992)的整数,你用到的bsEui数值已经远大于这个阈值,因此出现末尾精度丢失的情况。

可行解决方案

  • 方案1:修改MQTT数据源的输出格式,将大整数字段转为字符串类型传输。仅需要在数据上报时将bsEui的数值用引号包裹即可,Telegraf会将其识别为字符串类型写入InfluxDB,完全不会出现精度损失,后续需要数值运算时可在查询阶段做类型转换。
  • 方案2:开启Telegraf JSON解析器的int64解析配置。Telegraf 1.16及以上版本的JSON parser支持json_int64参数,开启后会将所有JSON数值优先解析为int64类型,你的bsEui数值在int64的取值范围内(int64最大值为9223372036854775807),完全可以被准确解析。对应配置参考如下:
[[inputs.mqtt_consumer]]
  # 其余原有MQTT连接、主题等配置保持不变
  data_format = "json"
  json_int64 = true
  • 方案3:使用Starlark处理器自定义字段类型。如果后续存在超出int64范围的数值,或者需要针对不同字段指定不同类型,可以添加Telegraf的Starlark处理器,手动指定bsEui的字段类型,覆盖默认解析逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 02:54:00