熟悉telegraf是因为influxdb缘故,当时telegraf主要是作为granfa监控的agent一环,很多文章有相关的介绍,但作为java开发对telegraf(go语言开发)也仅仅只是适用级别,这边文章也只讲到一些简单的应用。希望能帮助大家!
https://github.com/influxdata/telegraf
telegraf最新的几版更新中,着重的对其关于扩展组件的更新中(最新一次在更新K8S监控)
目前最新的插件文档Plugin directory | Telegraf 1.22 Documentation
其他类型的插件配置方式放一边,找到关于iot领域插件
里面有西门子传感器插件(S7)和MQTT还有OPCUA,仔细翻看源码,还包含modbus,tls等相关,有感兴趣的自行研究,我这里只实际操作采集OPCUA作为样例:
一.自行安装opcua软件
推荐教程:KepServer的下载安装与使用说明_牛奶咖啡13的博客-CSDN博客
这里我安装的是kepserver6.5,新建通道channel2,设备device1,点位TAG5
二.下载telegraf,修改相关配置
opcua相关配置样例 telegraf/plugins/inputs/opcua at master · influxdata/telegraf · GitHub
相关核心配置
# Retrieve data from OPCUA devices
[[inputs.opcua]]
## Metric name
name = "opcua"
#
## OPC UA Endpoint URL
endpoint = "opc.tcp://127.0.0.1:49320"
#
## 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"
#
## Security policy, one of "None", "Basic128Rsa15", "Basic256",
## "Basic256Sha256", or "auto"
security_policy = "None" #这里和opcua一致
#
## Security mode, one of "None", "Sign", "SignAndEncrypt", or "auto"
security_mode = "None" #这里和opcua一致
#
#
## 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 = ""
#
#
## 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"
#
## 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)
## tags - extra tags to be added to the output metric (optional); deprecated in 1.25.0; use default_tags
## 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="", namespace="", identifier_type="", identifier="", tags=[["tag1", "value1"], ["tag2", "value2"]},
# {name="", namespace="", identifier_type="", identifier=""},
# ]
#
nodes = [
{name="TAG5", namespace="2", identifier_type="s", identifier="channel2.device1.TAG5"},
]
## Bracketed notation
## 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
##
## Multiple node groups are allowed
#[[inputs.opcua.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 identifier type. If a node in the group doesn't set its
## namespace, 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 = {}
#
## 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 not supported yet)
# nodes = [
# {name="node1", namespace="", identifier_type="", identifier=""},
# {name="node2", namespace="", identifier_type="", identifier=""},
#]
#
## Bracketed notation
# [[inputs.opcua.group.nodes]]
# name = "node1"
# namespace = ""
# identifier_type = ""
# identifier = ""
# default_tags = { tag1 = "override1", tag2 = "value2" }
#
# [[inputs.opcua.group.nodes]]
# name = "node2"
# namespace = ""
# identifier_type = ""
# identifier = ""
## Enable workarounds required by some devices to work correctly
# [inputs.opcua.workarounds]
## Set additional valid status codes, StatusOK (0x0) is always considered valid
# additional_valid_status_codes = ["0xC0"]
# [inputs.opcua.request_workarounds]
## Use unregistered reads instead of registered reads
# use_unregistered_reads = false
###############################################################################
# OUTPUT PLUGINS #
###############################################################################
# Configuration for sending metrics to InfluxDB 2.0
[[outputs.influxdb_v2]]
## The URLs of the InfluxDB cluster nodes.
##
## Multiple URLs can be specified for a single cluster, only ONE of the
## urls will be written to each interval.
## ex: urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"]
urls = ["你的地址"]
## Token for authentication.
##token = "你的token"
## Organization is the name of the organization you wish to write to.
organization = "你的组织"
## Destination bucket to write into.
bucket = "opc_test"
## The value of this tag will be used to determine the bucket. If this
## tag is not set the 'bucket' option is used as the default.
# bucket_tag = ""
## If true, the bucket tag will not be added to the metric.
# exclude_bucket_tag = false
## Timeout for HTTP messages.
# timeout = "5s"
## Additional HTTP headers
# http_headers = {"X-Special-Header" = "Special-Value"}
## HTTP Proxy override, if unset values the standard proxy environment
## variables are consulted to determine which proxy, if any, should be used.
# http_proxy = "http://corporate.proxy:3128"
## HTTP User-Agent
# user_agent = "telegraf"
## Content-Encoding for write request body, can be set to "gzip" to
## compress body or "identity" to apply no encoding.
# content_encoding = "gzip"
## Enable or disable uint support for writing uints influxdb 2.0.
# influx_uint_support = false
## Optional TLS Config for use on HTTP connections.
# tls_ca = "/etc/telegraf/ca.pem"
# tls_cert = "/etc/telegraf/cert.pem"
# tls_key = "/etc/telegraf/key.pem"
## Use TLS but skip chain & host verification
# insecure_skip_verify = false
我是采集到influxdb中,基本完成
三.可能出现的错误
1.opcua认证错误
这里认证方式要和配置里对应
2.node id找不到
这里配置找的issues里有几个样例解释的不太详细,容易误导,具体错误是identifier(唯一性id错误),这里可以理解为点位
identifier="channel2.device1.TAG5"