交换机不会 HTTP 怎么办:用 SNMP Get / Trap 把指标和中断打到博灵声光 TTS

日期: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 GetSNMP 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"

期望:

  1. 规则命中 → 通知组灯 + TTS;
  2. 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 则先看未知日志。


九、联调清单

  1. 主机凭证保存后,Get 监控项能添加;
  2. 测试按钮返回值与运维机脚本一致;
  3. 故意把期望值设到必触发,灯和 TTS 符合组;
  4. 改回正常期望值,确认不会持续误报;
  5. snmptrap 命中规则;改错 OID 出现在未知 Trap 日志;
  6. 拔网线:本机连通性告警,其它 SNMP 项暂停;
  7. Trap 风暴时队列可跳过,没有上无限循环;
  8. 配置备份,OID 列表放在内部资产表,不写进对客文档。

十、常见坑

  1. 只配 Ping → 三层通、端口已 Down。
  2. OID 抄错厂家 → 测试失败或值完全不是你想的指标。
  3. 期望值区间写反 → 正常温度一直告警。
  4. v2c 团体名与设备不一致 → 超时,看起来像网络故障。
  5. Trap 目标仍指向旧网管 → 终端收不到。
  6. 规则 OID 过宽 → 未知日志没有、喇叭却乱念。
  7. 中文关键字去匹配数字状态 → 字符串项恒失败。
  8. Get 间隔过短 → 老旧交换机 CPU 被问高,再反向误报。

十一、小结

网管设备缺的不是又一个 HTTP 网关,而是把已经存在的 SNMP 变成现场能听见的级别。

  • 博灵 Q 系列 / 博灵语音通知终端 主机监控支持 SNMP Get 轮询与 Trap 接收;
  • Get 靠凭证、OID、期望值与防抖;Trap 靠 OID、变量绑定和未知日志补规则;
  • 声光与 TTS 仍走通知组,不要为每个 OID 发明新灯色;
  • 先在运维机 getCmd / snmptrap 验证,再写进页面。

建议顺序:凭证 → 一条 Get → 一条 Trap → 生产 OID 清单 → 备份。

与本专栏其它篇的关系:小机房专篇是「Ping/TCP/网页总览」,本篇把 SNMP 单独做成可验收的网管联动;颜色与队列仍分别见通知组篇、周期播报篇。

相关推荐
wdfk_prog1 小时前
canopennode-rtt推荐,不只可以做从站,也可以承担主站角色
c语言·开发语言·数据库·学习·算法·深度优先
昌原的儿子LEO1 小时前
Linux 网络编程:select 与 epoll IO 多路复用详解
linux·网络·数据库
草莓熊Lotso1 小时前
【Redis 初阶】特殊数据类型、渐进式遍历与数据库操作生产指南
linux·网络·数据库·redis·tcp/ip·缓存·bootstrap
λqaq71 小时前
Redis 数据库基础:安装、5 大核心数据类型与常用命令
linux·数据库·redis·python·缓存
lhldsg1 小时前
智慧场馆解决方案软件开发实战:从需求分析到落地部署全流程
数据库·数据仓库·需求分析
huaweichenai1 小时前
spring boot 实现数据库分页操作
数据库·spring boot
小白羊丨2 小时前
异步任务创建接口如何幂等?
android·数据库
倔强的石头1062 小时前
连接数失控排查:从数据库会话、应用线程池到连接池泄漏
数据库·oracle
恒拓高科WorkPlus2 小时前
企业如何搭建安全内部通讯平台|企业内部通讯平台怎么选才更安全?
jvm·数据库·安全