概述

SNMPTrap监控主要用于设备发生故障时的主动通知的监控
接收SNMP trap与查询启用SNMP的设备相反。

在这种情况下,信息发送自启用SNMP的设备并由Zabbix收集或“trapped”。

通常在某些条件更改时发送trap,并且代理通过端口162连接到服务器(相反的,代理端的161端口是用于查询代理的)。 使用trap可以检测在查询间隔期间发生的一些可能被查询数据遗漏的短期问题。

在Zabbix中接收SNMP trap旨在使用snmptrapd和内置机制之一来传递trap到Zabbix - 一个perl脚本或SNMPTT。

接收trap的工作流程:

1、snmptrapd 收到trap
2、snmptrapd将trap传递给SNMPTT或调用Perl trap接收器
3、SNMPTT或Perl trap接收器解析,格式化并将trap写入文件
4、Zabbix SNMP trap读取并解析trap文件
5、对于每个trap,Zabbix发现主机接口与接收的trap地址匹配的所有“SNMP trap”监控项。请注意,在匹配期间只使用主机接口中选定的“IP”或“DNS”。
6、对于每个找到的监控项,将trap与“snmptrap[regexp]”中的regexp进行比较。 trap设置为all匹配项的值。如果没有7、找到匹配的监控项,并且有一个“snmptrap.fallback”监控项,则将trap设置为该监控项的值。
8、如果trap未设置为任何监控项的值,Zabbix默认记录未匹配的trap。(通过管理 → 常规 → 其它中的“记录未匹配的SNMP trap(Log unmatched SNMP traps)”进行配置。)

流程图:

利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明
图中在测试机 M1 上启动 snmptrapd 进程,并且在 UDP 162 端口上监听 SNMP Trap 信息,一旦收到 Trap,snmptrapd 将所接收到的 Trap 信息内容打印到一个本地的文本文件中。 机器 M2 模拟发送 SNMP Trap 的设备,将调用 net-snmp 的命令行程序 snmptrap 发送一个 Trap。、

部署流程

1、配置 ZABBIX 服务器/代理服务器

要读取trap,必须将Zabbix服务器或代理服务器配置为启动SNMP trap进程,并指向由SNMPTT或perl trap接收器写入的trap文件,请编辑文件zabbix_server.conf 或者 zabbix_proxy.conf再重启进程
StartSNMPTrapper=1
SNMPTrapperFile=[TRAP FILE]
利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明
注意:一定要保证日志路径存在,不存在必须创建
重启zabbix_server进程

[root@localhost zabbix]#  systemctl restart zabbix-server

2、 配置zabbix_trap_receiver.pl脚本

在zabbix 服务器或者代理服务器上,复制源码目录中的Perl脚本到 /usr/bin目录下并赋予执行权限(注意:要将perl脚本中的日志路径要与zabbix_server.conf 中的SNMPTrapperFile保持一致)
再安装net-snmp及snmptt,命令如下:
<br/>cp find / -name zabbix_trap_receiver.pl /usr/bin

chmod a+x /usr/bin/zabbix_trap_receiver.pl

yum -y install net-snmp* snmptt
`
利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明
注意:如果最后snmptrapd启动失败,提示缺少/usr/share/snmp/snmp_perl_trapd.pl文件,原因是net-snmp相关的安装包安装太少,建议更换yum安装源。

3、配置SNMPTT

当SNMPTT配置为接收trap时,配置SNMPTT记录trap

将trap记录到Zabbix将读取的trap文件中,并设置时间格式(编辑snmptt.ini)

log_enable = 1
log_file = [TRAP FILE]
date_time_format = %H:%M:%S %Y/%m/%d

利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明

现在格式化Zabbix的trap来识别它们(编辑snmptt.conf)

EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $ar

利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明

4、配置snmptrapd

snmptrapd.conf - 添加SNMPTT作为trap处理程序(编辑snmptrapd.conf )

traphandle default snmptt

snmptrapd.conf - 新增snmptrap的认证版本及用户名称并放置前面的pel脚本(snmptrap V3配置方式有所不同,后面再阐述,先配置V1、V2 版本的)

authCommunity   log,execute,net public
perl do "/usr/bin/zabbix_trap_receiver.pl"

authCommunity log,execute,net public 表示只接收团体名(community)为 public 的 trap信息,可以写多行
利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明

修改后重启snmptrapd服务:

[root@localhost zabbix]# service snmptrapd restart
Restarting snmptrapd (via systemctl):                      [  OK  ]

测试trap信息是否正常

发送一条测试信息

[root@localhost zabbix]# snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.3' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.3 s "8834760"

查看snmptrapd状态,观察是否有数据传输

systemctl status snmptrapd

利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明

5.在zabbix服务器上配置监控主机,添加监控项。效果如图所示:

利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明

监控项:

名称:test

类型:SNMP trap

键值:snmptrap[IF-MIB::linkDown]

信息类型:日志

日志时间格式:hh:mm:sszyyyy/MM/dd
解析:

键值配置为snmptrap[IF-MIB::linkDown],可以接收设备发出的trap信息中带有“IF-MIB::linkDown”的信息。

利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明

查看监控主机的最新数据,验证实验结果。

在最新数据里选择被监控的主机,点击test的历史记录。
利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明

如果只想要冒号里的信息,可以在预处理中用正则表达式进行匹配

利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明


名称:正则表达式

参数:(\")(\d+\.\d+)(\")

输出:\2

解析:

第一个括号(\") ,表示获取该监控项最新数据里的第一个双引号,双引号属于特殊字符,所以前面还加上转义符\

第二个括号(\d+\.\d+),这里面的\都是转义符,表示一个任意字符前面和后面都是一串数字

三个括号连起来就表示了 取两个"和里面的一个任意字符前面和后面都是一串数字 的内容

输出\2表示 取完数据后 输出第二个括号里的正则取到的数据

修改完这些,就可以点击 更新 即可。

在最新数据里等待结果,结果如下:

利用ZABBIX的snmptrap V1 V2及V3方式进行监控详细实例部署说明

关于snmptrap V3配置不同:

配置SNMPv3 TRAP用户

由于发送TRAP的应用程序具有权威性,因此,在snmptrapd中创建的用户必须与发送陷阱的EngineID绑定。为此,您可以在snmptrapd.conf文件中创建如下一行:

 createUser -e  ENGINEID myuser SHA“我的身份验证通行证” AES“我的加密通行证”
在上一行中,需要设置以下内容:

引擎
将要发送陷阱的应用程序的EngineID。(见下文)
我的用户
将要发送陷阱的USM用户名。
SHA
身份验证类型(SHA或MD5,SHA更好)
“我的认证通行证”
认证密码短语,用于生成秘密认证密钥。如果包含空格,请用引号引起来。
AES
使用的加密类型(AES或DES,AES更好)
“我的加密通行证”
用于生成秘密加密密钥的加密密码短语。如果包含空格,请用引号引起来。如果不选择它,它将被设置为与身份验证密码相同的密码。
新增
createUser -e 0x8000000001020304 traptest SHA mypassword  AES
authuser log traptest
命令作用同snmpd.conf一样,-e 0x8000000001020304是engineID,是snmpv3的新概念,在连接的时候会自动发现,每对manager和agent都有唯一的engineID,用MIB-Browser连接后会有一个response

重启进程

[root@localhost zabbix]# service snmptrapd restart
Restarting snmptrapd (via systemctl):                      [  OK  ]

[root@localhost ~]# snmptrap -v 3 -n "" -a SHA -A 'mypassword' -x AES -X 'mypassword' -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0
[root@localhost ~]# systemctl status snmptrapd
● snmptrapd.service - Simple Network Management Protocol (SNMP) Trap Daemon.
   Loaded: loaded (/usr/lib/systemd/system/snmptrapd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-09-13 19:17:35 PDT; 10s ago
 Main PID: 61991 (snmptrapd)
    Tasks: 1
   CGroup: /system.slice/snmptrapd.service
           └─61991 /usr/sbin/snmptrapd -Lsd -f

Sep 13 19:17:34 localhost.localdomain systemd[1]: Stopped Simple Network Management Protocol (SNMP) Trap Daemon..
Sep 13 19:17:34 localhost.localdomain systemd[1]: Starting Simple Network Management Protocol (SNMP) Trap Daemon....
Sep 13 19:17:35 localhost.localdomain snmptrapd[61991]: NET-SNMP version 5.7.2
Sep 13 19:17:35 localhost.localdomain systemd[1]: Started Simple Network Management Protocol (SNMP) Trap Daemon..
Sep 13 19:17:43 localhost.localdomain snmptrapd[61991]: 2020-09-13 19:17:43 localhost [UDP: [127.0.0.1]:58825->[127.0.0.1]:162]:
                                                        DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (0) 0:00:00.00        SNMPv2-MIB::snmpTrapOID.0 = OID: IF-MIB::linkUp.0