Skip to content

SNMP 驱动

dc3-driver-snmp 把 SNMP 网络设备接入 IoT DC3——以设备上的 OID 为目标,周期性发 SNMP GET 采数,并支持向 OID 发 SNMP SET 写值。

SNMP(Simple Network Management Protocol,简单网络管理协议)是网络与机房设备最常用的管理协议,跑在 UDP 上、默认端口 161。被管设备(路由器、交换机、UPS、机房 PDU、打印机、服务器网卡等)内置一棵 MIB 树,树上每个可读写的数据点都有唯一的对象标识符 OID(形如 1.3.6.1.2.1.1.1.0)。本驱动基于 SNMP4J 库,作为 SNMP 管理端(manager)主动连接设备:读位号对其 OID 发 SNMP GET,写位号对 OID 发 SNMP SET,每台设备复用一个 SNMP 会话。

适用场景:机房/网络监控(带宽、端口状态、CPU/内存、温湿度、UPS 电量等)——凡是支持 SNMP 的设备,配好 OID 即可采集。

  • 驱动名 / codeSNMP Driver / SnmpDriver
  • 类型DRIVER_CLIENT(主动连设备)

驱动配置(设备级 driver-attribute

接入一台 SNMP 设备时,在设备上填这些属性

属性code类型默认值说明
HosthostSTRING127.0.0.1SNMP 设备 IP
PortportINT161SNMP 端口(标准 161)
VersionversionSTRINGv2cSNMP 版本(v1/v2c)
CommunitycommunitySTRINGpublic团体名(相当于只读/读写口令)
USM UsernameusmUsernameSTRING(空)SNMPv3 USM 用户名(v1/v2c 下不使用)
USM Auth ProtocolusmAuthProtocolSTRINGMD5SNMPv3 认证算法(MD5/SHA)
USM Auth PasswordusmAuthPasswordSTRING(空)SNMPv3 认证密码
TimeouttimeoutINT5000请求超时(毫秒)
RetriesretriesINT1请求重试次数

USM 三项仅为 SNMPv3 预留

usmUsername / usmAuthProtocol / usmAuthPassword 是 SNMPv3 的 USM 安全字段。当前实现只支持 v1 与 v2c,这三项填了也不生效,version 请填 v1v2c

位号配置(point-attribute

每个采集位号上填:

属性code类型默认值说明
OIDoidSTRING(空)SNMP 对象标识符(如 1.3.6.1.2.1.1.1.0
SNMP TypesnmpTypeSTRINGOCTET_STRINGSNMP 数据类型(INTEGER/GAUGE32/COUNTER32/OCTET_STRING/TIMETICKS/IPADDRESS/OID)

OID 决定采哪个数据点

读取时驱动对配置的 oid 发 GET,把返回的变量值原样作为位号值上报。读位号必须填 oid,否则校验不通过。snmpType 在读取时不影响取值,主要供写命令构造正确的变量类型。

写命令配置(command-attribute

可写位号还需在写命令上填:

属性code类型默认值说明
OIDoidSTRING(空)要写入的 OID
SNMP TypesnmpTypeSTRINGOCTET_STRING写入值的 SNMP 数据类型

采集与健康

  • 采集周期:默认 cron 0/30 * * * * ?(每 30 秒采一轮)。
  • 健康/在线:设备健康检查默认 cron 0/15 * * * * ?,租约超时 45 秒——在线状态机制见设备

最小接入示例

把 IP 192.168.1.20:161、团体名 public 的一台交换机接进来,采集它的系统描述(sysDescr,OID 1.3.6.1.2.1.1.1.0):

  1. SNMP Driver 创建设备,driver 属性填 host=192.168.1.20port=161version=v2ccommunity=public
  2. 给设备绑定的物模型加一个描述位号pointTypeFlag=STRINGREAD_ONLY),point 属性填 oid=1.3.6.1.2.1.1.1.0
  3. 启动驱动,30 秒内就能在位号值里看到设备的系统描述字符串。

易错点

OID 末尾常带 .0,别漏

标量(单值)对象的 OID 末尾要带实例标识 .0,例如 sysDescr1.3.6.1.2.1.1.1.0 而不是 1.3.6.1.2.1.1.1。表项(如各端口流量)则用行索引结尾(如 ...10.1...10.2)。OID 写错会导致 GET 返回为空、采集报错。

community 写错会静默超时

SNMP 用 community 团体名做口令。团体名不匹配或设备未开放该团体的访问时,设备通常不回包,表现为请求超时而非明确报错。接入前先用 snmpget/snmpwalk 在命令行确认 hostportcommunityoid 这一组能取到值。

延伸阅读

Released under the AGPL-3.0 License · 基于 AGPL-3.0 协议发布