安装环境

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

centos8 snmp centos8 snmp安装包_zabbix

这样一来就说明我们的初步配置是成功的

然后我们去到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陷阱的服务器可能比较困难,所以我会使用本地抛出陷阱的方法。

创建主机和项目

centos8 snmp centos8 snmp安装包_运维_02


centos8 snmp centos8 snmp安装包_zabbix_03


centos8 snmp centos8 snmp安装包_运维_04

创建好之后,我们再回到主机测试

centos8 snmp centos8 snmp安装包_zabbix_05

snmptrap -v 2c -c public 127.0.0.1 '' .1.3.6.1.6.3.1.1.5.4

然后我们回到zabbix的最新数据查看

centos8 snmp centos8 snmp安装包_运维_06


centos8 snmp centos8 snmp安装包_zabbix_07

如果有其他设备做现场模拟的话,我们可以在zabbix前端添加设备

首先创建主机,

centos8 snmp centos8 snmp安装包_zabbix_08

然后添加这个主机的监控项

centos8 snmp centos8 snmp安装包_zabbix_09

这里的内容和之前的步骤一样,添加好之后

我们去模拟发送trap

centos8 snmp centos8 snmp安装包_运维_10


centos8 snmp centos8 snmp安装包_zabbix_11


然后就可以检测到了,之前因为是创建单机版的,所以一直都是内部发送接收,忽略了一个问题,就是我们的zabbix前端要检测到这个发收信息,必须得创建发送trap的主机,并且在这个主机上面创建监控项,这样我们才可以监控到这个主机是否有发送trap到我们要被trap的主机上面,不然一直在被trap的主机上面创建监控项,只能被监控到自己发送给自己的trap,而无法监控到其他的交换机发送trap,因为我们的后端是可以获取到trap的,而前端无法获取,那么问题就是出在前端上面了。