zabbix接收snmptrap并触发告警

发布时间 2023-12-16 13:13:41作者: wanghongwei-dev

1、配置陷阱处理脚本

# 在zabbix 服务器或者代理服务器上,复制源码目录中的Perl脚本到 /usr/bin目录下并赋予执行权限
cp zabbix-6.0.2/misc/snmptrap/zabbix_trap_receiver.pl /usr/bin/
chmod a+x /usr/bin/zabbix_trap_receiver.pl

2、安装snmp相关软件包

yum -y install net-snmp net-snmp-utils net-snmp-libs net-snmp-agent-libs net-snmp-devel net-snmp-perl

3、修改snmptrap配置文件

cat >>/etc/snmp/snmptrapd.conf<<EOF
disableAuthorization  yes
perl do "/usr/bin/zabbix_trap_receiver.pl"
EOF

4、启动服务并测试

systemctl enable snmptrapd --now
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 "test"
systemctl status snmptrapd

5、修改zabbix-server配置文件

StartSNMPTrapper=1
SNMPTrapperFile=/tmp/zabbix_traps.tmp
# 注:SNMPTrapperFile路径必须跟/usr/bin/zabbix_trap_receiver.pl脚本中设置的路径相同

6、重启zabbix-server服务

systemctl restart zabbix-server.service

7、配置监控项

名称:snmptrap.fallback
类型:SNMP trap
键值:snmptrap.fallback
信息类型:日志
日志时间格式:hh:mm:sszyyyy/MM/dd
# 键值配置为snmptrap.fallback,可以接收所有未配置成SNMPtrap监控项的设备发出的trap信息

8、配置触发器

名称:snmptrap.fallback
Event name:接收到snmptrap信息
表达式:length(last(/<...模板名称...>/snmptrap.fallback))>0
# 该触发器的含义是,只要接受到新的trap信息就触发告警

9、验证监控项和触发器

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 "test"

10、查看snmp配置的mib文件路径

net-snmp-config --default-mibdirs
/root/.snmp/mibs:/usr/share/snmp/mibs

11、告警通知模板

<table border="1" bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
	<tr bgcolor="#FF3333">
		<th colspan=2>
			{TRIGGER.STATUS} Status Report
	</tr>
	<tr>
		<td bgcolor="#ff7d0a" width="20%">告警主机</td>
		<td bgcolor="#ff7d0a">{HOSTNAME1}</td>
	</tr>
	<tr>
		<td bgcolor="#ff7d0a">主机别名</td>
		<td bgcolor="#ff7d0a">{HOST.NAME} </td>
	<tr>
	<tr>
		<td bgcolor="#ff7d0a">告警地址</td>
		<td bgcolor="#ff7d0a">{HOST.IP}</td>
	</tr>
	<tr>
		<td bgcolor="#ff7d0a">告警时间</td>
		<td bgcolor="#ff7d0a">{EVENT.DATE} {EVENT.TIME}</td>
	</tr>
	<tr>
		<td bgcolor="#ff7d0a">告警等级</td>
		<td bgcolor="#ff7d0a">{TRIGGER.SEVERITY}</td>
	</tr>
	<tr>
		<td bgcolor="#ff7d0a">告警信息</td>
		<td bgcolor="#ff7d0a">{TRIGGER.NAME}</td>
	</tr>
	<tr>
		<td bgcolor="#ff7d0a">告警项目</td>
		<td bgcolor="#ff7d0a">{TRIGGER.KEY1}</td>
	</tr>
	<tr>
		<td bgcolor="#FF3333">问题详情</td>
		<td bgcolor="#FF3333">{ITEM.NAME}:&nbsp;{ITEM.VALUE}</td>
	</tr>
	<tr>
		<td bgcolor="#ff7d0a">当前状态</td>
		<td bgcolor="#ff7d0a">{TRIGGER.STATUS}:&nbsp;{ITEM.VALUE1}</td>
	</tr>
	<tr>
		<td bgcolor="#ff7d0a">事件ID</td>
		<td bgcolor="#ff7d0a">{EVENT.ID}</td>
	</tr>
</table>

12、告警恢复模板

<table border="1" bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
	<tr bgcolor="#49c208">
		<th colspan=2>
			{TRIGGER.STATUS} Status Report
	</tr>
	<tr>
		<td bgcolor="#ffba00" width="20%">恢复主机</td>
		<td bgcolor="#ffba00">{HOSTNAME1}</td>
	</tr>
	<tr>
		<td bgcolor="#ffba00">主机别名</td>
		<td bgcolor="#ffba00">{HOST.NAME} </td>
	<tr>
		<td bgcolor="#ffba00">恢复地址</td>
		<td bgcolor="#ffba00">{HOST.IP}</td>
	</tr>
	<tr>
		<td bgcolor="#ffba00">恢复时间</td>
		<td bgcolor="#ffba00">{EVENT.DATE} {EVENT.RECOVERY.TIME}</td>
	</tr>
	<tr>
		<td bgcolor="#ffba00">持续时长</td>
		<td bgcolor="#ffba00">{EVENT.DURATION}</td>
	</tr>
	<tr>
		<td bgcolor="#ffba00">恢复等级</td>
		<td bgcolor="#ffba00">{TRIGGER.SEVERITY}</td>
	</tr>

	<tr>
		<td bgcolor="#ffba00">恢复信息</td>
		<td bgcolor="#ffba00">{TRIGGER.NAME}</td>
	</tr>

	<tr>
		<td bgcolor="#ffba00">恢复项目</td>
		<td bgcolor="#ffba00">{TRIGGER.KEY1}</td>
	</tr>
	<tr>
		<td bgcolor="#49c208">恢复详情</td>
		<td bgcolor="#49c208">{ITEM.NAME}:&nbsp;{ITEM.VALUE}</td>
	</tr>
	<tr>
		<td bgcolor="#ffba00">当前状态</td>
		<td bgcolor="#ffba00">{TRIGGER.STATUS}:&nbsp;{ITEM.VALUE1}</td>
	</tr>
	<tr>
		<td bgcolor="#ffba00">事件ID</td>
		<td bgcolor="#ffba00">{EVENT.ID}</td>
	</tr>
</table>