以SNMP trap方式监控设备是指当被监控设备(支持SNMP的)发生障碍时,通多162端口将障碍信息发送到采集机上的一种主动式监控方法。本文以zabbix server作为采集机,采集trap消息。zabbix使用perl脚本或SNMPTT对接收到的trap消息进行格式化并报错。
zabbix处理trap消息的流程如下:
- snmptrapd 收到trap
- snmptrapd将trap传递给SNMPTT或调用Perl接收器处理
- SNMPTT或Perl trap接收器解析,格式化并将trap写入文件
- Zabbix SNMP trapper读取并解析trap文件
- 对于每个trap,Zabbix找出所有主机IP/DNS与trap消息中接收地址相匹配的所有“SNMP trap”监控项。
- 对于每个找到的监控项,将trap与监控项“snmptrap[regexp]”中的正则表达式进行匹配,将匹配到的trap设为该监控项的值。如果没有找到匹配的监控项且存在“snmptrap.fallback”监控项,则将trap设置为“snmptrap.fallback”的值。
- 如果trap未设置为任何监控项的值,Zabbix默认记录不匹配的trap。(通过Administration → General → Other中的“Log unmatched SNMP traps”配置。)
配置过程如下:
1、拷贝zabbix源码中的zabbix_trap_receiver.pl到/usr/bin目录下
$ cp zabbix-3.4.14/misc/snmptrap/zabbix_trap_receiver.pl
$ chmod +x zabbix_trap_receiver.pl
2、配置snmptrapd.conf
$ vi /etc/snmp/snmptrapd.conf
添加如下内容:
authCommunity execute storage_public
authCommunity execute emc_storage
authCommunity execute hds_storage
perl do "/usr/bin/zabbix_trap_receiver.pl";
表示snmptrapd将接收coumunity值为storage_public或emc_storage或hds_storage的trap消息,并发送给脚本zabbix_trap_receiver.pl进行处理。
此处配置的community值有三种方式获得:
如果设备snmp配置页面可自定义,则填写自定义的值;
如果设备snmp配置页面无法自定义,但可发送测试trap消息,则发送测试消息并在采集机端进行抓包以获得community的值。例如:
# tcpdump -i eth1 host 172.20.8.143 and port 162
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
16:18:48.278063 IP 172.20.8.143.44685 > 192.168.128.207.snmptrap: C=storage_public V2Trap(342) system.sysUpTime.0=118770274 S:1.1.4.1.0=E:34774.4.1.4.2 E:34774.4.1.3.3.1.0=1 E:34774.4.1.3.3.2.0=2305843009213689856.004094 E:34774.4.1.3.3.3.0=2 E:34774.4.1.3.3.4.0=0 E:34774.4.1.3.3.5.0=1544429531 E:34774.4.1.3.3.6.0=0 E:34774.4.1.3.3.7.0="This alarm just for testing.Please ignore it." E:34774.4.1.3.3.8.0=4294967294 E:34774.4.1.3.3.9.0=07_e2_0c_0a_10_0c_0b_00 E:34774.4.1.3.3.10.0=07_b2_01_01_08_00_00_00
16:18:48.279716 IP 172.20.8.143.34757 > 192.168.128.207.snmptrap: C=storage_public V2Trap(487) system.sysUpTime.0=118770274 S:1.1.4.1.0=E:2011.2.91.10.2.1.0.1 E:2011.2.91.10.3.1.1.1.0="Array" E:2011.2.91.10.3.1.1.2.0="[S5900-M100, 210235G79Y10E7000001] None" E:2011.2.91.10.3.1.1.3.0="This alarm just for testing.Please ignore it." E:2011.2.91.10.3.1.1.4.0="Trap test alarm" E:2011.2.91.10.3.1.1.5.0=2 E:2011.2.91.10.3.1.1.6.0=4 E:2011.2.91.10.3.1.1.7.0=507010005 E:2011.2.91.10.3.1.1.8.0=07_e2_0c_0a_10_0c_0b_00 E:2011.2.91.10.3.1.1.9.0=0 E:2011.2.91.10.3.1.1.10.0="This alarm just for testing.Please ignore it." E:2011.2.91.10.3.1.1.11.0=1 E:2011.2.91.10.3.1.1.12.0=2305843009213689856.004094
在抓取的包中找到字段“C=storage_public V2Trap”,可知设备的snmp community值为storage_public,snmp版本为v2。
如果无法通过上述方法获得community值,则咨询设备厂家。
3、配置zabbix_trap_receiver.pl
# vi /usr/bin/zabbix_trap_reveiver.pl
设置字段或保持默认值
$SNMPTrapperFile = '/home/zabbix_traps.tmp';
4、配置zabbix_server.conf
# vi /etc/zabbix/zabbix_server.conf
设置字段
SNMPTrapperFile=/home/zabbix_traps.tmp (必须与步骤三中一致)
StartSNMPTrapper=1
5、重启zabbix-server,snmp服务应用新配置
# systemctl restart snmpd snmptrapd zabbix-server
6、zabbix web页面配置,新建模板,名称自定义,并为模板创建监控项,如下:
此处未指定正则表达式,表示捕获任何trap消息。
创建触发器,触发器表达式举例如下:
{template_snmptrap:snmptrap[“”].str(TRAP)}=1
表示trap消息中存在字符串“TRAP”则激发触发器。
创建监控主机并链接该模板完成zabbix端的配置。
7、在被监控的设备上配置snmp trap,Trap IP填写采集机地址,端口通常为162,snmp版本通常为2c。
至此,完成所有配置。