把 OPC UA 连接到 Telegraf / InfluxDB
| 产品 | Telegraf / InfluxDB |
|---|---|
| 类别 | 时序数据 |
| OPC UA 角色 | 客户端 |
Telegraf 是一个实用的 OPC UA 采集器:opcua input 插件按间隔轮询节点,opcua_listener input 插件订阅数据变化,两者都写入 InfluxDB 或其他输出。它只需配置即可使用,这是它的优势,而与每台服务器的证书交换才是真正耗时的工作。
开始之前
- 在一台与每台 OPC UA 服务器有网络通路的主机上安装 Telegraf,并决定是一个代理服务多台设备,还是每台设备一个代理。每台设备一个代理可以独立失效,通常值得多开这些实例。
- 先配置并测试好一个输出,这样当 OPC UA 一侧跑通时你会立刻看到数据,而不用同时调试两层。
- 一份经过评审的节点列表,包含命名空间 URI 和标识符,而不是一个“到时候再浏览”的打算。Telegraf 只采集你配置的内容;它不做发现。
- 一个存放代理客户端证书和密钥的位置,以及把该证书放进每台服务器信任库的能力。
配置方法
- 先用无安全的读取验证通路配置一个 inputs.opcua 段,填入端点、不启用安全,配置一个节点组和一个节点,并以测试模式运行 agent,让它把指标打印到 stdout 而不是写出。这一步可同时确认端点、命名空间和标识符。
- 按命名空间和速率配置节点组按命名空间以及所需的间隔对节点分组。每个组带有命名空间、标识符类型和节点列表,因此按设备子系统划分组可以让配置保持可读,并且能在不触动其余部分的情况下改变某一个速率。
- 凡是类似事件的数据都改用 listener 插件在需要变化驱动的数据时使用 inputs.opcua_listener 并设置订阅间隔,尤其是状态变量和计数器。以固定间隔轮询状态会丢失两次轮询之间的状态转换,而丢失一次转换就是丢失一次停机事件。
- 启用安全并完成信任交换将安全策略和模式设为服务器所提供的值,让插件指向 agent 的证书和私钥,并配置身份令牌。然后连接一次、任其失败,再把 agent 的证书从服务器的拒绝库移到信任库。在 agent 侧按你所选策略的配置信任服务器证书。
- 在写入历史数据之前先定好指标命名和标签设定 measurement 名称,并加上标识机器、产线和工厂的标签,以及作为元数据的命名空间 URI 和标识符。在积累了半年历史数据之后重命名序列,代价远高于现在花一次时间想清楚。
- 确定指标携带哪个时间戳默认情况下采集器在采集时打时间戳。检查你的 Telegraf 版本能否把 OPC UA 源时间戳带入指标时间,如果可以就使用它,并对照插件自身的当前文档确认选项名称。如果不行,就把这个事实记录在分析团队会读到的地方。
- 关注 agent 自身的指标启用 internal 输入插件,并对采集错误和写入失败告警。一个悄无声息地连不上 PLC 的 Telegraf agent 会产生一段看起来像机器停机的数据空缺,这是机器数据采集中破坏性最大的故障模式。
地址空间是什么样子
Telegraf 把地址空间压平成指标。每个采集的节点成为某个 measurement 上的一个 field,带上你所配置维度的 tag,服务器原本知道的其余一切(类型定义、工程单位、浏览层次)除非你把它们编码进名称和 tag,否则都会被丢下。InfluxDB 一侧同样没有模型:一条 series 就是一个名称加一组 tag。由此的结果是,OPC UA 命名空间 URI 和标识符应当作为 tag 承载,或放在一张纳入版本控制的独立映射表中,这样仪表板上的一个数字始终可以追溯到它来自的节点。否则这个映射只存在于某台主机上的一个配置文件里。
陷阱
- 把代理程序的证书放进每台服务器的信任库,是大规模部署时最大的障碍,而且要逐台设备做。请在首次上线前确定流程或 PKI,并预期对每台服务器的第一次尝试都会按设计以信任错误失败。
- 配置中的命名空间索引会在 PLC 程序下载后失效。在插件支持的地方按命名空间 URI 配置,并把任何字面索引当作有明确责任人的已知隐患。
- 轮询状态变量与订阅它不是一回事。如果可用率很重要,就使用 listener 插件,因为比轮询间隔更短的停机是看不见的,也无法补救。
- 采集器自己的时间戳不是设备的时间戳。如果指标时间就是采集时间,那么每一段停机时长都继承了你的轮询抖动,而下游没人看得出来。
- 原样写入的计数器在查询时需要差值或非负差值函数。对计数器取平均会得到一条看似可信却毫无意义的曲线,而复位和回绕需要显式处理。
- OPC UA 侧没有存储转发。如果代理主机宕机,那段时间就是一个缺口,而除非你同时采集心跳或连接健康指标,否则缺口与停机无法区分。
- 一个代理采集多台设备会集中风险:一次配置错误或一次重启就会同时中断每一条产线。
- 你请求的采样间隔和发布间隔可能被服务器修正。请确认服务器实际提供的值,而不是相信配置里的数字。
从中获取 OEE 数据
Telegraf 能够提供 OEE 所需的三项输入,但边界清晰。状态:用 listener 插件订阅状态或模式变量,并存储每一次状态转换,这样可用率是由持续时间而不是由采样点算出来的。计数:把 PLC 计数器作为数值读取,在查询时计算差值,并显式处理复位;不要让采集器去数边沿。原因:OPC UA 报警与条件并不是这个采集器的用途,因此原因代码变量是现实的路径,基于事件的原因需要另一种工具。除此之外还要明确:采集器的时间戳处理方式决定了你所报告的每一个时长的精度上限;计划生产时间、班次日历和标准节拍不在设备中,必须作为独立的参考数据、由明确的责任人提供。
最后核对日期 2026 年 9 月 7 日,对照 OPC UA 1.05.07。OPC UA Connect 是教育资源,与 OPC Foundation 无隶属关系。