概述
在使用zabbix监控网内设备时,有些oid节点不允许使用get方式进行获取,只能通过trap进行获取。
过程
配置zabbix服务器支持snmptrap
编辑zabbix-server.conf
在以下块添加StartSNMPTrapper及SNMPTrapperFile内容。
### Option: StartSNMPTrapper
# If 1, SNMP trapper process is started.
#
# Mandatory: no
# Range: 0-1
# Default:
# StartSNMPTrapper=0
StartSNMPTrapper=1
SNMPTrapperFile=/var/log/zabbix/snmptraps/snmptraps.log
下载trap处理脚本
根据实际的zabbix版本,下载对应的zabbix_trap_handler.sh文件。
https://www.zabbix.com/documentation/current/zh/manual/config/items/itemtypes/snmptrap
curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/7.4/templates/scripts/snmptraps/zabbix_trap_handler.sh
配置日志存储路径
编辑/usr/sbin/zabbix_trap_handler.sh文件,修改路径为zabbix-server配置的SNMPTrapperFile
#ZABBIX_TRAPS_FILE="${ZABBIX_USER_HOME_DIR}/snmptraps/snmptraps.log"
ZABBIX_TRAPS_FILE="/var/log/zabbix/snmptraps/snmptraps.log"
添加执行权限
chmod +x /usr/sbin/zabbix_trap_handler.sh
创建trap日志存储目录
根据zabbix-server配置的SNMPTrapperFile路径创建目录。
mkdir -p /var/log/zabbix/snmptraps/
配置snmptrapd.conf文件
路径为:/etc/snmp/snmptrapd.conf
增加以下内容,让snmp日志通过zabbix_trap_handler.sh脚本进行处理。
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh
配置trap的团体名称,客户端通过团体名进行访问。
authCommunity log,execute,net xiaola.local
最终配置文件如下:
[root@localhost ~]# cat /etc/snmp/snmptrapd.conf
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity log,execute,net public
authCommunity log,execute,net xiaola.local
# traphandle SNMPv2-MIB::coldStart /usr/bin/bin/my_great_script cold
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh
启动对应服务
systemctl enable snmptrapd
systemctl start snmptrapd
systemctl restart zabbix-server
查看端口是否开放
[root@localhost ~]# ss -unlp | grep 162
UNCONN 0 0 0.0.0.0:162 0.0.0.0:* users:(("snmptrapd",pid=4150731,fd=7))
[root@localhost ~]#
防火墙放行
firewall-cmd --zone=public --add-port=162/udp --permanent
firewall-cmd --reload
配置网络设备
此处以华为防火墙USG 6000F-S115为例,不同设备的命令不一样,可以根据实际情况进行调整
snmp-agent trap enable
snmp-agent target-host trap address udp-domain 192.168.100.251 params securityname xiaola.local v2c
zabbix添加网络设备
可以通过zabbix自带模板(Network Generic Device by SNMP)添加网络设备,此模板默认含有SNMP traps (fallback)监控项,可以接收所有的traps信息。


traps信息推送查看
以上配置完成后,当设备发生一个trap事件后,会自动向zabbix服务器推送。
可以通过以下几个方式来看是否接收到设备发上来的消息。
在服务器上通过查看snmptraps.log来查看
tail -f /var/log/zabbix/snmptraps/snmptraps.log
SNMPv2-SMI::enterprises.2011.5.25.212.1.6.2.0 = "0#flash:/logfile/pads/pads_0_20260519104839.pads.zip"
2026-06-29T14:52:06+0800 ZBXTRAP 192.168.241.1
UDP: [192.168.241.1]:65232->[192.168.100.251]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 1:7:30:54.08
SNMPv2-MIB::snmpTrapOID.0 = SNMPv2-SMI::enterprises.2011.5.25.207.2.2
SNMPv2-SMI::enterprises.2011.5.25.207.1.2.1.1.2.34 = "admin"
SNMPv2-SMI::enterprises.2011.5.25.207.1.2.1.1.3.34 = "192.168.100.251"
SNMPv2-SMI::enterprises.2011.5.25.207.1.2.1.1.4.34 = "VTY0"
SNMPv2-SMI::enterprises.2011.5.25.207.1.2.1.1.5.34 = "aaa"
SNMPv2-SMI::enterprises.2011.5.25.207.1.2.1.1.6.34 = "_public_"
在zabbix服务器查看对应设备的SNMP traps (fallback)最新数据。

在zabbix上面可以看到最新数据,代表所有的数据都已经打通。
配置健康检查监控
官方信息
通过官方mib查询,得知以下信息:


防火墙添加监控实例

当配置完成,健康检查up后,zabbix服务器收到信息如下:
2026-06-29T15:14:28+0800 ZBXTRAP 192.168.241.1
UDP: [192.168.241.1]:65232->[192.168.100.251]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 1:7:53:06.32
SNMPv2-MIB::snmpTrapOID.0 = SNMPv2-SMI::enterprises.2011.6.122.68.2.1
SNMPv2-SMI::enterprises.2011.6.122.68.1.1.1.0 = "test"
SNMPv2-SMI::enterprises.2011.6.122.68.1.1.2.0 = "up"
模拟健康检查down后,zabbix服务器收到的信息如下:
2026-06-29T14:18:50+0800 ZBXTRAP 192.168.241.1
UDP: [192.168.241.1]:65232->[192.168.100.251]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 1:6:57:35.32
SNMPv2-MIB::snmpTrapOID.0 = SNMPv2-SMI::enterprises.2011.6.122.68.2.2
SNMPv2-SMI::enterprises.2011.6.122.68.1.1.1.0 = "test"
SNMPv2-SMI::enterprises.2011.6.122.68.1.1.2.0 = "down"
根据以上内容,可以创建针对性的监控项及触发器进行告警。
监控项
根据以上信息,可以创建两个监控项分别记录实例名称和状态。


通过以上snmptrap键值获取到的数据为整段匹配的文本,如下图:

需要使用预处理来进行格式化,得到想要的数据。

实例名称预处理:
// 输入:完整的 trap 消息(字符串),由 Zabbix 自动传入
var trap = value;
var nameMatch = trap.match(/SNMPv2-SMI::enterprises\.2011\.6\.122\.68\.1\.1\.1\.0 = "([^"]+)"/);
return nameMatch[1];
实例状态预处理:
// 输入:完整的 trap 消息(字符串),由 Zabbix 自动传入
var trap = value;
var statusMatch = trap.match(/SNMPv2-SMI::enterprises\.2011\.6\.122\.68\.1\.1\.2\.0 = "([^"]+)"/);
return statusMatch[1];
最终数据:

触发器

评论区