是的,您订阅成功了。OPC UA 客户端监听器插件已发布!

导航至

如果没有 Lars Stegman 的贡献,本文将不可能完成。OPC UA 客户端监听器插件是他为解决长期存在的问题所做的贡献。

Telegraf 现在包含一个社区高度期待的新插件。OPC UA 客户端监听器插件。因此您可能会问自己:这有什么大不了的?已经有一个 OPC UA 插件了——这有什么不同?

在这篇博文中,我们将讨论 OPC UA 订阅插件解决的问题,以及如何设置您的第一个示例配置。

什么是 OPC UA 客户端监听器插件?

OPC UA 客户端监听器是 OPC UA 客户端读取器的替代输入插件。新插件添加了一个名为订阅的新功能。描述监听器作用的最佳方式是通过一个例子。

假设我们有一个机器人在工厂内将货物从 A 区运送到 B 区。在这种情况下,机器人将其状态写入 OPC UA 服务器。机器人有四种状态

  1. 正在装载
  2. 正在卸载
  3. 正在移动
  4. 已阻止

这是上次运行

Transport - figure 1

如您所见,运输机器人停止了 4 次。但是,当使用原始 OPC UA 输入插件时,Telegraf 仅报告了 4 次事件中的 2 次。这是为什么?这是因为原始 OPC UA 插件在每个 Telegraf 间隔周期轮询 OPC UA 服务器以获取新的标签读数。

Transport robot-figure 2

这是基于轮询的解决方案处理事件数据的基本缺陷之一。OPC UA 客户端监听器的行为有所不同。OPC UA 客户端不是在每个收集间隔轮询 OPC UA 服务器,而是为每个感兴趣的节点/标签创建订阅。OPC UA 服务器然后将监视这些节点/标签的变化,并将这些变化通知客户端。这看起来更像这样

the transport robot - loading-uploading

然后插件将收到每个状态更改的通知,如下所示

正在装载 -> 正在移动 -> 已停止 -> 正在运行 -> 已停止 -> 正在运行 -> 已停止 -> 正在运行 -> 已停止 -> 正在运行 -> 正在卸载

订阅有两个主要好处

  1. 正如我们在上面发现的那样,这是处理基于事件的数据的主要方式。执行节点/标签状态检查的责任在于 OPC UA 服务器。这极大地保证了数据的完整性。
  2. 订阅还大大提高了网络性能。由于您只读取事件更改,因此大大减少了重复的节点/标签状态条目。

尽管强烈建议使用订阅作为从 OPC UA 服务器读取节点/标签数据的最有效方式,但这并不意味着 OPC UA 客户端读取器插件已过时。有些用例确实需要轮询——例如,如果您想在特定时间间隔轮询标签的给定状态。这主要用于可视化状态变化非常不频繁的节点/标签。选择适合您用例的解决方案。

现在让我们构建一个工作示例!

一个工作示例

对于这个工作示例,我将使用 Prosys OPC UA 模拟服务器。它是测试 OPC UA 客户端与真实服务器的绝佳工具。

这是我的服务器连接详细信息

OPC UA similation server

让我们首先配置 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-tag we are subscribing to

对于此示例,我将使用订阅此标签的简单方法。我们将在另一篇博文中讨论最佳实践

## 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 缓冲区一起收集,直到下一个刷新周期。

OPC UA Listener is subscribed to each state change

额外加分

在本例中,我们的机器人状态更改映射到一个枚举值

  • 0 = “卸载/重新装载”
  • 1 = “已停止”
  • 2 = “正在运行”

我们可以使用 Enum Processor Plugin 将这些状态的数值表示形式转换为人类可读的标签。如果您使用 Mosaic 可视化可视化状态,这将非常有用。

Mosaic visualization

结论

OPC UA 客户端监听器插件一直是许多社区成员长期期待的功能。我们再次感谢 Lars Stagman 对该项目的贡献。我希望这篇博客有助于说明新贡献的重要性,并推进了 Telegraf 的新用例。

新插件计划于 2022 年 12 月发布。如果您不能等到那时,您可以从源代码构建或使用夜间构建之一下载 Telegraf。

如果您有任何问题,请务必加入我们的 Slack,并在那里与 Telegraf 社区的其他成员继续对话!