
机柜级环境监控的目标不是再建一套动环平台,而是把温湿度测点纳管进既有 IT 运维系统(Zabbix / PRTG / Nagios / Prometheus+SNMP Exporter / eSight),复用其告警、资产、拓扑、值班升级链路。
典型部署:
机柜内以太网温湿度变送器(PoE)
│ RJ45,802.3af/at
▼
接入交换机(动环/管理VLAN,网管可达)
│ SNMP UDP/161 轮询,Trap UDP/162 上送
▼
运维系统 NMS(Zabbix server / SNMP Exporter / PRTG probe)
├─ 轮询采集温湿度
├─ Trap 接收越限事件
└─ 触发器→告警媒介→工单/值班升级边界约定,先写清楚,避免后期扯皮:
登录 Web/配置工具,确认并固化:
别假设 OID。先抓设备实际暴露的树,再建模板。
1.3.6.1.4.1.<IANA企业号>) # 连通性 + 标准 MIB
snmpwalk -v2c -c public 10.20.30.41 1.3.6.1.2.1.1
snmpget -v2c -c public 10.20.30.41 1.3.6.1.2.1.1.5.0 # sysName
snmpget -v2c -c public 10.20.30.41 1.3.6.1.2.1.1.6.0 # sysLocation
# 私有分支探测,确认实际叶子 OID 与实例索引
snmpwalk -v2c -c public 10.20.30.41 1.3.6.1.4.1.<PEN>注意三类坑:
.0 还是表索引 .1/.2/<portIndex>,多探头型号按端口表走 建议出厂时让厂家提供点表映射,写入配置文档:
含义 | OID(示例) | 类型 | 转换 |
|---|---|---|---|
温度 | 1.3.6.1.4.1.12345.1.1.1.0 | Integer32 | val/10 ℃ |
湿度 | 1.3.6.1.4.1.12345.1.1.2.0 | Integer32 | val/10 %RH |
设备状态 | 1.3.6.1.4.1.12345.1.3.1.0 | INTEGER | 1=ok,2=warn,3=err |
Trap 使能/阈值 | 写 OID,谨慎开放 | — | — |
env.temp → 1.3.6.1.4.1.12345.1.1.1.0,类型数字,预处理:自定义倍数 0.1(net-snmp 返回字符串时先做字符提取) env.humi → 同上,0.1 倍 env.status → 原值映射 {$SNMP_COMMUNITY}、超时 ≥3s、轮询间隔 30–60s,批量主机用自动发现或 API 导入 {host:env.temp.last()}>28 Warning
{host:env.temp.last()}>30 Critical
{host:env.humi.last()}>60 Warning
{host:env.humi.last()}<40 Warning
{host:snmp.agent.ping...} 离线检测(nodata/zabbix icmp 辅助)注意 Zabbix 预处理:SNMP 返回 "255" 字符串时,用 prometheus_to_json 不适用,改用 正则表达式 提取数字或 JavaScript 预处理;更稳的是 net-snmp 侧 snmptranslate 确认返回数值。
modules:
rack_env:
walk:
- 1.3.6.1.2.1.1
- 1.3.6.1.4.1.12345
version: 2
auth:
community: public
lookups: []
overrides:
envTemp:
ignore: false
regex_extracts: {}
envHumi:
ignore: false实际更可靠的做法:generator.yml 中定义 module,用 net-snmp + mibs 目录编译,生成指标名。
scrape_configs:
- job_name: rack_env
static_configs:
- targets: ['10.20.30.41']
metrics_path: /snmp
params:
module: [rack_env]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- replacement: snmp-exporter:9116
target_label: __address__envTemp{instance=...} 255,PromQL 中 /10;记录规则或面板里算 ℃ 轮询采集数值,Trap 做事件加速,不替代轮询。
Linux NMS 上 snmptrapd 示例:
# /etc/snmp/snmptrapd.conf
authCommunity execute public
traphandle default /opt/nms/handle_trap.sh# handle_trap.sh —— 推给运维系统
#!/bin/bash
read trap
# 解析 varbinds,实际用 snmptrapd -n / handler 更稳;此处示意
logger -t racktrap "$RECEIVED"
curl -XPOST http://zabbix-gateway/externalscripts/... # 或写 MQ/WebhookZabbix 侧更实用做法:Trap 不作为独立管道,仍由轮询保证状态;Trap 仅用于缩短告警延迟时,可用 Zabbix trapper item + zabbix_sender,或在 NMS 端收到 Trap 后置位触发主动检查。
关键:Trap 是 UDP、无确认,别把它当可靠事件总线。设计原则——
轮询节奏与规模:
ping → snmpget 标准 MIB → snmpget 私有 OID → 确认数值与本地 LCD 一致 现象 | 定位路径 | 处置 |
|---|---|---|
NMS 轮询超时 | ping 通但 UDP 161 无响应 | 查设备 SNMP 是否起、源 IP ACL、交换机 ACL、netns/路由、SELinux/firewalld |
返回 noSuchObject/noSuchInstance | OID/索引错、MIB 未加载、固件版本不符 | snmpwalk 私有分支确认,更新点表 |
数值数量级错 | 放大倍数/单位处理错 | 预处理修正,面板公式统一,别在多处重复除 10 |
Trap 收不到 | 目标 IP 错、端口未监听、UDP 丢弃 | tcpdump udp port 162,确认 snmptrapd 绑定,防火墙 |
告警风暴 | 阈值回滞缺失、轮询抖动、多探头重复 | 加死区、依赖、抑制窗,Trap 去重 |
配置漂移 | 现场改了阈值/偏移,NMS 未知 | 配置基线比对,RW 社区收敛,变更审计 |
PoE 端口掉电 | 功率超签、端口保护 | 查交换机 PoE 日志,分签或独立 PoE 注入器 |
时间错位 | NTP 未同步,Trap/事件关联困难 | 强制 NTP,采集侧打时戳,告警关联用接收时 |
抓包定位:
tcpdump -nn -i eth0 host 10.20.30.41 and udp port 161 -vv
tcpdump -nn -i eth0 udp port 162 -Anet-snmp 调试:SNMPv2-MIB::sysUpTime 确认设备未重启;IF-MIB 可选纳管端口状态。
关键词:机柜环境监控,以太网温湿度变送器,SNMPv2c,MIB,OID,Zabbix,SNMP Exporter,Trap,PoE,运维系统纳管
标签:#机柜监控 #温湿度变送器 #SNMP #MIB #OID #Zabbix #Prometheus #Trap #PoE #运维系统 #动环集成
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。