接收SNMP trap与查询启用SNMP的设备相反。
在这种情况下,信息发送自启用SNMP的设备并由Zabbix收集或"trapped"。
通常在某些条件更改时发送trap,并且代理通过端口162连接到服务器(相反的,代理端的161端口是用于查询代理的)。 使用trap可以检测在查询间隔期间发生的一些可能被查询数据遗漏的短期问题。
在Zabbix中接收SNMP trap旨在使用snmptrapd和内置机制之一来传递trap到Zabbix - 一个perl脚本或SNMPTT。
接收trap的工作流程:
在前端页面中配置此监控项类型的以下字段:
在 配置→主机 中,在主机接口字段中设置具有正确IP或DNS地址的SNMP接口。将每个收到的trap的地址与所有SNMP接口的IP和DNS地址进行比较,以查找相应的主机。
在Key字段中使用一个SNMP trap Key:
Key | ||
---|---|---|
描述 返 | 值 注释 | |
snmptrap[regexp] | ||
捕获与regexp中指定的正则表达式匹配的所有SNMP trap。如果regexp未指定,则捕获任何trap。 SNMP trap 该监控项只能用于SNMP接口 |
<此监控项从Zabbix 2.0.0.开始支持 注意: 从Zabbix 2.0.5开始,该监控项的参数支持用户宏和全局正则表达式。 |
|
snmptrap.fallback | ||
捕获未被该接口的任何snmptrap[]监控项捕获的所有SNMP trap。 SNMP trap 该监控项只能 | 于SNMP接口。 |
<该监控项从Zabbix 2.0.0.以后支持 |
目前不支持多行正则表达式匹配。
将要解析的时间戳的信息类型设置为'Log'。 请注意,其它格式(如“数字”)也是可以接受的,但可能需要自定义trap处理程序。
要使SNMP trap监控工作,必须首先正确设置。
要读取trap,必须将Zabbix服务器或代理服务器配置为启动SNMP trap进程,并指向由SNMPTT或perl trap接收器写入的trap文件。为此,请编辑配置文件(zabbix_server.conf 或者 zabbix_proxy.conf):
<note warning>如果使用systemd参数PrivateTmp,则该文件不太可能在/tmp下使用。 :::
首先,snmptrapd应该配置为使用SNMPTT。
<note tip>为了获得最佳性能,应将SNMPTT配置为使用snmptthandler-embedded的守护进程,并将trap传递给它。有关SNMPTT的配置,请查看其主页上的说明:
http://snmptt.sourceforge.net/docs/snmptt.shtml :::
当SNMPTT配置为接收trap时,配置SNMPTT记录trap:
现在格式化Zabbix的trap来识别它们(编辑snmptt.conf):
不要使用未知的trap - Zabbix将无法识别它们。未知trap可以通过在snmptt.conf中定义一个常规事件来处理:
EVENT general .* "General event" Normal
要求:Perl,Net-SNMP使用--enable-embedded-perl编译(默认情况下从Net-SNMP 5.4支持)
Perl trap接收器(查找misc/snmptrap/zabbix_trap_receiver.pl)可以直接从snmptrapd将trap传递给Zabbix服务器。配置过程:
如果没有引用脚本名称,snmptrapd将拒绝启动消息,类似:
Regexp modifiers "/l" and "/a" are mutually exclusive at (eval 2) line 1, at end of line
Regexp modifier "/l" may not appear twice at (eval 2) line 1, at end of line
net snmp代理不支持带有SNMPv3/USM的AES256。
SNMP trap 格式
所有定制的perl trap接收器和SNMPTT trap配置必须按以下方式格式化trap: [timestamp] [the trap, part 1] ZBXTRAP [address] [the trap, part 2], 说明
注意,“ZBXTRAP”和“[address]”将在处理过程中从消息中删除。如果trap格式化为其它方式,Zabbix也许能意外的解析trap。
trap示例:
11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" localhost - ZBXTRAP 192.168.1.1 Link down on interface 2. Admin state: 1. Operational state: 2
This will result in the following trap for SNMP interface with IP=192.168.1.1:
11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" localhost - Link down on interface 2. Admin state: 1.
大文件支持
Zabbix为SNMP trap文件提供了“大文件支持”。Zabbix可以读取的最大文件大小为2^63(8 EiB)。请注意,文件系统可能会对文件大小施加下限。
日志轮换
Zabbix不提供任何日志轮换系统(它应由用户处理)。 日志轮换应该首先重命名旧文件,然后才能将其删除,以免丢失trap:
文件系统
由于Trap文件的执行,Zabbix需要文件系统支持inode来区分文件(该信息由stat()调用获取)。
本示例使用snmptrapd + SNMPTT将陷阱传递给Zabbix服务器。设置:
结果如下:
<note tip>这个简单的例子使用SNMPTT作为traphandle。为了在生产系统上获得更好的性能,请使用嵌入式Perl将trap从snmptrapd传递到SNMPTT或直接传递到Zabbix。 :::
Zabbix does not provide any log rotation system - that should be handled by the user. The log rotation should first rename the old file and only later delete it so that no traps are lost:
Because of the trap file implementation, Zabbix needs the file system to support inodes to differentiate files (the information is acquired by a stat() call).
This example uses snmptrapd + SNMPTT to pass traps to Zabbix server. Setup:
This results in:
This simple example uses SNMPTT as traphandle. For better performance on production systems, use embedded Perl to pass traps from snmptrapd to SNMPTT or directly to Zabbix.