接收SNMP trap与查询支持SNMP的设备是相反的操作。
在这种情况下,信息从支持SNMP的设备发送,并由Zabbix收集或"捕获"。
通常,trap会在某些条件变更时发送,agent会连接到服务器的162端口(与agent端用于queries的161端口相对)。使用trap可以检测到在query间隔期间发生的一些短暂问题,这些问题可能会被query数据遗漏。
Zabbix中接收SNMP trap的功能设计用于与snmptrapd配合使用,并通过以下机制之一将trap传递给Zabbix——可以是Bash或Perl脚本,也可以是SNMPTT。
在配置Zabbix后设置trap监控的最简单方法是使用Bash脚本解决方案,因为现代发行版中通常缺少Perl和SNMPTT,并且需要更复杂的配置。然而,此解决方案使用配置为traphandle
的脚本。对于生产系统更好的性能,建议使用嵌入式Perl解决方案(可以是带有do perl
选项的脚本或SNMPTT)。
接收trap的工作流程:
snmptrapd
接收一个trapsnmptrapd
将trap传递给接收脚本(Bash、Perl)或SNMPTTsnmptrap[regexp]
中的正则表达式进行比较。trap会被设置为所有匹配监控项的值。如果未找到匹配的监控项且存在snmptrap.fallback
监控项,则trap会被设置为该值。此监控项类型需要以下前端配置。
1. 为您的主机创建SNMP接口
2. 配置监控项
键 | ||
---|---|---|
描述 | 返回值 | 注释 |
snmptrap[regexp] | ||
捕获与regexp中指定的regular expression匹配的所有SNMP陷阱。如果未指定regexp,则捕获任何陷阱。 | SNMP陷阱 | 此监控项只能为SNMP接口设置。 此监控项键的参数支持用户宏和全局正则表达式。 |
snmptrap.fallback | ||
捕获未被该接口的任何snmptrap[] 监控项捕获的所有SNMP陷阱。 | SNMP陷阱 | 此监控项只能为SNMP接口设置。 |
目前不支持多行正则表达式匹配。
要读取SNMP陷阱,必须配置Zabbix server或proxy以启动SNMP trapper进程,并指向由SNMPTT或Bash/Perl陷阱接收器写入的陷阱file。为此,请编辑配置文件file (zabbix_server.conf或 zabbix_proxy.conf):
如果使用了systemd参数 PrivateTmp ,此file在/tmp目录下可能无法正常工作。
要求:仅需snmptrapd。
可以使用Bash陷阱接收器script 将陷阱直接从snmptrapd传递给Zabbix server。要配置它,请将traphandle
选项添加到snmptrapd配置文件file中(snmptrapd.conf
), 参见example。
需求: Perl, 已编译启用--enable-embedded-perl的Net-SNMP (自Net-SNMP 5.4起默认启用)
可通过Perl trap接收器(参考misc/snmptrap/zabbix_trap_receiver.pl)将陷阱直接从snmptrapd传递给Zabbix server。配置步骤如下:
将Perl脚本添加至snmptrapd的file配置项
(snmptrapd.conf), e.g.:
若脚本名称未加引号,snmptrapd将拒绝启动并显示类似以下信息:
首先,需要配置snmptrapd以使用SNMPTT。
为获得最佳性能,应将SNMPTT配置为守护进程,使用snmptthandler-embedded来传递陷阱。具体配置方法参见configuring SNMPTT。
当SNMPTT配置为接收陷阱后,需配置snmptt.ini
:
注意:"net-snmp-perl"包在RHEL 8.0-8.2版本中已被移除,在RHEL 8.3中重新加入。更多信息请参阅known issues。
现在为Zabbix识别格式化陷阱(编辑snmptt.conf文件):
每个FORMAT语句应以"ZBXTRAP [address]"开头,其中
[address] will be compared to IP and DNS addresses of SNMP interfaces on Zabbix. E.g.:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
所有自定义的Perl trap接收器和SNMPTT trap配置必须 按照以下格式处理trap信息:
其中
请注意"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
这将为IP=192.168.1.1的SNMP接口生成如下trap:
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. Operational state: 2
Zabbix对SNMP trapper文件具有较大的file支持。Zabbix可读取的最大file大小为2^63(8 EiB)。需注意文件系统可能对file大小施加更低的限制。
Zabbix不提供任何日志轮转系统 - 这应由用户自行处理。日志轮转应首先重命名旧的file文件, 然后才delete它,以确保不会丢失任何陷阱:
由于陷阱file的实现方式,Zabbix需要file系统支持inode来区分文件(该信息通过stat()调用获取)。
本示例使用snmptrapd和Bash接收器脚本将陷阱传递给Zabbix server.
设置步骤:
配置Zabbix启动SNMP trapper并
set the trap file. Add to zabbix_server.conf
:
zabbix_server.conf
:
/usr/sbin/zabbix_trap_handler.sh
:curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/6.0/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh
如需使用默认值,请先create父目录:
snmtrapd.conf
(参考example)Create一个SNMP 监控项测试(注意初始configuration requirements):
Type: SNMP trap
Type of information: Log Host interface: SNMP 127.0.0.1
Key: snmptrap["linkUp"]
Log time format: yyyyMMdd.hhmmss
snmptrap["linkUp"]
日志时间格式: yyyyMMdd.hhmmss
接下来我们将为选定的SNMP协议version配置snmptrapd
,并使用
send test traps using the snmptrap
utility.
snmptrap
工具.
SNMPv1和SNMPv2协议依赖"community string"认证. 以下示例中 我们将使用"secret"作为community string. 该值必须在SNMP trap发送端设置相同.
请注意,虽然SNMPv2在生产环境中仍广泛使用,但它不提供 任何加密和真正的发送方认证. 数据以明文发送,因此 这些协议版本应仅在私有网络等安全环境中使用, 切勿在任何公共或第三方网络中使用.
SNMP version 1现在基本不再使用,因为它不支持64位计数器且 被视为遗留协议.
要启用接收SNMPv1或SNMPv2陷阱,请将以下行添加到snmptrapd.conf
. 将"secret"替换为SNMP trap发送端配置的community string:
接下来我们可以使用snmptrap
发送测试陷阱. 本例中使用常见的"link up" OID:
SNMPv3解决了SNMPv1/v2的安全问题,提供认证和加密. 可以使用MD5或多种SHA认证方法,以及DES/多种AES作为加密算法.
要启用接收SNMPv3,请将以下行添加到snmptrapd.conf
:
请注意"execute"关键字,允许为该用户安全模型execute脚本.
snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0
如需使用AES192或AES256等强加密方法,请使用 version 5.8及以上版本的net-snmp. 可能需要使用configure
选项重新编译: --enable-blumenthal-aes
. 旧版net-snmp不支持AES192/AES256. 另见: Strong Authentication or Encryption.
在两个示例中,您都将在/var/lib/zabbix/snmptraps/snmptraps.log
中看到类似行:
20220805.102235 ZBXTRAP 127.0.0.1
UDP: [127.0.0.1]:35736->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
Zabbix中的监控项值将为:
2022-08-05 10:22:35 2022-08-05 10:22:33
20220805.102233 UDP: [127.0.0.1]:35736->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0