使用 snmptrapd 和 snmptt 解析 SNMP Trap
快猫运营团队
2024-12-27 17:27:25
通常我们做 SNMP 监控,都是 agent 连到交换机上去通过 snmpget 之类的获取指标。但是 SNMP trap 消息是反的,是你在服务器上启动一个 snmptrapd 进程,然后交换机向这个进程发送 trap 消息。这样的话,你就可以实时监控交换机的一些关键事件,比如链路断开、链路恢复等。
这里涉及到的关键工具有两个:
- snmptrapd:监听和接收 SNMP Trap 消息的守护进程。
- snmptt:SNMP Trap Translator,用于将 SNMP Trap 消息翻译成更易读的格式。
好的,下面是使用 snmptrapd
和 snmptt
处理 SNMP Trap 消息的原理和数据流:
数据流和工作原理:
- SNMP 代理(Agent):网络设备或应用程序配置为发送 SNMP Trap。当事件发生时,SNMP 代理生成 Trap 消息并发送到 SNMP 管理器的 IP 地址和端口(通常是 UDP 162)。
- snmptrapd:这是 SNMP 管理器的一部分,监听指定端口(默认是 UDP 162)的传入 Trap 消息。当接收到 Trap 时,它会记录原始 Trap 数据并可以将数据传递给其他程序进行进一步处理。
- snmptt:读取来自
snmptrapd
的 Trap 消息,将其翻译成更易读的格式,并根据预定义或自定义规则将翻译后的消息转发到指定的目的地(例如日志文件或监控系统)。
详细工作流程:
-
Trap 生成:
- 网络设备上的 SNMP 代理检测到事件(例如链路断开、高 CPU 使用率)并生成 SNMP Trap 消息。
- 这些消息被发送到运行
snmptrapd
的 SNMP 管理器的 IP 地址。
-
Trap 接收(由 snmptrapd 处理):
snmptrapd
监听 UDP 端口 162 的传入 Trap 消息。- 在接收到 Trap 后,
snmptrapd
记录消息(通常是原始格式),并可以触发脚本或将数据传递给其他进程,例如snmptt
。
-
Trap 翻译(由 snmptt 处理):
snmptt
从snmptrapd
读取 Trap 数据。配置文件定义了如何翻译 Trap。snmptt
使用 MIB(管理信息库)文件将 OID(对象标识符)翻译成有意义的文本。- 翻译后的消息根据
snmptt
配置中的规则进行格式化,可以记录日志、发送到监控系统或进一步处理。
示例配置:
- 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 代理的访问。这里设置为 “public”。
-
snmptt.ini:
mode = standalone
snmptt_conf_files = /etc/snmp/snmptt.conf
-
mode = standalone
:- 指定
snmptt
的运行模式为独立模式(standalone)。在这种模式下,snmptt
独立运行,而不是作为snmptrapd
的一个扩展。
- 指定
-
snmptt_conf_files = /etc/snmp/snmptt.conf
:- 指定了
snmptt
使用的配置文件路径。在这个例子中,/etc/snmp/snmptt.conf
是主要的配置文件路径。
- 指定了
-
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 linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
:- EVENT: 定义一个事件规则。
- linkDown: 事件的名称,用于标识特定的 Trap。
- .1.3.6.1.6.3.1.1.5.3: 这是 Trap 的 OID(对象标识符),用于唯一标识这个特定的 Trap 类型(在这个例子中是链路断开事件)。
- “Status Events”: 事件的类别或描述。
- Normal: 事件的严重性级别。
-
FORMAT Link Down: Interface $1 down at $2
:- FORMAT: 定义翻译后的消息格式。
- Link Down: Interface $1 down at $2: 翻译后的消息内容。
$1
和$2
是变量,占位符将被实际值替换。
-
EXEC /usr/local/bin/process_linkdown $1 $2
:- EXEC: 指定当这个事件发生时,执行的命令或脚本。
- /usr/local/bin/process_linkdown $1 $2: 要执行的命令或脚本路径,并传递相关参数
$1
和$2
。
总结:
- snmptrapd 接收来自 SNMP 代理的 Trap。
- snmptrapd 记录原始 Trap 并将其传递给 snmptt。
- snmptt 使用 MIB 文件和配置规则翻译 Trap。
- snmptt 记录翻译后的消息并/或将其转发到其他系统进行监控和告警。