场景:运维部小陈给公司的华为云计算节点配置了Trap告警,方便及时监控到存储的运行状况。但是领导看过觉得收到的Trap信息过于复杂,不便快速查看到告警信息,要小陈给处理成简单易懂的形式,于是乎,操作如下:
环境:
zabbix4.2.5,已安装snmptrap服务
1、从计算节点收到snmptrap如下图:
Zabbix 正则结合JavaScript简化Trap告警信息_第1张图片
需要提取出来的信息如下:
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
Zabbix 正则结合JavaScript简化Trap告警信息_第2张图片

再次发送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%"
Zabbix 正则结合JavaScript简化Trap告警信息_第3张图片

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;
Zabbix 正则结合JavaScript简化Trap告警信息_第4张图片
把Trap信息重新发送,进行测试的结果如下:
Zabbix 正则结合JavaScript简化Trap告警信息_第5张图片

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