第4章:数据采集层设计

大家好,我是老张。今天咱们聊聊数据采集层。这一层说白了就是系统的「眼睛」和「耳朵」——设备能不能被监控到,数据准不准,实时性够不够,全看这一层设计得怎么样。

我做了十几年监控系统,见过太多「上层花里胡哨,底层一塌糊涂」的项目。数据采集层要是没打好,上面再好的分析引擎也是白搭。好,咱们直接进入正题。

4.1 采集协议概述

先说说协议。协议就是设备说话的「语言」。你想想看,一个工厂里可能有几十种设备,每种设备说的「方言」都不一样。采集层要做的,就是听懂所有这些方言。

目前主流的协议有四种:SNMP、Modbus、MQTT、HTTP。我一个个讲。

4.1.1 SNMP(简单网络管理协议)

SNMP 是网络设备的「通用语言」。路由器、交换机、防火墙,基本都支持它。它的核心是 MIB(管理信息库),说白了就是一个树状的数据字典。

我个人的习惯:能用 SNMP 的设备,优先用 SNMP。为什么?因为它成熟、稳定、开销小。但要注意,SNMP v1/v2c 是明文传输的,安全是个大问题。我在项目中遇到过,客户非要走公网采集,结果被中间人攻击了。后来强制升级到 v3,加了加密和认证,才搞定。

关键点: SNMP 适合读多写少的场景。别用它做频繁的配置下发,那是 REST API 的活。

4.1.2 Modbus

Modbus 是工业控制领域的「老大哥」。PLC、变频器、传感器,很多都支持它。它有两种变体:Modbus RTU(串口)和 Modbus TCP(以太网)。

Modbus 的地址模型很简单:线圈(Coil)、离散输入(Discrete Input)、输入寄存器(Input Register)、保持寄存器(Holding Register)。每个地址对应一个数据点。

避坑指南:我曾经在一个项目中,设备返回的数据总是对不上。查了两天,最后发现是字节序的问题——Modbus 默认是大端序,但有些国产设备用的是小端序。嗯,这个坑踩得我记忆犹新。

4.1.3 MQTT

MQTT 是物联网时代的「新贵」。它基于发布/订阅模式,非常适合低带宽、高延迟的网络环境。比如,你有一万个传感器通过 4G 网络上报数据,MQTT 就是最佳选择。

它的核心概念是 Topic(主题)和 QoS(服务质量)。QoS 0 最多发一次,QoS 1 至少发一次,QoS 2 恰好发一次。我建议:对于告警数据,用 QoS 1;对于普通遥测数据,QoS 0 就够了。

小技巧: MQTT 的 Broker 一定要做集群。我见过单点 Broker 挂了,整个工厂的数据都丢了。用 EMQX 或 Mosquitto 做集群,稳得很。

4.1.4 HTTP

HTTP 是最通用的协议。很多现代设备都提供 REST API,通过 HTTP 上报数据。它的优点是简单、易调试,缺点是开销大、实时性差。

我个人建议:HTTP 只适合做「非实时」的数据采集,比如每天一次的报表数据。别用它做毫秒级的实时监控,那是自找麻烦。

4.2 采集器架构

协议讲完了,咱们聊聊采集器怎么部署。主要有两种模式:Agent 模式和 Agentless 模式。

4.2.1 Agent 模式

Agent 模式,就是在每台被监控的设备上装一个「小软件」。这个软件负责采集数据,然后上报给中心服务器。

优点

  • 采集灵活,可以定制化
  • 支持离线缓存,网络断了也不丢数据
  • 可以做一些本地预处理,减轻服务器压力

缺点

  • 部署麻烦,每台设备都要装
  • 版本管理困难,升级时要逐个更新
  • 占用设备资源(CPU、内存)

我遇到过的情况:有一次给一个客户做监控,他们有两千台服务器。我建议用 Agent 模式,结果运维团队死活不同意,说「每台机器装个 Agent,万一有漏洞怎么办?」后来我们做了安全审计,加了签名校验,才说服他们。

4.2.2 Agentless 模式

Agentless 模式,就是中心服务器直接通过网络协议去「拉」数据。不需要在被监控设备上装任何东西。

优点

  • 部署简单,零侵入
  • 管理方便,所有配置都在中心
  • 不占用设备资源

缺点

  • 依赖网络,设备离线就采不到数据
  • 采集能力受限于设备支持的协议
  • 中心服务器压力大(所有采集任务都集中了)
注意: Agentless 模式虽然方便,但别滥用。我曾经见过一个项目,用一台采集服务器去轮询一万台设备,结果 CPU 跑满,数据全丢了。一定要做分片和限流。

4.3 采集任务调度策略

最后说说调度策略。说白了,就是「什么时候采、采谁、采多快」的问题。

常见的调度策略有三种:

策略 说明 适用场景
固定周期 每隔固定时间采集一次(如每5秒) CPU、内存等变化缓慢的指标
事件触发 设备状态变化时立即采集 告警、开关量变化
自适应调度 根据历史数据动态调整采集频率 流量波动大的场景

我个人的建议:别把所有设备都设成同一个采集周期。重要设备(比如核心交换机)可以设成 5 秒一次,普通设备(比如办公区的傻瓜交换机)30 秒一次就够了。这样能大大减轻采集层的压力。

另外,一定要做「采集超时」和「重试机制」。我见过一个项目,某个设备挂了,采集线程一直卡在那里,结果整个采集池都被拖死了。后来我们加了超时时间(默认 3 秒),超时后直接跳过,记录告警。

知识体系总览

下面这张图,是我画的数据采集层核心逻辑。你看一眼,就能明白整个章节在讲什么。

数据采集层核心架构 采集协议 SNMP Modbus MQTT HTTP 采集器架构 Agent 模式 (有代理) Agentless 模式 (无代理) 调度策略 固定周期 事件触发 自适应调度 三者关系:协议决定「怎么采」,架构决定「谁来采」,调度决定「何时采」

好了,数据采集层的内容就讲到这里。协议、架构、调度策略,这三块是核心。你设计采集层时,先想清楚「用什么协议采」,再决定「用 Agent 还是 Agentless」,最后设计「调度策略」。顺序别搞反了。

一句话总结: 数据采集层是监控系统的地基。地基不稳,上层再漂亮也是空中楼阁。

公众号:蓝海资料掘金营,微信deep3321