Zabbix Snmptrap 告警配置
zabbix 配置SNMPTRAP告警触发器 # 1,接收到告警信息 \`\`\`shell 2025-12-27 05:10:45 PM 2025-12-27T09:10:43+0000 UDP: \[172.16.238.1\]:40746-\>\[172.16.238.4\]:1162 DISMAN-EVENT-MIB::sysUpTimeInstance = 0 SNMPv2-MIB::snmpTrapOID.0 = PLATFORM-ALARM-MIB::cloudPlatformAlarm PLATFORM-ALARM-MIB::alarmDescription = {"alarm_name":"平台与集群链接异常","az_name":"az1","description":"平台与集群(10.131.133.58)连接异常,0台虚拟机由于启用了加密功能将受到影 响,请检查集群网络是否正确。","refresh_time":"2025-06-19 08:15:30","resource":"res1","resource_type":"集群","suggestion":""} PLATFORM-ALARM-MIB::alarmObject = 192.168.31.1 PLATFORM-ALARM-MIB::alarmLevel = 紧急 PLATFORM-ALARM-MIB::alarmAction = 1 \`\`\` !\[image-20251227220833801\](/usr/uploads/my-upload/2025/12/image-20251227220833801.png) # 2,配置 ## 2.1 监控项预处理 注意生成的json数据顺序不能变,后面触发器要使用 \`\`\`javascript try { var data = value; var result = {}; result.level = (data.match(/alarmLevel\\s\*=\\s\*(\[\^\\r\\n\]+)/) \|\| \[\])\[1\] \|\| ''; // 使用更兼容的正则表达式 var jsonRegex = /alarmDescription\\s\*=\\s\*(\\{\[\\s\\S\]\*?\\})(?:\\r?\\n\|$)/; var jsonMatch = data.match(jsonRegex); if (jsonMatch \&\& jsonMatch\[1\]) { try { var jsonData = JSON.parse(jsonMatch\[1\]); result.alarm_name = jsonData.alarm_name \|\| ''; result.az_name = jsonData.az_name \|\| ''; result.resource = jsonData.resource \|\| ''; result.resource_type = jsonData.resource_type \|\| ''; result.refresh_time = jsonData.refresh_time \|\| ''; result.description = jsonData.description \|\| ''; result.suggestion = jsonData.suggestion \|\| ''; // 提取数值 var valueMatch = result.description.match(/当前值(\[\\d.\]+)%/); if (valueMatch) result.current_value = valueMatch\[1\]; } catch(e) { result.json_error = e.message; } } result.object = (data.match(/alarmObject\\s\*=\\s\*(\[\^\\r\\n\]+)/) \|\| \[\])\[1\] \|\| ''; result.action = (data.match(/alarmAction\\s\*=\\s\*(\\d+)/) \|\| \[\])\[1\] \|\| ''; return JSON.stringify(result); } catch(e) { return JSON.stringify({ error: "Line " + e.lineNumber + ": " + e.message, input_preview: value.substring(0, 200) }); } \`\`\` ## 2.2触发器 主要是 匹配标签要是alarm_uuid否则恢复告警时恢复错误,其他的编译可以不用 !\[image-20251227215143207\](/usr/uploads/my-upload/2025/12/image-20251227215143207.png) !\[image-20251227213421570\](/usr/uploads/my-upload/2025/12/image-20251227213421570.png) \`\`\`shell SCP告警 {{ITEM.VALUE}.regsub(".\*level\\":\\"(\[\^\\"\]+)\\".\*alarm_name\\":\\"(\[\^\\"\]+)\\".\*",【\\1】\\2)} {{ITEM.VALUE}.regsub(".\*alarm_name\\":\\"(\[\^\\"\]+)\\".\*", \\1)} find(/172.16.238.1/snmptrap.fallback,,"regexp","\\"action\\":\\"1\\"")=1 find(/172.16.238.1/snmptrap.fallback,,"regexp","\\"action\\":\\"2\\"")=1 告警名称: {{ITEM.VALUE}.regsub(".\*alarm_name\\":\\"(\[\^\\"\]+)\\".\*", \\1)} 资源池: {{ITEM.VALUE}.regsub(".\*az_name\\":\\"(\[\^\\"\]+)\\".\*", \\1)} 告警对象: {{ITEM.VALUE}.regsub(".\*resource\\":\\"(\[\^\\"\]+)\\".\*", \\1)} 对象IP: {{ITEM.VALUE}.regsub(".\*object\\":\\"(\[\^\\"\]+)\\".\*", \\1)} 告警级别: {{ITEM.VALUE}.regsub(".\*level\\":\\"(\[\^\\"\]+)\\".\*", \\1)} 当前状态: {{ITEM.VALUE}.regsub(".\*action\\":\\"(\[\^\\"\]+)\\".\*", \\1)} 告警时间: {{ITEM.VALUE}.regsub(".\*refresh_time\\":\\"(\[\^\\"\]+)\\".\*", \\1)} 问题描述: {{ITEM.VALUE}.regsub(".\*description\\":\\"(\[\^\\"\]+)\\".\*", \\1)} 处理建议: {{ITEM.VALUE}.regsub(".\*suggestion\\":\\"(\[\^\\"\]+)\\".\*", \\1)} {{ITEM.VALUE}.regsub(".\*alarm_name\\":\\"(\[\^\\"\]+)\\".\*az_name\\":\\"(\[\^\\"\]+)\\".\*resource\\":\\"(\[\^\\"\]+)\\".\*", \\1_\\2_\\3)} {{ITEM.VALUE}.regsub(".\*alarm_name\\":\\"(\[\^\\"\]+)\\".\*", \\1)} {{ITEM.VALUE}.regsub(".\*az_name\\":\\"(\[\^\\"\]+)\\".\*", \\1)} {{ITEM.VALUE}.regsub(".\*resource\\":\\"(\[\^\\"\]+)\\".\*", \\1)} \`\`\`