zabbix6.0接收snmptrap,触发告警,解析RFC1628的trap信息

1.配置snmptrap 安装snmp相关工具

1
yum install -y net-snmp*

官网下载源码,复制misc/snmptrap/zabbix_trap_receiver.pl,确认其中SNMPTrapperFile路径并授权

1
2
3
vim /usr/bin/zabbix_trap_receiver.pl
$SNMPTrapperFile = '/tmp/zabbix_traps.tmp';
chmod a+x /usr/bin/zabbix_trap_receiver.pl

配置zabbix服务器的snmptrap配置并启动(以团体字为public为例)

#某些设备(如山特UPS)只能发指定团体字(vendor-community)的trap,因此可能写多行authCommunity

vim /etc/snmp/snmptrapd.conf

1
2
3
4
5
6
7
snmpTrapdAddr udp:162
snmpTrapdAddr udp:8162
#默认端口162,也可以指定多个端口
authCommunity log,execute,net public
authCommunity log,execute,net vendor-community
#可以指定多个团体字
perl do "/usr/bin/zabbix_trap_receiver.pl"
1
2
3
systemctl restart snmptrapd
systemctl enable snmptrapd
systemctl status snmptrapd

配置zabbix服务器的zabbix_server.conf配置。启动snmptrap,修改SNMPTrapperFile,保持与zabbix_trap_receiver.pl中一致

1
2
StartSNMPTrapper=1
SNMPTrapperFile=/tmp/zabbix_traps.tmp
1
2
systemctl restart zabbix-server
systemctl status zabbix-server

zabbix服务器防火墙放开snmptrap端口

1
2
firewall-cmd --permanent --zone=public --add-service=snmptrap
firewall-cmd --reload

snmptrap测试 zabbix服务器上测试

1
snmptrap -v 2c -c public 127.0.0.1 '' .1.3.6.1.2.1.33.1.6.3.21 .1.3.6.1.2.1.33.1.6.3.21 s 'snmptrap test-v2'

客户端测试

1
2
snmptrap -v 2c -c public zabbix-ip '' .1.3.6.1.2.1.33.1.6.3.21 .1.3.6.1.2.1.33.1.6.3.21 s 'snmptrap test-v2'
snmptrap -v 1 -c public zabbix-ip 1.3.6.1.2.1.33 zabbix-ip 6 0 999 1.3.6.1.2.1.33.1.6.3.21 s  snmptrap-test-v1

验证

1
tail /tmp/zabbix_traps.tmp

2.配置告警(以模板UPS RFC 1628 SNMP为例) 创建监控项

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

创建触发器,只要接受到新的trap信息就触发告警

1
2
3
触发器名称 snmptrap event
表达式 length(last(/UPS RFC 1628 SNMP/snmptrap.fallback))>0
允许手动关闭

3.解析trap信息,配置准确告警(以RFC1628.MIB为例) 以下是进阶配置,将告警信息中的MIB oid翻译为对应的name,以触发准确的trap告警。 确定mib文件路径

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

将RFC1628.MIB文件上传至/usr/share/snmp/mibs,格式可以保持RFC1628.MIB,也可以RFC1628-MIB.txt.

snmptrap此时仍未解析,客户端测试(其中.1.3.6.1.2.1.33.1.6.3.21=upsAlarmAwaitingPower):

1
2
snmptrap -v 1 -c public zabbix-ip 1.3.6.1.2.1.33 zabbix-ip 6 0 999 1.3.6.1.2.1.33.1.6.3.21 s  snmptrap-test-v1
snmptrap -v 2c -c public zabbix-ip '' .1.3.6.1.2.1.33.1.6.3.21 .1.3.6.1.2.1.33.1.6.3.21 s 'snmptrap test-v2'

zabbix告警数据:

1
SNMPv2-SMI::mib-2.33.1.6.3.21  type=4  value=STRING: "snmptrap-test-v1"

修改snmptrapd配置文件,加载新增的MIB库或全部MIB库

1
vim /usr/lib/systemd/system/snmptrapd.service
1
ExecStart=/usr/sbin/snmptrapd $OPTIONS -f -m /usr/share/snmp/mibs/RFC1628.MIB

1
ExecStart=/usr/sbin/snmptrapd $OPTIONS -f -m ALL

重启snmptrapd

1
2
systemctl daemon-reload
systemctl restart snmptrapd

客户端重新测试

1
2
snmptrap -v 1 -c public zabbix-ip 1.3.6.1.2.1.33 zabbix-ip 6 0 999 1.3.6.1.2.1.33.1.6.3.21 s  snmptrap-test-v1
snmptrap -v 2c -c public zabbix-ip '' .1.3.6.1.2.1.33.1.6.3.21 .1.3.6.1.2.1.33.1.6.3.21 s 'snmptrap test-v2'

zabbix告警数据可以看到upsAlarmAwaitingPower字段

1
UPS-MIB::upsAlarmAwaitingPower type=4  value=STRING: "snmptrap-test-v1"

4.创建准确解析的trap监控项 创建监控项

1
2
3
4
5
6
名称:SNMP traps (upsAlarmAwaitingPower)
类型:SNMP trap
键值:snmptrap[UPS-MIB::upsAlarmAwaitingPower]
信息类型:日志
日志时间格式:hh:mm:sszyyyy/MM/dd
# 键值配置为snmptrap[UPS-MIB::upsAlarmAwaitingPower],可以接收所有匹配了UPS-MIB::upsAlarmAwaitingPower的trap信息

创建触发器,只要接受到新的UPS-MIB::upsAlarmAwaitingPower trap信息就触发告警

1
2
3
触发器名称 snmptrap event-upsAlarmAwaitingPower
表达式 length(last(/UPS RFC 1628 SNMP/snmptrap[UPS-MIB::upsAlarmAwaitingPower]))>0
允许手动关闭

附:RFC1628 Trap

TRAPS Description Comments
upsAlarmBatteryBad 电池故障 .1.3.6.1.2.1.33.1.6.3.1
upsAlarmOnBattery 电池模式 .1.3.6.1.2.1.33.1.6.3.2
upsAlarmLowBattery 电池低告警 .1.3.6.1.2.1.33.1.6.3.3
upsAlarmDepletedBattery 电池未接或电池耗尽 .1.3.6.1.2.1.33.1.6.3.4
upsAlarmTempBad 温度异常 .1.3.6.1.2.1.33.1.6.3.5
upsAlarmInputBad 输入异常 .1.3.6.1.2.1.33.1.6.3.6
upsAlarmOutputBad 输出异常 .1.3.6.1.2.1.33.1.6.3.7
upsAlarmOutputOverload 输出过载 .1.3.6.1.2.1.33.1.6.3.8
upsAlarmOnBypass 旁路模式 .1.3.6.1.2.1.33.1.6.3.9
upsAlarmBypassBad 旁路异常 .1.3.6.1.2.1.33.1.6.3.10
upsAlarmOutputOffAsRequested 按要求的UPS输出关闭 .1.3.6.1.2.1.33.1.6.3.11
upsAlarmUpsOffAsRequested 按要求的UPS系统关闭 .1.3.6.1.2.1.33.1.6.3.12
upsAlarmChargerFailed 充电故障 .1.3.6.1.2.1.33.1.6.3.13
upsAlarmUpsOutputOff UPS输出关闭 .1.3.6.1.2.1.33.1.6.3.14
upsAlarmUpsSystemOff UPS系统关闭 .1.3.6.1.2.1.33.1.6.3.15
upsAlarmFanFailure 风扇故障 .1.3.6.1.2.1.33.1.6.3.16
upsAlarmFuseFailure 保险丝熔断或故障 .1.3.6.1.2.1.33.1.6.3.17
upsAlarmGeneralFault UPS故障 .1.3.6.1.2.1.33.1.6.3.18
upsAlarmDiagnosticTestFailed 测试诊断失败 .1.3.6.1.2.1.33.1.6.3.19
upsAlarmCommunicationsLost 通讯失败 .1.3.6.1.2.1.33.1.6.3.20
upsAlarmAwaitingPower 市电异常 .1.3.6.1.2.1.33.1.6.3.21
upsAlarmShutdownPending 关机延迟 .1.3.6.1.2.1.33.1.6.3.22
upsAlarmShutdownImminent 立即关机 .1.3.6.1.2.1.33.1.6.3.23
upsAlarmTestInProgress 电池测试中 .1.3.6.1.2.1.33.1.6.3.24
emdTemperatureTooHigh 温度过高 .1.3.6.1.2.1.33.1.6.3.26
emdTemperatureTooLow 温度过低 .1.3.6.1.2.1.33.1.6.3.27
emdHumidityTooHigh 湿度过高 .1.3.6.1.2.1.33.1.6.3.28
emdHumidityTooLow 湿度过低 .1.3.6.1.2.1.33.1.6.3.29
emdAlarm1Active 告警一使能 .1.3.6.1.2.1.33.1.6.3.30
emdAlarm2Active 告警二使能 .1.3.6.1.2.1.33.1.6.3.31
读故障不是读上面的每个OID,而是读右边两个 upsAlarmDescr告警描述 .1.3.6.1.2.1.33.1.6.2.1.2
upsAlarmTime告警时间 .1.3.6.1.2.1.33.1.6.2.1.3
使用 Hugo 构建
主题 StackJimmy 设计