是的,您已正确订阅。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 服务器。机器人有四种状态
- 装载
- 卸载
- 移动
- 阻塞
以下是上一次运行的记录
如您所见,运输机器人停了四次。然而,当使用原始的 OPC UA 输入插件时,Telegraf 只报告了四个事件中的两个。为什么?这是因为原始的 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插件,那么这些对您来说应该很熟悉。我们基本上
- 为我们的测量定义一个名称。在这种情况下,我们将我们的测量命名为“机器人”并使用标签来区分每个机器人。
- 定义我们希望连接的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 = “运行”
我们可以使用枚举处理器插件将这些状态的数值表示转换为可读的标签。如果您使用马赛克可视化来可视化状态,这将非常有用。
结论
OPC UA客户端监听器插件是许多社区成员长期期待的功能。我们再次感谢Lars Stagman对项目的贡献。希望这篇博客有助于说明新贡献的重要性,并展示了Telegraf的新用例。
新插件计划于2022年12月发布。如果您等不及了,您可以从源代码构建或使用夜间构建之一下载Telegraf。
如果您有任何问题,请确保加入我们的Slack,并在那里与其他Telegraf社区成员继续对话!