文档文档

OPC UA 客户端监听器输入插件

此服务插件通过订阅节点和事件,从 OPC UA 服务器接收数据。

引入于: Telegraf v1.25.0 标签: iot 操作系统支持: all

服务输入

此插件是服务输入。普通插件收集由 interval 设置确定的指标。服务插件启动一个服务来监听并等待指标或事件发生。服务插件与普通插件的两个主要区别是:

  1. 全局或插件特定的 interval 设置可能不适用
  2. --test--test-wait--once 的 CLI 选项可能不会为此插件生成输出

全局配置选项

插件支持其他全局和插件配置设置,用于修改指标、标签和字段,创建别名以及配置插件顺序等任务。更多详情请参阅 CONFIGURATION.md

Secret-store 支持

此插件支持从 secret-stores 获取 usernamepassword 选项的密钥。有关如何使用它们的更多详细信息,请参阅 secret-store 文档

配置

# Retrieve data from OPCUA devices
[[inputs.opcua_listener]]
  ## Metric name
  # name = "opcua_listener"
  #
  ## OPC UA Endpoint URL
  # endpoint = "opc.tcp://:4840"
  #
  ## Maximum time allowed to establish a connect to the endpoint.
  # connect_timeout = "10s"
  #
  ## Behavior when we fail to connect to the endpoint on initialization. Valid options are:
  ##     "error": throw an error and exits Telegraf
  ##     "ignore": ignore this plugin if errors are encountered
  #      "retry": retry connecting at each interval
  # connect_fail_behavior = "error"
  #
  ## Maximum time allowed for a request over the established connection.
  # request_timeout = "5s"
  #
  # Maximum time that a session shall remain open without activity.
  # session_timeout = "20m"
  #
  ## The interval at which the server should at least update its monitored items.
  ## Please note that the OPC UA server might reject the specified interval if it cannot meet the required update rate.
  ## Therefore, always refer to the hardware/software documentation of your server to ensure the specified interval is supported.
  # subscription_interval = "100ms"
  #
  ## Security policy, one of "None", "Basic128Rsa15", "Basic256",
  ## "Basic256Sha256", or "auto"
  # security_policy = "auto"
  #
  ## Security mode, one of "None", "Sign", "SignAndEncrypt", or "auto"
  # security_mode = "auto"
  #
  ## 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"

  ## Path to additional, explicitly trusted certificate for the remote endpoint
  # remote_certificate = "/etc/telegraf/opcua_server_cert.pem"

  ## Authentication Method, one of "Certificate", "UserName", or "Anonymous".  To
  ## authenticate using a specific ID, select 'Certificate' or 'UserName'
  # auth_method = "Anonymous"
  #
  ## Username. Required for auth_method = "UserName"
  # username = ""
  #
  ## Password. Required for auth_method = "UserName"
  # password = ""
  #
  ## Option to select the metric timestamp to use. Valid options are:
  ##     "gather" -- uses the time of receiving the data in telegraf
  ##     "server" -- uses the timestamp provided by the server
  ##     "source" -- uses the timestamp provided by the source
  # timestamp = "gather"
  #
  ## The default timetsamp format is RFC3339Nano
  # Other timestamp layouts can be configured using the Go language time
  # layout specification from https://golang.ac.cn/pkg/time/#Time.Format
  # e.g.: json_timestamp_format = "2006-01-02T15:04:05Z07:00"
  #timestamp_format = ""
  #
  #
  ## Client trace messages
  ## When set to true, and debug mode enabled in the agent settings, the OPCUA
  ## client's messages are included in telegraf logs. These messages are very
  ## noisey, but essential for debugging issues.
  # client_trace = false
  #
  ## Include additional Fields in each metric
  ## Available options are:
  ##   DataType -- OPC-UA Data Type (string)
  # optional_fields = []
  #
  ## Node ID configuration
  ## name              - field name to use in the output
  ## namespace         - OPC UA namespace of the node (integer value 0 thru 3)
  ## namespace_uri     - OPC UA namespace URI (alternative to namespace for stable references)
  ## 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)
  ## monitoring_params - additional settings for the monitored node (optional)
  ##
  ## Note: Specify either 'namespace' or 'namespace_uri', not both.
  ##
  ## Monitoring parameters
  ## sampling_interval  - interval at which the server should check for data
  ##                      changes (default: 0s)
  ## queue_size         - size of the notification queue (default: 10)
  ## discard_oldest     - how notifications should be handled in case of full
  ##                      notification queues, possible values:
  ##                      true: oldest value added to queue gets replaced with new
  ##                            (default)
  ##                      false: last value added to queue gets replaced with new
  ## data_change_filter - defines the condition under which a notification should
  ##                      be reported
  ##
  ## Data change filter
  ## trigger        - specify the conditions under which a data change notification
  ##                  should be reported, possible values:
  ##                  "Status": only report notifications if the status changes
  ##                            (default if parameter is omitted)
  ##                  "StatusValue": report notifications if either status or value
  ##                                 changes
  ##                  "StatusValueTimestamp": report notifications if either status,
  ##                                          value or timestamp changes
  ## deadband_type  - type of the deadband filter to be applied, possible values:
  ##                  "Absolute": absolute change in a data value to report a notification
  ##                  "Percent": works only with nodes that have an EURange property set
  ##                             and is defined as: send notification if
  ##                             (last value - current value) >
  ##                             (deadband_value/100.0) * ((high–low) of EURange)
  ## deadband_value - value to deadband_type, must be a float value, no filter is set
  ##                  for negative values
  ##
  ## Use either the inline notation or the bracketed notation, not both.
  #
  ## Inline notation (default_tags and monitoring_params not supported yet)
  # nodes = [
  #   {name="node1", namespace="", identifier_type="", identifier=""},
  #   {name="node2", namespace="", identifier_type="", identifier=""}
  # ]
  #
  ## Bracketed notation
  # [[inputs.opcua_listener.nodes]]
  #   name = "node1"
  #   namespace = ""
  #   identifier_type = ""
  #   identifier = ""
  #   default_tags = { tag1 = "value1", tag2 = "value2" }
  #
  # [[inputs.opcua_listener.nodes]]
  #   name = "node2"
  #   namespace = ""
  #   identifier_type = ""
  #   identifier = ""
  #
  #   [inputs.opcua_listener.nodes.monitoring_params]
  #     sampling_interval = "0s"
  #     queue_size = 10
  #     discard_oldest = true
  #
  #     [inputs.opcua_listener.nodes.monitoring_params.data_change_filter]
  #       trigger = "Status"
  #       deadband_type = "Absolute"
  #       deadband_value = 0.0
  #
  # [[inputs.opcua_listener.nodes]]
  #   name = "node3"
  #   namespace_uri = "http://opcfoundation.org/UA/"
  #   identifier_type = ""
  #   identifier = ""
  #
  ## Node Group
  ## Sets defaults so they aren't required in every node.
  ## Default values can be set for:
  ## * Metric name
  ## * OPC UA namespace
  ## * Identifier
  ## * Default tags
  ## * Sampling interval
  ##
  ## Multiple node groups are allowed
  #[[inputs.opcua_listener.group]]
  ## Group Metric name. Overrides the top level name.  If unset, the
  ## top level name is used.
  # name =
  #
  ## Group default namespace. If a node in the group doesn't set its
  ## namespace, this is used.
  # namespace =
  #
  ## Group default namespace URI. Alternative to namespace for stable references.
  ## If a node in the group doesn't set its namespace_uri, this is used.
  # namespace_uri =
  #
  ## Group default identifier type. If a node in the group doesn't set its
  ## identifier_type, this is used.
  # identifier_type =
  #
  ## Default tags that are applied to every node in this group. Can be
  ## overwritten in a node by setting a different value for the tag name.
  ##   example: default_tags = { tag1 = "value1" }
  # default_tags = {}
  #
  ## Group default sampling interval. If a node in the group doesn't set its
  ## sampling interval, this is used.
  # sampling_interval = "0s"
  #
  ## Node ID Configuration.  Array of nodes with the same settings as above.
  ## Use either the inline notation or the bracketed notation, not both.
  #
  ## Inline notation (default_tags and monitoring_params not supported yet)
  # nodes = [
  #  {name="node1", namespace="", identifier_type="", identifier=""},
  #  {name="node2", namespace="", identifier_type="", identifier=""}
  #]
  #
  ## Bracketed notation
  # [[inputs.opcua_listener.group.nodes]]
  #   name = "node1"
  #   namespace = ""
  #   identifier_type = ""
  #   identifier = ""
  #   default_tags = { tag1 = "override1", tag2 = "value2" }
  #
  # [[inputs.opcua_listener.group.nodes]]
  #   name = "node2"
  #   namespace = ""
  #   identifier_type = ""
  #   identifier = ""
  #
  #   [inputs.opcua_listener.group.nodes.monitoring_params]
  #     sampling_interval = "0s"
  #     queue_size = 10
  #     discard_oldest = true
  #
  #     [inputs.opcua_listener.group.nodes.monitoring_params.data_change_filter]
  #       trigger = "Status"
  #       deadband_type = "Absolute"
  #       deadband_value = 0.0
  #

  ## Multiple event groups are allowed.
  # [[inputs.opcua_listener.events]]
  #   ## Polling interval for data collection
  #   # sampling_interval = "10s"
  #   ## Size of the notification queue
  #   # queue_size = 10
  #   ## Node parameter defaults for node definitions below
  #   # namespace = ""
  #   # identifier_type = ""
  #   ## Specifies OPCUA Event sources to filter on
  #   # source_names = ["SourceName1", "SourceName2"]
  #   ## Fields to capture from event notifications
  #   fields = ["Severity", "Message", "Time"]
  #
  #   ## Type or level of events to capture from the monitored nodes.
  #   [inputs.opcua_listener.events.event_type_node]
  #     namespace = ""
  #     identifier_type = ""
  #     identifier = ""
  #
  #   ## Nodes to monitor for event notifications associated with the defined
  #   ## event type
  #   [[inputs.opcua_listener.events.node_ids]]
  #     namespace = ""
  #     identifier_type = ""
  #     identifier = ""

  ## Enable workarounds required by some devices to work correctly
  # [inputs.opcua_listener.workarounds]
  #  ## Set additional valid status codes, StatusOK (0x0) is always considered valid
  #  # additional_valid_status_codes = ["0xC0"]
  #  ## Use unregistered reads instead of registered reads
  #  # use_unregistered_reads = false

节点配置

OPC UA 节点 ID 可能类似于:“ns=3;s=Temperature”。在此示例中

  • ns=3 表示 namespace 为 3
  • s=Temperature 表示 identifier_type 是字符串,identifier 值为 ‘Temperature’
  • 这个示例温度节点的值为 79.0

要从此节点收集数据,请在上面的 'nodes' 属性中输入以下行

{name="temp", namespace="3", identifier_type="s", identifier="Temperature"},

此节点配置会产生如下指标

opcua,id=ns\=3;s\=Temperature temp=79.0,Quality="OK (0x0)" 1597820490000000000

在“Additional Metrics”中输入“DataType”后,此节点配置会产生如下指标

opcua,id=ns\=3;s\=Temperature temp=79.0,Quality="OK (0x0)",DataType="Float" 1597820490000000000

如果值是数组,每个元素将使用索引键解包成一个字段。例如

opcua,id=ns\=3;s\=Temperature temp[0]=79.0,temp[1]=38.9,Quality="OK (0x0)",DataType="Float" 1597820490000000000

命名空间索引 vs 命名空间 URI

OPC UA 支持两种指定命名空间的方式

  1. 命名空间索引 (namespace): 一个整数(0-3 或更高),它引用服务器命名空间数组中的一个位置。这更简单,但如果服务器重新启动或重新配置,它可能会发生变化。

  2. 命名空间 URI (namespace_uri): 一个字符串 URI,可唯一标识命名空间。这在服务器重新启动时更稳定,但需要插件从服务器获取命名空间数组以将 URI 解析为索引。

何时使用命名空间索引

  • 对于标准的 OPC UA 命名空间(0 = OPC UA,1 = 本地服务器)
  • 当命名空间稳定性不重要时
  • 为了更简单的配置

何时使用命名空间 URI

  • 当您需要跨服务器重新启动保持一致的节点引用时
  • 对于命名空间索引可能发生变化的生产环境
  • 与供应商特定的命名空间配合使用时

使用命名空间 URI 的示例

[[inputs.opcua_listener.nodes]]
  name = "ServerStatus"
  namespace_uri = "http://opcfoundation.org/UA/"
  identifier_type = "i"
  identifier = "2256"

这在内部会产生与以下相同的节点 ID

[[inputs.opcua_listener.nodes]]
  name = "ServerStatus"
  namespace = "0"
  identifier_type = "i"
  identifier = "2256"

注意:您必须指定 namespacenamespace_uri,但不能同时指定两者。

组配置

组可以为命名空间(索引或 URI)、标识符类型、标签设置和采样间隔设置默认值。默认值适用于组中的所有节点。如果设置了默认值,节点可以省略该设置。这简化了节点配置,特别是当许多节点共享相同的命名空间或标识符类型时。

输出指标将包含在组和节点中设置的标签。如果同一名称的标签在两个地方都设置了,则使用节点中的标签值。

此示例组配置有三个组,每个组有两个节点

  # Group 1
  [[inputs.opcua_listener.group]]
    name = "group1_metric_name"
    namespace = "3"
    identifier_type = "i"
    default_tags = { group1_tag = "val1" }
    [[inputs.opcua.group.nodes]]
      name = "name"
      identifier = "1001"
      default_tags = { node1_tag = "val2" }
    [[inputs.opcua.group.nodes]]
      name = "name"
      identifier = "1002"
      default_tags = {node1_tag = "val3"}

  # Group 2
  [[inputs.opcua_listener.group]]
    name = "group2_metric_name"
    namespace = "3"
    identifier_type = "i"
    default_tags = { group2_tag = "val3" }
    [[inputs.opcua.group.nodes]]
      name = "saw"
      identifier = "1003"
      default_tags = { node2_tag = "val4" }
    [[inputs.opcua.group.nodes]]
      name = "sin"
      identifier = "1004"

  # Group 3
  [[inputs.opcua_listener.group]]
    name = "group3_metric_name"
    namespace = "3"
    identifier_type = "i"
    default_tags = { group3_tag = "val5" }
    nodes = [
      {name="name", identifier="1001"},
      {name="name", identifier="1002"},
    ]

事件配置

定义事件允许订阅具有特定节点 ID 和基于事件类型和源的过滤条件的事件。该插件订阅指定的 event_type 节点 ID,并收集满足定义条件的事件。node_ids 参数指定要监控事件的节点(被监控项)。但是,实际订阅是基于 event_type_node 来确定要捕获的事件的。

事件组配置

您可以为事件流定义多个组,以订阅不同的事件类型。每个组允许指定 namespaceidentifier_type 的默认值,这些值将被 node_ids 中的设置覆盖。节点信息的组默认值不会影响 event_type_node 设置,并且所有参数都必须在此部分设置。

此示例组配置显示了如何使用组设置

# Group 1
[[inputs.opcua_listener.events]]
   sampling_interval = "10s"
   queue_size = "100"
   source_names = ["SourceName1", "SourceName2"]
   fields = ["Severity", "Message", "Time"]

   [inputs.opcua_listener.events.event_type_node]
     namespace = "1"
     identifier_type = "i"
     identifier = "1234"

   [[inputs.opcua_listener.events.node_ids]]
     namespace = "2"
     identifier_type = "i"
     identifier = "2345"

# Group 2
[[inputs.opcua_listener.events]]
   sampling_interval = "10s"
   queue_size = "100"
   namespace = "3"
   identifier_type = "s"
   source_names = ["SourceName1", "SourceName2"]
   fields = ["Severity", "Message", "Time"]

   [inputs.opcua_listener.events.event_type_node]
     namespace = "1"
     identifier_type = "i"
     identifier = "5678"

    node_ids = [
      {identifier="Sensor1"}, // default values will be used for namespace and identifier_type
      {namespace="2", identifier="TemperatureSensor"}, // default values will be used for identifier_type
      {namespace="5", identifier_type="i", identifier="2002"} // no default values will be used
    ]

Metrics

此输入插件收集的指标将取决于配置的 nodesevents 以及相应的组。

示例输出

group1_metric_name,group1_tag=val1,id=ns\=3;i\=1001,node1_tag=val2 name=0,Quality="OK (0x0)" 1606893246000000000
group1_metric_name,group1_tag=val1,id=ns\=3;i\=1002,node1_tag=val3 name=-1.389117,Quality="OK (0x0)" 1606893246000000000
group2_metric_name,group2_tag=val3,id=ns\=3;i\=1003,node2_tag=val4 Quality="OK (0x0)",saw=-1.6 1606893246000000000
group2_metric_name,group2_tag=val3,id=ns\=3;i\=1004 sin=1.902113,Quality="OK (0x0)" 1606893246000000000

此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2