安装环境
centos8 zabbix5.2
安装SNMPtraps一共有两种办法:
- 使用snmptt
- 使用zabbix_trap_receiver.pl
前者很方便,因为它可以替换接收到的trap,并将其转换为易于阅读的消息,但是如果这个snmptt包是针对CentOS 8的,在EPEL上是不存在的,所以单独准备它很麻烦。
在后一种情况下,如果您安装了net-snmp-perl软件包及其相关的与perl相关的软件包,则可以使用它。
这次,我们将使用后者的zabbix_trap_receiver.pl。
此外,SNMP 版本为 v2,团体名称为“public”。
接收SNMP陷阱时的数据流
在 Zabbix 中,当接收到 SNMP 陷阱时,陷阱是通过 snmptrapd 接收的。
网络设备等产生的 Trap 由运行 Zabbix server 的服务器上启动的 snmptrapd 接收,并通过脚本将接收到的 Trap 输出到成型的日志文件中。
输出文件由 Zabbix 服务器的名为“snmp trapper”的进程读取,并作为 item 的值进行处理。
提前决定
在搭建环境之前,需要确定以下两个。
- 在哪里放置zabbix_trap_receiver.pl
- 在 snmptrapd 和 Zabbix 服务器之间调解的陷阱的日志文件名
前者是一个独特的脚本,不包含在包中,所以我们将它放在“/usr/local/bin/zabbix_trap_receiver.pl”中。
后者将是一个名为“/var/log/snmptrap/snmptrap.log”的日志文件。
第一步先安装zabbix,具体的话参考网上的教程
第二步安装接收SNMP陷阱所需的软件包
dnf install net-snmp net-snmp-utils net-snmp-perl
第三步,用于SNMP陷阱处理的脚本的放置和配置
# wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.7.tar.gz
# tar zxvf zabbix-5.0.7.tar.gz
# cp -p zabbix-5.0.7/misc/snmptrap/zabbix_trap_receiver.pl /usr/local/bin/
#然后在脚本文件中设置日志文件的路径。
# vi /usr/local/bin/zabbix_trap_receiver.pl
#要设置的内容如下。
#$SNMPTrapperFile = '/tmp/zabbix_traps.tmp'; (原始的)
$SNMPTrapperFile = '/var/log/snmptrap/snmptrap.log'; (改过之后的)
注释掉现有设置以设置您之前决定的日志文件名。
另外,赋予执行权限并创建日志输出目录。
# chmod +x /usr/local/bin/zabbix_trap_receiver.pl
# mkdir /var/log/snmptrap
第四步SNMPtrapd设置
接下来是snmptrapd的设置。
编辑配置文件 /etc/snmp/snmptrapd.conf。
# vi /etc/snmp/snmptrapd.conf
在 SNMPv2 中,如果团体名称为“public”,请在 /etc/snmp/snmptrapd.conf 中进行以下设置。
authCommunity log,execute,net public
perl do "/usr/local/bin/zabbix_trap_receiver.pl";
如果团体名不同或者zabbix_trap_receiver.pl所在的路径不同,请根据各个环境进行修改。
完成设置后,启动snmptrapd。
# systemctl start snmptrapd
# systemctl enable snmptrapd
如果启动失败
出现这个错误
Job for snmptrapd.service failed because the control process exited with error code. See "systemctl status snmptrapd.service" and "journalctl -xe" for details.
那么就把这个进程杀死就好了
netstat -nlp|grep 162
pkill -9 snmptrapd
现在您已经设置好了,让我们抛出一个 SNMP 陷阱来测试脚本是否运行。
当您指定 linkDown 的 OID 时就是这种情况。
# snmptrap -v 2c -c public 127.0.0.1 '' .1.3.6.1.6.3.1.1.5.3
然后我们再去我们的日志查看
cat/var/log/snmptrap/snmptrap.log
这样一来就说明我们的初步配置是成功的
然后我们去到zabbix进行配置
zabbix服务器设置
接下来,配置 Zabbix 服务器读取此日志。
# vi /etc/zabbix/zabbix_server.conf
插入以下设置进行设置。
StartSNMPTrapper=1
设置生效需要重启Zabbix服务器,重启即可。
systemctl restart zabbix-server
防火墙设置
在默认设置下,无法接收 SNMP 陷阱,因此请设置权限以使其可以接收。
# firewall-cmd --add-port=162/udp --zone=public --permanent
# firewall-cmd --reload
日志轮换
让我们也设置轮换,以便日志文件不会保持累积。
# vi /etc/logrotate.d/snmptrap
例如,可以考虑以下设置。
/var/log/snmptrap/snmptrap.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
}
请考虑将存储多长时间来设置轮换。
在zabbix中测试陷阱
让我们检查 Zabbix 服务器是否可以接收 SNMP 陷阱。
我发现很难从真实的网络设备中故意抛出陷阱,所以让我们使用来自Linux服务器的命令抛出陷阱,看看是否可以接收。
单独准备一个发送SNMP陷阱的服务器可能比较困难,所以我会使用本地抛出陷阱的方法。
创建主机和项目
创建好之后,我们再回到主机测试
snmptrap -v 2c -c public 127.0.0.1 '' .1.3.6.1.6.3.1.1.5.4
然后我们回到zabbix的最新数据查看
如果有其他设备做现场模拟的话,我们可以在zabbix前端添加设备
首先创建主机,
然后添加这个主机的监控项
这里的内容和之前的步骤一样,添加好之后
我们去模拟发送trap
然后就可以检测到了,之前因为是创建单机版的,所以一直都是内部发送接收,忽略了一个问题,就是我们的zabbix前端要检测到这个发收信息,必须得创建发送trap的主机,并且在这个主机上面创建监控项,这样我们才可以监控到这个主机是否有发送trap到我们要被trap的主机上面,不然一直在被trap的主机上面创建监控项,只能被监控到自己发送给自己的trap,而无法监控到其他的交换机发送trap,因为我们的后端是可以获取到trap的,而前端无法获取,那么问题就是出在前端上面了。