场景:运维部小陈给公司的华为云计算节点配置了Trap告警,方便及时监控到存储的运行状况。但是领导看过觉得收到的Trap信息过于复杂,不便快速查看到告警信息,要小陈给处理成简单易懂的形式,于是乎,操作如下: 环境: zabbix4.2.5,已安装snmptrap服务 1、从计算节点收到snmptrap如下图: 需要提取出来的信息如下: SNMPv2-SMI::enterprises.2011.2.290.1.1.1.2 type=4 value=STRING: "15.1000102" //告警ID SNMPv2-SMI::enterprises.2011.2.290.1.1.1.8 type=4 value=STRING: "2" //告警类型(0-原始告警,1-清除告警,2-更新告警) SNMPv2-SMI::enterprises.2011.2.290.1.1.1.9 type=4 value=STRING: "3" //告警等级(1-紧急,2-主要,3-次要,4-提示) SNMPv2-SMI::enterprises.2011.2.290.1.1.1.5 type=4 value=Hex-STRING: 42 49 4D 26 E8 AE BE E8 AE A1 E7 AE A1 E7 90 86
EF BC 88 E6 96 B0 EF BC 89 //告警对象 SNMPv2-SMI::enterprises.2011.2.290.1.1.1.3 type=4 value=STRING: "VM Memory Usage Exceeds the Threshold" //告警名称 SNMPv2-SMI::enterprises.2011.2.290.1.1.1.15 type=4 value=STRING: "Current threshold=80.0%,VM memory usage=83.02%" //告警附加信息 2、zabbix监控项上正则处理,如下图所示: 匹配:OID.0.::.(\n).[\n].[\n].ING:(.)[\n].[\n].[\n].ING:(.)[\n].ING:(.)[\n].[\n].[\n].[\n].[\n].[\n].[\n].[\n].[\n].[\n].ING:(.\W.)[\n].ING:(.)[\n].*[\n].ING:(.) 输出:告警ID:\2\1告警类型:\3\1告警等级:\4\1告警对象:\5\1告警名称:\6\1告警附加信息:\7\1

再次发送Trap信息,得出结果: 告警ID: "15.1000102" 告警类型: "2" 告警等级: "3" 告警对象: 42 49 4D 26 E8 AE BE E8 AE A1 E7 AE A1 E7 90 86 EF BC 88 E6 96 B0 EF BC 89 告警名称: "VM Memory Usage Exceeds the Threshold" 告警附加信息: "Current threshold=80.0%,VM memory usage=83.02%"

3、告警对象的信息还需要用JavaScript处理,添加预处理步骤javascript 脚本如下: var str1 = /告警ID:([\s\S])告警对象:/; str1 = str1.exec(value)[0]; var str3 = /告警名称:([\s\S])/; str3 = str3.exec(value)[0]; var str2 = /告警对象:([\s\S]*)告警名称/; str2 = str2.exec(value); str2 = str2[1]; //需要十六进制转换 str2 = str2.replace(/\n/g,'').replace(/./g,'').replace(/ /g,''); //删除\n 删除.字符 删除空格 var temp = ''; var m = str2.match(/../g); for (var i=0;m!=null, i < m.length; i++) { temp += '%' + m; } str2 = decodeURI(temp); return str1 + str2 +'\n'+ str3; 把Trap信息重新发送,进行测试的结果如下:

技术交流欢迎加入Q群:177428068