OPC UA 客户端监听器输入插件
此服务插件通过订阅节点和事件,从 OPC UA 服务器接收数据。
引入于: Telegraf v1.25.0 标签: iot 操作系统支持: all
服务输入
此插件是服务输入。普通插件收集由 interval 设置确定的指标。服务插件启动一个服务来监听并等待指标或事件发生。服务插件与普通插件的两个主要区别是:
- 全局或插件特定的
interval设置可能不适用 --test、--test-wait和--once的 CLI 选项可能不会为此插件生成输出
全局配置选项
插件支持其他全局和插件配置设置,用于修改指标、标签和字段,创建别名以及配置插件顺序等任务。更多详情请参阅 CONFIGURATION.md。
Secret-store 支持
此插件支持从 secret-stores 获取 username 和 password 选项的密钥。有关如何使用它们的更多详细信息,请参阅 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 支持两种指定命名空间的方式
命名空间索引 (
namespace): 一个整数(0-3 或更高),它引用服务器命名空间数组中的一个位置。这更简单,但如果服务器重新启动或重新配置,它可能会发生变化。命名空间 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"注意:您必须指定 namespace 或 namespace_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 来确定要捕获的事件的。
事件组配置
您可以为事件流定义多个组,以订阅不同的事件类型。每个组允许指定 namespace 和 identifier_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
此输入插件收集的指标将取决于配置的 nodes、events 以及相应的组。
示例输出
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此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 Telegraf 和本文档提出反馈和 bug 报告。要获取支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。