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

如何配置Telegraf拆分气象数据并发送至MQTT队列?

单次API调用实现数据拆分并发送到MQTT的Telegraf配置方案

完全可行,不需要创建两个独立配置或发起两次API调用。Telegraf的处理器插件(如starlark)和多输出插件支持在单次数据采集后,将原始数据拆分为多组指定格式的指标,再分别发送到MQTT队列。

核心实现步骤

  1. 单次数据采集:通过openweathermap或http输入插件完成一次API调用,获取包含humidity、temperature等字段的原始数据。
  2. 数据拆分:使用starlark处理器(灵活性最高)将原始数据拆分为两个独立的指标集,分别对应你需要的JSON格式。
  3. 多目标发送:配置两个mqtt输出插件,通过指标名称筛选,将拆分后的两组数据分别发送到指定MQTT队列。

完整配置示例

1. 输入插件(二选一)

方案A:使用OpenWeatherMap输入

[[inputs.openweathermap]]
  apikey = "你的API密钥"
  city_id = "目标城市ID"
  interval = "5m"  # 采集间隔
  units = "metric" # 单位配置,按需调整

方案B:自定义HTTP请求输入

[[inputs.http]]
  urls = ["https://你的自定义API地址/weather-data"]
  interval = "5m"
  data_format = "json" # 确保API返回JSON格式数据

2. Starlark处理器(数据拆分)

该脚本会将原始数据拆分为"湿度指标"和"温度指标"两组,你可以根据需求调整字段保留规则和指标命名:

[[processors.starlark]]
  source = '''
def apply(metric):
    # 生成湿度相关指标
    humidity_metric = metric.copy()
    humidity_metric.name = "weather_humidity"
    # 保留需要的字段,删除其他
    required_humidity_fields = ["humidity", "dew_point"]
    for field in list(humidity_metric.fields.keys()):
        if field not in required_humidity_fields:
            del humidity_metric.fields[field]
    
    # 生成温度相关指标
    temp_metric = metric.copy()
    temp_metric.name = "weather_temperature"
    required_temp_fields = ["temperature", "feels_like"]
    for field in list(temp_metric.fields.keys()):
        if field not in required_temp_fields:
            del temp_metric.fields[field]
    
    # 返回拆分后的两个指标,替换原始数据
    return [humidity_metric, temp_metric]
'''

3. MQTT输出插件(分队列发送)

配置两个独立的MQTT输出,通过namepass筛选对应指标发送到指定主题:

# 发送湿度数据到MQTT主题
[[outputs.mqtt]]
  servers = ["tcp://你的MQTT Broker地址:1883"]
  topic = "weather/sensor/humidity"
  data_format = "json"
  namepass = ["weather_humidity"] # 只匹配湿度指标

# 发送温度数据到MQTT主题
[[outputs.mqtt]]
  servers = ["tcp://你的MQTT Broker地址:1883"]
  topic = "weather/sensor/temperature"
  data_format = "json"
  namepass = ["weather_temperature"] # 只匹配温度指标

补充说明

  • 若只需简单的字段过滤,也可省略starlark处理器,直接在每个MQTT输出中用fieldpass/fielddrop筛选字段,但starlark更适合自定义复杂JSON结构。
  • 确保你的Telegraf版本在1.17及以上(starlark处理器从该版本开始支持)。
  • 可根据实际需求调整指标名称、字段列表、MQTT主题和采集间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:40:24