

近期在调试一套工业环境监控系统时,遇到了关于Modbus连接保持的问题。现场部署了一批网口温湿度变送器,PoE取电、Modbus TCP上云,同时利旧接入存量RS485探头,并开启了SNMP和UDP Trap服务。前面几篇把Modbus TCP、组网、供电、部署运维讲透了,这篇聚焦一个常被误用的点:SNMP在机房监控里到底承担什么、怎么配、怎么上报、怎么接进监控栈,避免把它当第二数据通道来用。
别做的事:
# 典型设备CLI/Web表单字段
engineID 自动或手动(NMS需一致)
securityName monuser
authProtocol SHA-256(老设备SHA-1,协商一致即可)
authKey <32字节以上随机串派生,别用手输口令直存>
privProtocol AES-128/AES-256
privKey <同上>
contextName ""(默认)
notify target 10.10.22.10:162 或自定义9000/udp
notify filter 使能trap、linkDown、powerFail、thresholdExceeded# /etc/snmp/snmptrapd.conf
createUser -e 0x8000634F0250_monuser monuser SHA "authpass" AES "privpass"
authUser log,execute,net monuser
traphandle default /opt/nms/handle_trap.sh
# 启动
snmptrapd -f -Lo -A -p /var/run/snmptrapd.pid 0.0.0.0:162snmptrapd -Dusm -d看协商,设备侧触发测试trap。 设备私有Trap或标准coldStart/linkDown,varbind list携带:
归一化脚本:
# handle_trap.py 由snmptrapd traphandle传入,环境变量+stdin解析
import sys, json, datetime, requests
raw = sys.stdin.read()
evt = parse_net_snmp_trap(raw) # 解析VARBINDS
payload = {
"ts": datetime.datetime.utcnow().isoformat()+"Z",
"src_ip": evt.get("source_ip"),
"device": evt.get("sysName"),
"event": evt.get("trap_type"),
"value": evt.get("current_val"),
"threshold": evt.get("threshold"),
"severity": map_severity(evt),
}
# 推Kafka/Redis/NMS总线,或直写时序库标注事件
requests.post("http://nms-gw/internal/events", json=payload, timeout=2)snmpget -v3 -u monuser -l authPriv -a SHA -A authpass -x AES -X privpass <ip> sysUpTime.0 snmpwalk -v3 ... <ip> .1.3.6.1.4.1.<vendor>,确认温湿度OID返回值。 服务器机房监控、POE温湿度变送器、SNMPv3、SNMP上报、snmptrapd、snmp_exporter、Zabbix、边缘网关、Modbus TCP协同、MIB、USM、Trap接收、管理VLAN、运维集成
SNMP在POE温湿度变送器监控里是管理面与事件面,不是测量数据面:设备侧配SNMPv3代理与Trap目的端,NMS侧接收归一化进事件总线,与Modbus TCP采集面解耦协同;落地时别把两套协议耦合进同一变量表,配置版本化、凭据托管、管理VLAN隔离、轮询兜底,才能跑稳。
下一篇候选:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。