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

如何将Telegraf 1.30.0输出的嵌套JSON扁平化为ThingsBoard可用格式?

解决Telegraf输出嵌套JSON适配ThingsBoard的扁平格式问题

当前Telegraf输出的CPU监控数据为嵌套结构,fields子对象包含所有CPU使用率指标,需要将其展开为扁平JSON格式才能被ThingsBoard直接解析使用。以下是针对Telegraf 1.30.0版本的两种有效解决方案:

方法一:使用json_v2处理器(推荐,配置简洁)

在Telegraf配置文件中添加json_v2处理器,将嵌套的fields对象直接展开到顶层:

# 保留你的CPU输入配置
[[inputs.cpu]]
  percpu = true
  totalcpu = false
  collect_cpu_time = false
  report_active = false

# 添加json_v2处理器,放在输入和输出节点之间
[[processors.json_v2]]
  # 展开fields下的所有指标到顶层
  [[processors.json_v2.field]]
    path = "fields"
    rename = ""  # 空值表示直接将子字段展开到当前层级
  # 删除原有的fields字段,避免冗余数据
  [[processors.json_v2.field]]
    path = "fields"
    operation = "delete"

# 配置ThingsBoard HTTP输出
[[outputs.http]]
  url = "http://YOUR_THINGSBOARD_IP/api/v1/YOUR_DEVICE_TOKEN/telemetry"
  method = "POST"
  data_format = "json"
  json_timestamp_units = "s"  # 匹配数据中的timestamp单位

处理后的数据格式示例:

{
  "name": "yavar",
  "timestamp": 1716900420,
  "usage_guest": 0,
  "usage_guest_nice": 0,
  "usage_idle": 91.40585349348385,
  "usage_iowait": 0.1691761123329754,
  "usage_irq": 0,
  "usage_nice": 0.13534088986632262,
  "usage_softirq": 0.08458805616646366,
  "usage_steal": 0,
  "usage_system": 2.317712738961436,
  "usage_user": 5.887328709186236
}

方法二:使用starlark处理器(灵活适配复杂场景)

如果需要自定义处理逻辑,可通过starlark脚本实现字段展开:

[[processors.starlark]]
  source = '''
def apply(metric):
    # 移除嵌套的fields字段并获取其内容
    nested_fields = metric.fields.pop("fields")
    # 将嵌套字段合并到顶层字段中
    metric.fields.update(nested_fields)
    return metric
'''

该脚本会直接将fields内的所有指标移到数据点顶层,并删除原fields字段,生成完全扁平的JSON结构。

生效验证

修改配置后重启Telegraf服务:

sudo systemctl restart telegraf

可通过查看Telegraf日志或抓包工具确认输出数据已转为扁平格式,此时ThingsBoard可直接解析并展示各CPU使用率指标。

内容的提问来源于stack exchange,提问作者Nithish kumar B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:05:54