使用 snmptrapd 和 snmptt 解析 SNMP Trap

介绍 snmptrapd 与 snmptt 处理 SNMP Trap 的数据流、配置方式和规则示例,说明如何把设备主动通知翻译成可读事件并转发到监控告警系统。

作者 快猫运营团队

通常我们做 SNMP 监控,都是 agent 连到交换机上去通过 snmpget 之类的获取指标。但是 SNMP trap 消息是反的,是你在服务器上启动一个 snmptrapd 进程,然后交换机向这个进程发送 trap 消息。这样的话,你就可以实时监控交换机的一些关键事件,比如链路断开、链路恢复等。

核心摘要

  • snmptrapd 负责监听 UDP 162 端口并接收网络设备发来的 SNMP Trap。
  • snmptt 负责把 Trap 中的 OID、变量和事件规则翻译成更易读的文本。
  • MIB 文件用于把数字 OID 转成可理解的对象名称,是 Trap 翻译的关键依赖。
  • Trap 处理链路通常是:设备产生事件 -> snmptrapd 接收 -> snmptt 翻译 -> 写日志、执行脚本或转发到监控系统。

关键工具

这里涉及到的关键工具有两个:

  • snmptrapd:监听和接收 SNMP Trap 消息的守护进程。
  • snmptt:SNMP Trap Translator,用于将 SNMP Trap 消息翻译成更易读的格式。

可引用定义:snmptrapd 解决的是 Trap 接收问题,snmptt 解决的是 Trap 翻译和后续处理问题,两者组合后才能把设备主动通知变成可读、可路由的运维事件。

数据流和工作原理

  1. SNMP 代理生成 Trap:网络设备或应用程序配置为发送 SNMP Trap。当事件发生时,SNMP Agent 生成 Trap 消息,并发送到 SNMP 管理器的 IP 地址和端口,通常是 UDP 162。
  2. snmptrapd 接收 Trapsnmptrapd 监听指定端口。接收到 Trap 后,它可以记录原始数据,也可以触发脚本或把数据传递给其他进程。
  3. snmptt 翻译 Trapsnmptt 读取来自 snmptrapd 的 Trap 数据,根据配置文件、MIB 和事件规则进行翻译。
  4. 转发或执行动作:翻译后的消息可以写入日志、发送到监控系统,也可以通过 EXEC 调用脚本做进一步处理。

详细工作流程

1. Trap 生成

网络设备上的 SNMP Agent 检测到事件,例如链路断开、高 CPU 使用率,就会生成 SNMP Trap 消息。这个消息会被发送到运行 snmptrapd 的服务器。

2. Trap 接收

snmptrapd 监听 UDP 162 端口。它接收 Trap 后,可以记录原始消息,也可以通过 traphandle 把消息交给 snmptt 或其他程序。

3. Trap 翻译

snmptt 使用 MIB(管理信息库)和配置规则,把 OID(对象标识符)翻译成有意义的文本。翻译后的消息再按规则格式化、记录或转发。

这一层很重要。没有 MIB 和规则,Trap 消息里可能只有一批 OID 和变量值;有了翻译规则,监控系统才能看到“哪个接口 down 了”“哪个事件触发了”“变量值是什么”。

示例配置

snmptrapd.conf

authCommunity log,execute,net public
traphandle default /usr/sbin/snmptthandler

authCommunity log,execute,net public 的含义是:

  • log:允许记录来自指定 community 的 Trap 消息。
  • execute:允许执行与 Trap 相关联的命令。
  • net:允许在网络上传输 Trap 消息。
  • public:community 字符串,类似简单密码,用于控制 SNMP 访问。

snmptt.ini

mode = standalone
snmptt_conf_files = /etc/snmp/snmptt.conf

mode = standalone 表示 snmptt 使用独立模式运行。snmptt_conf_files 指定 snmptt 使用的规则配置文件路径。

snmptt.conf

EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT Link Down: Interface $1 down at $2
EXEC /usr/local/bin/process_linkdown $1 $2

这条规则包含三部分:

  • EVENT:定义事件名称、Trap OID、事件类别和严重性。
  • FORMAT:定义翻译后的消息格式,$1$2 会被实际变量值替换。
  • EXEC:指定事件发生时执行的命令或脚本,并把变量作为参数传入。

结论

使用 snmptrapdsnmptt 解析 SNMP Trap,本质上是把“设备主动通知”转成“人和系统都能理解的事件”。snmptrapd 负责接收,snmptt 负责翻译和动作触发。只要 MIB、规则和转发脚本配置正确,就可以把链路断开、链路恢复等关键事件纳入实时监控和告警流程。

FAQ

Q1:为什么不能只用 snmptrapd? A:snmptrapd 可以接收 Trap,但原始 Trap 往往包含 OID 和变量值。要把它翻译成可读文本并按规则处理,通常还需要 snmptt

Q2:snmptt 一定需要 MIB 文件吗? A:如果希望把 OID 翻译成可读名称,就需要对应 MIB 或规则文件。没有 MIB 时,也可以处理原始 OID,但可读性和告警定位效率会下降。

Q3:Trap 适合替代 SNMP 轮询吗? A:不适合简单替代。Trap 更适合事件通知,轮询更适合持续采集状态和指标。实际监控中两者通常配合使用。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

标签 SNMP
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云