MQTT 插件的 Pivot() 究竟是怎么回事?

导航至

MQTT Consumer 插件是我们最广泛使用的 Telegraf 输入插件之一。如果您需要一些背景知识,我强烈建议您查看以下内容

我计划很快发布一篇 MQTT 最佳实践博客,但我们认为这个插件合作太好了,现在就应该谈论一下。

背景

如果您使用过 Flux,您可能熟悉数据透视的概念。本质上,您是将垂直格式的值旋转为更类似于关系数据库的水平格式

透视前

before-pivot

透视后

After-pivot

使用 Telegraf 进行透视

我们可以使用 MQTT ConsumerPivot Processor 插件实现类似的结果。让我们考虑以下示例
Pivotin-with-Telegraf-OG

我们有一队建筑车辆在新道路上工作。每辆车都向 MQTT 代理发送健康指标。我们的主题结构如下所示

RoadRoller/Temperature
RoadRoller/Speed
RoadRoller/Vibration

每个子主题(温度、速度、振动)都生成一个值。

让我们首先创建一个配置来从这些主题中读取数据

[[inputs.mqtt_consumer]]
    ....
 topics = ["RoadRoller_1/#"]

  data_format = "value"
  data_type = "float"

[[inputs.mqtt_consumer.topic_parsing]]
        topic = "RoadRoller_1/+"
        measurement = "measurement/_"
        tags = "_/field"

我们主题的输出将如下所示

RoadRoller,field=temperature value=32.2
RoadRoller,field=Speed value=20
RoadRoller,field=Vibration value=1.0752

现在让我们 pivot()

[[inputs.mqtt_consumer]]
    ....
 topics = ["RoadRoller_1/#"]

  data_format = "value"
  data_type = "float"

[[inputs.mqtt_consumer.topic_parsing]]
        topic = "RoadRoller_1/+"
        measurement = "measurement/_"
        tags = "_/field"

[[processors.pivot]]
    tag_key = "field"
    value_key = "value"

这是我们的新结果

RoadRoller temperature=32.2,Speed=32.2,Vibration=1.0752=32.2

如您所见,我们已将这些字段 rolled 成一个多字段指标。

生态系统优势

这样做有哪些好处?

减少发送的消息数量:在我们的当前示例中,这可能看起来微不足道,但如果您扩展我们从中收集单值的 MQTT 源的数量,则写入的指标数量开始增加。例如,由 150 辆建筑车辆组成的队列,每辆车写入 3 个子主题,总计 450 行指标。透视将我们的指标行数减少到 150 行。注意:这仅在处理并行发送数据的单值主题时有效。或者在使用 Merge 插件时。

更友好的解析格式:Telegraf 可以将数据序列化为多种格式——JSONWavefrontLine ProtocolPrometheus 仅举几例。问题在于如何以可用的方式表示指标。让我们以 JSON 为例

不将主题字段解析为标签

{"fields":{"value":23},"name":"RoadRoller_1","tags":{"host":"foo","topic":"RoadRoller_1/speed"},"timestamp":1654697690}

这里的问题是我们完全丢失了字段名称。我们需要从主题中提取字段名称。不太好。

将主题字段解析为标签但不进行透视

{"fields":{"value":23},"name":"RoadRoller_1","tags":{"field":"speed","host":"fool","topic":"RoadRoller_1/speed"},"timestamp":1654697690}

在此示例中,我们现在可以引用字段名称,尽管它嵌套在 tags 对象中。

使用透视进行解析

{"fields":{"speed":23},"name":"RoadRoller_1","tags":{"host":"foo","topic":"RoadRoller_1/speed"},"timestamp":1654697690}

最后,通过透视,我们现在可以将它们都引用为键值对。这种结构在 JSON 解析架构中更被广泛接受。

结论

我希望这篇博文让您深入了解了处理器的强大功能以及它们如何更好地塑造您的数据。那么接下来呢?

我坚信实践的力量

  • 您可以在此处找到 Telegraf 配置示例。
  • 我已开始在此处此处整理包含不同场景的 MQTT 模拟器。

此外,通过参加免费的InfluxDB 大学 Telegraf 数据采集课程,了解更多关于使用 Telegraf 采集数据的信息。获得徽章!