MQTT插件中的Pivot()函数发生了什么?

导航至

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

我计划很快发布一篇关于MQTT最佳实践的博客,但我们认为现在讨论这个插件合作太过好了。

背景

所以如果您使用过Flux,您可能对数据旋转的概念很熟悉。本质上,您是将垂直格式的值旋转成更接近关系型数据库的水平格式

旋转前

before-pivot

旋转后

After-pivot

使用Telegraf进行旋转

我们可以通过MQTT消费者插件和旋转处理器插件实现类似的效果。让我们考虑以下示例
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

现在让我们旋转

[[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 温度=32.2,速度=32.2,振动=1.0752=32.2

如您所见,我们将这些字段滚动到一个单一的多字段指标中。

生态系统优势

那么这样做有哪些好处呢?

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

更友好的解析格式:Telegraf可以将数据序列化为多种格式——JSONWavefront行协议Prometheus等。问题在于如何以可用的方式表示指标。让我们以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}

在这个例子中,我们现在可以引用字段名,尽管它嵌套在标签对象中。

使用旋转解析

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

最后,通过旋转,我们现在可以将其作为键值对引用。这种结构在JSON解析架构中得到更广泛的接受。

结论

希望这篇博客文章能够让您深入了解处理器的能力以及它们如何更好地塑造您的数据。那么下一步该怎么做呢?

我坚信尝试的力量。

  • 您可以在这里找到Telegraf配置示例。
  • 我已经开始构建一个带有不同场景的MQTT模拟器,在这里

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