日期:2026-09-03 08:56
说明:对交换机、UPS、温湿度、已开 SNMP 的主机做 Get 轮询和 Trap 接收,命中后走通知组做声光 + 语音。OID、团体名、版本以设备页与目标机 MIB 为准,文中不放站外链接。
一、痛点:设备有 SNMP,没有 WebHook
机房里很多东西不会发 JSON:
- 接入/核心交换机:端口 Down、光功率、CPU;
- UPS、温湿度、部分动环:只肯 SNMP;
- Windows / Linux:开了 SNMP 服务就能问内存、磁盘。
你已经有博灵 Q 系列语音通知终端的主机监控,但若只配 Ping,端口 Down 了 ICMP 仍通,灯不响。要把「问得到的值」和「设备主动推过来的中断」都变成现场 TTS,就要用 SNMP Get 和 SNMP Trap。
两者不要混:
| Get | Trap | |
|---|---|---|
| 方向 | 终端去问 | 设备推给终端 |
| 时机 | 按监测间隔 | 事件发生就来 |
| 你要准备 | 凭证 + OID + 期望值 | 监听 OID + 变量绑定 |
| 失败常见 | 超时、OID 错、凭证错 | 来了但进「未知 Trap」 |
二、架构:轮询一条路,中断一条路
text
[交换机 / UPS / 服务器]
| |
| SNMP Get(终端轮询) | SNMP Trap(设备推送)
v v
[主机信息里的 SNMP 凭证]
|
v
[监控项:Get 或 Trap]
|
v
[阈值 / OID 规则 → 通知组]
|
v
[全彩 LED + TTS + 播报队列]
和本专栏其它入口的分工:IT 能改报文走 HTTP;安防走邮件;产线走 Modbus;网管类设备走本篇 SNMP 。通知组仍建议 critical / warning / recovered,不要为 SNMP 再发明一套颜色。
三、先配凭证,再加监控项
「主机信息」里每台目标填:
| 项 | 说明 |
|---|---|
| 主机地址 | IP,Trap 源也应对得上 |
| 主机名 | TTS 里好念,如 core-sw |
| 版本 | v1 / v2c / v3 |
| 凭证 | v2c 常见团体名;v3 要用户、认证与加密(以页面为准) |
注意:
- 未配凭证就无法添加 Get 类监控项,页面会把你送去改主机;
- 团体名不要用生产文档里的示例字串长期裸奔,只给终端所在网段只读;
- 终端要能 UDP 访问目标 161(Get),目标要能把 Trap 打到终端 162(以双方实际端口为准)。
本机网络连通性仍要配:终端自己 Ping 不通网关时,会暂停其它监控,避免「断网了还狂报交换机 CPU」。
四、SNMP Get:主动问一个 OID
4.1 监控项字段
| 项 | 说明 |
|---|---|
| OID | 纯数字,可写成 .1.3.6... 或 1.3.6... |
| 值类型 | 数值 / 字符串 / 比特 |
| 期望值 | 见下表,超出则告警 |
| 间隔、失败次数、连续监控、状态变化 | 防抖,与 Ping 项同一套思路 |
| 通知组 | 绑定灯效与是否语音 |
不要抄未在本机验证过的 CPU、磁盘 OID。 Windows 与 Linux、厂商私有 MIB 都不一样。流程应是:目标机文档或 MIB → 本机测试 → 再填期望值。sysUpTime(.1.3.6.1.2.1.1.3.0)只适合练手,不适合当业务告警。
4.2 数值型期望值(按页面语义理解)
常见写法(以你当前固件说明为准,上线前用「测试」按钮核对):
| 写法 | 常见含义(示意) |
|---|---|
10 |
正常落在 0~10,越界告警 |
10: |
小于 10 告警(正常 ≥10) |
~:10 |
大于 10 告警(正常 ≤10) |
10:20 |
小于 10 或大于 20 告警 |
@10:20 |
落在 10~20 内告警(正常在区间外) |
接口误码率、温度用「过高告警」;信号强度用「过低告警」。测错一条就会昼夜响。
4.3 字符串与比特
- 字符串:可填正则;取回的值不满足期望就告警 (按页面:不包含 / 不匹配)。接口
ifOperStatus一类若以数字字符串回来,不要按中文去匹配。 - 比特:期望值与取值做异或,非 0 则告警,适合状态位。
4.4 防抖
交换机 CPU 尖峰不要 30 秒一问、失败 1 次就 critical。建议:间隔 60~120s,连续失败 2~3 次;需要识别「通断抖动」再用状态变化阈值。
五、SNMP Trap:等设备来叫你
5.1 监控项字段
| 项 | 说明 |
|---|---|
| Trap OID | 要听的那一类 Trap |
| 变量绑定 | and / or:Trap 里是否还带指定 OID 且值相符 |
| 播报内容 | 命中后的 TTS(是否语音还看机型与通知组) |
| 通知组 | 灯效 |
只配 Trap OID、变量过宽,会把所有同类 Trap 都念出来。至少用绑定把「告警」和「恢复」拆开,或拆两条监控项、两个组。
5.2 联调命令
把目标改成终端 IP。下面只是联调用例,OID 要换成你规则里写的那组:
bash
snmptrap -v 2c -c public 192.168.0.66 '' 1.2.3.3.2.1 1.2.3.3.2.1.0 s "Warning"
期望:
- 规则命中 → 通知组灯 + TTS;
- OID 对不上 → 「未知 Trap 日志」里能看到,方便把规则补上,而不是以为设备没发。
交换机侧:Trap 目标填终端 IP,版本/团体名与终端监听一致,防火墙放行 UDP。
5.3 和 Get 怎么搭配
| 事件 | 更合适 |
|---|---|
| 温度缓慢升高 | Get + 数值阈值 |
| 风扇盘拔出、电源失效 | Trap |
| 端口 Down | Trap 更快;Get 作兜底轮询 |
| MIB 不熟、Trap 风暴 | 先 Get 少而准的 OID |
Trap 没有「间隔」可调,风暴时靠通知组重复次数、队列跳过、源侧抑制,不要把所有 Trap 绑无限循环。
六、落地清单示例(弱电间)
| 对象 | Get | Trap | 组 |
|---|---|---|---|
| 核心交换机 | 关键口状态或温度(OID 自测) | linkDown / 电源 | critical / warning |
| UPS | 电池容量数值 | 市电掉电 | critical |
| 温湿度 | 温度、湿度范围 | 无则只 Get | warning |
| Linux 文件服务器 | 磁盘 OID(本机验证后) | 可选 | warning |
验收顺序:凭证测试 → 一条 Get 测试按钮 → 一条 Trap 命令 → 再开生产 OID。
七、脚本:本机先 Get,确认 OID 再填进页面
终端里填的是「已验证」的 OID。可在同网运维机上先问(团体名、IP 换成实际值):
python
from pysnmp.hlapi import (
SnmpEngine, CommunityData, UdpTransportTarget,
ContextData, ObjectType, ObjectIdentity, getCmd,
)
TARGET = "192.168.1.1"
COMMUNITY = "REPLACE_READONLY"
OID = "1.3.6.1.2.1.1.3.0" # sysUpTime 练手,业务 OID 自行替换
def snmp_get() -> str:
err_ind, err_stat, err_idx, var_binds = next(
getCmd(
SnmpEngine(),
CommunityData(COMMUNITY, mpModel=1), # v2c
UdpTransportTarget((TARGET, 161), timeout=2, retries=1),
ContextData(),
ObjectType(ObjectIdentity(OID)),
)
)
if err_ind:
raise RuntimeError(err_ind)
if err_stat:
raise RuntimeError(f"{err_stat} at {err_idx}")
return " | ".join(f"{n}={v}" for n, v in var_binds)
if __name__ == "__main__":
print(snmp_get())
问通后再抄到博灵主机监控项。不要把写团体名、不要把整份 MIB 贴进博客。
八、日志:分清「没问到」和「问到了没播」
| 日志 | 用途 |
|---|---|
| 主机监控日志 | Get 成功/失败、阈值是否触发 |
| 未知 Trap 日志 | 来了但没有规则 |
| 播报日志 | 实际 TTS 与通知组 |
| 工作日志 | 服务是否异常 |
排障顺序:Ping 目标 → 凭证/版本 → OID 测试 → 期望值方向是否反了 → 通知组是否关语音 → Trap 则先看未知日志。
九、联调清单
- 主机凭证保存后,Get 监控项能添加;
- 测试按钮返回值与运维机脚本一致;
- 故意把期望值设到必触发,灯和 TTS 符合组;
- 改回正常期望值,确认不会持续误报;
snmptrap命中规则;改错 OID 出现在未知 Trap 日志;- 拔网线:本机连通性告警,其它 SNMP 项暂停;
- Trap 风暴时队列可跳过,没有上无限循环;
- 配置备份,OID 列表放在内部资产表,不写进对客文档。
十、常见坑
- 只配 Ping → 三层通、端口已 Down。
- OID 抄错厂家 → 测试失败或值完全不是你想的指标。
- 期望值区间写反 → 正常温度一直告警。
- v2c 团体名与设备不一致 → 超时,看起来像网络故障。
- Trap 目标仍指向旧网管 → 终端收不到。
- 规则 OID 过宽 → 未知日志没有、喇叭却乱念。
- 中文关键字去匹配数字状态 → 字符串项恒失败。
- Get 间隔过短 → 老旧交换机 CPU 被问高,再反向误报。
十一、小结
网管设备缺的不是又一个 HTTP 网关,而是把已经存在的 SNMP 变成现场能听见的级别。
- 博灵 Q 系列 / 博灵语音通知终端 主机监控支持 SNMP Get 轮询与 Trap 接收;
- Get 靠凭证、OID、期望值与防抖;Trap 靠 OID、变量绑定和未知日志补规则;
- 声光与 TTS 仍走通知组,不要为每个 OID 发明新灯色;
- 先在运维机
getCmd/snmptrap验证,再写进页面。
建议顺序:凭证 → 一条 Get → 一条 Trap → 生产 OID 清单 → 备份。
与本专栏其它篇的关系:小机房专篇是「Ping/TCP/网页总览」,本篇把 SNMP 单独做成可验收的网管联动;颜色与队列仍分别见通知组篇、周期播报篇。