是的,您订阅成功了。OPC UA 客户端监听器插件已发布!
作者:Jay Clifford / 用例, 产品
2022 年 11 月 17 日
导航至
如果没有 Lars Stegman 的贡献,本文将不可能完成。OPC UA 客户端监听器插件是他为解决长期存在的问题所做的贡献。
Telegraf 现在包含一个社区高度期待的新插件。OPC UA 客户端监听器插件。因此您可能会问自己:这有什么大不了的?已经有一个 OPC UA 插件了——这有什么不同?
在这篇博文中,我们将讨论 OPC UA 订阅插件解决的问题,以及如何设置您的第一个示例配置。
什么是 OPC UA 客户端监听器插件?
OPC UA 客户端监听器是 OPC UA 客户端读取器的替代输入插件。新插件添加了一个名为订阅的新功能。描述监听器作用的最佳方式是通过一个例子。
假设我们有一个机器人在工厂内将货物从 A 区运送到 B 区。在这种情况下,机器人将其状态写入 OPC UA 服务器。机器人有四种状态
- 正在装载
- 正在卸载
- 正在移动
- 已阻止
这是上次运行
如您所见,运输机器人停止了 4 次。但是,当使用原始 OPC UA 输入插件时,Telegraf 仅报告了 4 次事件中的 2 次。这是为什么?这是因为原始 OPC UA 插件在每个 Telegraf 间隔周期轮询 OPC UA 服务器以获取新的标签读数。
这是基于轮询的解决方案处理事件数据的基本缺陷之一。OPC UA 客户端监听器的行为有所不同。OPC UA 客户端不是在每个收集间隔轮询 OPC UA 服务器,而是为每个感兴趣的节点/标签创建订阅。OPC UA 服务器然后将监视这些节点/标签的变化,并将这些变化通知客户端。这看起来更像这样
然后插件将收到每个状态更改的通知,如下所示
正在装载 -> 正在移动 -> 已停止 -> 正在运行 -> 已停止 -> 正在运行 -> 已停止 -> 正在运行 -> 已停止 -> 正在运行 -> 正在卸载
订阅有两个主要好处
- 正如我们在上面发现的那样,这是处理基于事件的数据的主要方式。执行节点/标签状态检查的责任在于 OPC UA 服务器。这极大地保证了数据的完整性。
- 订阅还大大提高了网络性能。由于您只读取事件更改,因此大大减少了重复的节点/标签状态条目。
尽管强烈建议使用订阅作为从 OPC UA 服务器读取节点/标签数据的最有效方式,但这并不意味着 OPC UA 客户端读取器插件已过时。有些用例确实需要轮询——例如,如果您想在特定时间间隔轮询标签的给定状态。这主要用于可视化状态变化非常不频繁的节点/标签。选择适合您用例的解决方案。
现在让我们构建一个工作示例!
一个工作示例
对于这个工作示例,我将使用 Prosys OPC UA 模拟服务器。它是测试 OPC UA 客户端与真实服务器的绝佳工具。
这是我的服务器连接详细信息
让我们首先配置 OPC UA 客户端监听器插件的连接详细信息
# Retrieve data from OPCUA devices
[[inputs.opcua_listener]]
## Metric name
name = "Robots"
#
## OPC UA Endpoint URL
endpoint = "opc.tcp://Jays-MacBook-Pro.local:53530/OPCUA/SimulationServer"
#
## Maximum time allowed to establish a connect to the endpoint.
connect_timeout = "10s"
#
## Maximum time allowed for a request over the established connection.
request_timeout = "5s"
#
## The interval at which the server should at least update its monitored items
#subscription_interval = "100ms"
#
## Security policy, one of "None", "Basic128Rsa15", "Basic256",
## "Basic256Sha256", or "auto"
security_policy = "None"
#
## Security mode, one of "None", "Sign", "SignAndEncrypt", or "auto"
security_mode = "None"
#
## Path to cert.pem. Required when security mode or policy isn't "None".
## If cert path is not supplied, self-signed cert and key will be generated.
# certificate = "/etc/telegraf/cert.pem"
#
## Path to private key.pem. Required when security mode or policy isn't "None".
## If key path is not supplied, self-signed cert and key will be generated.
# private_key = "/etc/telegraf/key.pem"
#
## Authentication Method, one of "Certificate", "UserName", or "Anonymous". To
## authenticate using a specific ID, select 'Certificate' or 'UserName'
auth_method = "Anonymous"
如果您使用过原始 OPC UA 插件,那么您会对其中大部分内容感到熟悉。我们本质上是
- 为我们的度量定义一个名称。在本例中,我们将我们的度量命名为“Robot”,并使用标签来区分每个机器人。
- 定义我们希望连接到的 OPC UA 服务器 URL 以及端口。
- 这里需要注意的重要一点是订阅间隔。此设置定义服务器应多久通知客户端一次更改。许多 OPC UA 服务器现在都部署队列来存储受监视的状态更改。这些更改会在不晚于订阅间隔的时间通知客户端。
- 最后,定义我们的连接安全性。目前,由于我们部署的是示例服务器,因此将其设置为匿名。如果您想要使用证书的示例,可以在此处找到。
现在我们已经定义了客户端到服务器的连接参数,让我们订阅我们的机器人状态。这是我们将要订阅的节点/标签
对于此示例,我将使用订阅此标签的简单方法。我们将在另一篇博文中讨论最佳实践
## Node ID configuration
## name - field name to use in the output
## namespace - OPC UA namespace of the node (integer value 0 thru 3)
## identifier_type - OPC UA ID type (s=string, i=numeric, g=guid, b=opaque)
## identifier - OPC UA ID (tag as shown in opcua browser)
## default_tags - extra tags to be added to the output metric (optional)
##
## Use either the inline notation or the bracketed notation, not both.
#
## Inline notation (default_tags not supported yet)
nodes = [
{name="status", namespace="3", identifier_type="i", identifier="1008"}
]
同样,如果您使用过原始 OPC UA 插件,这应该等同于您当前的配置
- 定义一个对象列表,描述我们要订阅的节点/标签
- 名称:在字段输出名称中使用。我们将其称为状态,因为数值描述了机器人的当前状态。
- 命名空间:命名空间类似于节点/标签 ID 的容器。在大多数 OPC UA 服务器中,它在节点/标签 ID 中定义,初始为 ns. ns=3;i=1008
- 标识符类型:用于描述 OPC UA ID 类型。这通常也在 NodeID 地址中找到。ns=3;i=1008
- 标识符:节点/标签的唯一标识符。ns=3;i=1008
您可以在此处找到完整的 Telegraf 配置。
如果我们现在使用以下命令运行我们的配置
telegraf --debug --config opcua/opc_ua_subscription.conf
您现在可以看到 OPC UA 监听器已订阅节点/标签的每个状态更改。这些更改会与 Telegraf 缓冲区一起收集,直到下一个刷新周期。
额外加分
在本例中,我们的机器人状态更改映射到一个枚举值
- 0 = “卸载/重新装载”
- 1 = “已停止”
- 2 = “正在运行”
我们可以使用 Enum Processor Plugin 将这些状态的数值表示形式转换为人类可读的标签。如果您使用 Mosaic 可视化可视化状态,这将非常有用。
结论
OPC UA 客户端监听器插件一直是许多社区成员长期期待的功能。我们再次感谢 Lars Stagman 对该项目的贡献。我希望这篇博客有助于说明新贡献的重要性,并推进了 Telegraf 的新用例。
新插件计划于 2022 年 12 月发布。如果您不能等到那时,您可以从源代码构建或使用夜间构建之一下载 Telegraf。
如果您有任何问题,请务必加入我们的 Slack,并在那里与 Telegraf 社区的其他成员继续对话!