Connext DDS 的 Telegraf 插件:使用 DDS 和 InfluxDB 构建时间序列监控系统
几个月前,我写了一篇关于监控 IIoT 系统的博客。该博客主要涵盖了使用 Connext DDS 和时间序列数据库的监控架构的概述。此博客是该讨论的延续,提供了架构关键元素的新细节。
为了演示监控架构,来自 InfluxData 的 InfluxDB 被用作监控的时间序列数据库。在做这项工作时,我发现 Connext DDS 的 Telegraf 输入插件是实现架构的关键缺失元素。所以我为Connext DDS开发了一个输入插件的原型。今天,我很高兴将它作为 RTI Labs 的最新项目与您分享——这是一个免费程序,可为客户提供早期访问新 RTI 技术的机会,包括软件项目、下载和工具。
在这篇博客中,我将分享 Telegraf 插件的内部结构和示例。但首先,让我们回顾一下 Telegraf 的基础知识。
什么是 Telegraf?
Telegraf 是 InfluxData 时间序列平台的一部分,是收集、处理、聚合和写入指标的代理。它支持插件系统,因此开发人员可以轻松地为指标添加插件。它包括四种不同的插件类型:
- 输入插件 从系统、服务或第 3 方 API 收集指标。
- 处理器插件 转换、丰富和/或过滤指标。
- 聚合器插件 创建聚合指标(例如平均值、最小值、最大值、分位数等)。
- 输出插件 将指标写入不同的目的地。
Telegraf 的主要组件是什么?
Telegraf 使用 InfluxDB 的指标数据模型作为内部表示。数据模型包含四个主要组件:
- 测量名称 是指标的命名空间。
- 标签 是用于识别指标的键/值对。
- 字段 是指标数据的键/值对。
- 时间戳 是与字段关联的日期和时间。
Telegraf 支持多种输入数据格式,以将不同格式的指标解析为内部表示。解析度量后,它们存在于内存中,并将转换为具体表示,通过输出插件传输。为此,它还支持多种序列化格式。目前Connext DDS的输入插件只支持JSON输入数据格式。
Telegraf 的配置文件是使用 TOML 编写的,它包括代理的配置(例如,数据收集间隔和刷新间隔)和插件。可以在此处找到详细说明。对于 Connext DDS 插件,它需要一个额外的 XML App Creation 配置文件。它确实包括 Telegraf 输入插件使用的类型、主题和 DDS 实体的配置。
Connext DDS 的 Telegraf 输入插件是如何开发的?
如上所述,Telegraf 提供了一个插件系统,可以让开发人员为指标添加插件。开发输入插件,需要实现输入插件接口中定义的以下函数。
如果输入插件是服务插件,则需要实现输入服务插件接口中定义的以下功能。服务插件与常规插件的不同之处在于它在 Telegraf 运行时运行后台服务。
Connext DDS 的输入插件是一个服务插件,因为它在收到 DDS 数据时将指标推送到 Telegraf,而不是按配置的时间间隔拉取指标。因此,它运行一个后台线程,通过 WaitSets 检查 DDS 数据的到达。如果您对其实施方式感兴趣,请在此处查看。
带有示例配置的演示
与 Telegaf 合作的最大好处是它提供了一堆开箱即用的插件。拥有 Connext DDS 的输入插件后,您可以轻松选择现有插件以将它们应用于传入的任何 DDS 数据。我将介绍 Connext DDS 和其他插件的输入插件的示例命令和配置。你可以在 GitHub 上找到我在这里使用的示例配置文件。
可以通过 Telegraf 生成默认配置文件。
$ telegraf config> telegraf.conf
要生成具有特定输入和输出的文件,您可以使用 “--input-filter”
和 “--output-filter”
旗帜。以下命令将生成一个默认配置文件,其中包含 Connext DDS 的输入插件和文件的输出插件。
$ telegraf --input-filter dds_consumer --output-filter 文件配置> dds_to_file.conf
之后,您可以使用生成的配置文件运行 Telegraf。
$ telegraf -config dds_to_file.conf
Connext DDS的输入插件默认配置如下:
[[inputs.dds_consumer]]
## XML 配置文件路径
config_path ="example_configs/ShapeExample.xml"
## 来自 XML 描述的 DDS 参与者的配置名称
participant_config ="MyParticipantLibrary::Zero"
## 来自 XML 描述的 DDS DataReader 的配置名称
reader_config ="MySubscriber::MySquareReader"
## 标签键是一个应该作为标签添加的键的数组。
tag_keys =[“颜色”]
## 覆盖测量的基本名称
name_override ="形状"
##要消费的数据格式。
data_format ="json"
默认配置将使用位于 “example_configs/ShapeExample.xml”
的 Connext DDS 的 XML 配置文件 并创建一个参与者 (MyParticipantLibrary::Zero
) 和一个阅读器 (MySubscriber::MySquareReader
) 定义在配置文件中。目前,它只适用于 JSON 格式,所以 “data_format”
配置应设置为 “json”
.
XML 中定义的阅读器订阅名为 “Square”
的主题 并使用 RTI Shapes 演示的类型。因为Shapes demo的类型使用color属性作为key,所以添加了color属性作为标签。默认情况下,测量名称成为服务输入名称的名称 (dds_consumer
插件)。如果要使用不同的测量名称,可以使用 “name_override”
设置 配置。
要测试此配置,您可以运行 RTI Shapes 演示并发布 Square
主题数据。发布 Square
后 主题数据,您可以在 “/tmp/metrics.out”
查看收到的 DDS 指标 ,这是文件输出插件的默认路径。
如果要将相同的 DDS 数据发送到不同的输出插件(如 InfluxDB),只需运行以下命令即可为 InfluxDB 生成配置文件:
$ telegraf --input-filter dds_consumer --output-filter 文件配置> dds_to_influx.conf
$ Telegraf -config dds_to_influx.conf
Telegraf 提供了几个聚合和处理插件。您可以在 Telegraf 配置文件中添加以下行,以将您的指标与基本统计数据(例如,最小值、最大值、平均值、标准差)进行聚合。它将每 10 秒汇总一次包含基本统计信息的指标。
[[aggregators.basicstats]]
## 刷新和清除聚合器的时间段。
周期 ="10s"
## 如果为 true,原始指标将被聚合器删除,并且不会发送到输出插件。
drop_original =false
您可以使用处理器插件重命名字段。此示例交换 “x”
和 “y”
形状的坐标。
[[processors.rename]]
[[processors.rename.replace]]
字段 ="x"
dest ="y_trans"
[[processors.rename.replace]]
字段 ="y"
dest ="x_trans"
这些是 Telegraf 和 Connext DDS 插件的一些有趣功能和内部结构。我希望你会发现它们对使用 DDS 和 InfluxDB 构建时间序列监控系统很有用。
在此处阅读有关 Telegraf 代理的第一个 DDS 插件的官方公告。
虽然我介绍了一些特定的插件作为示例,但还有许多其他插件可以与您的 DDS 系统配合使用。要使用 Connext DDS 插件,请查看以下 GitHub。 https://github.com/rticommunity/telegraf
请让我知道您对 RTI 实验室的最新交付成果有何看法。如果您有任何意见、疑问或问题,请访问 RTI 社区论坛或直接在 GitHub 上创建问题。
物联网技术