You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zabbix日志监控正则问题:匹配含[ERR]的连续3行日志

解决Zabbix中匹配Windows日志含[ERR]的三行内容问题

正确的Perl正则表达式

要完整匹配包含[ERR]的第一行及后续两行,可使用以下正则:

^.*\Q[ERR]\E.*(?:\r\n?|\n).*(?:\r\n?|\n).*

如果需要单独捕获每行内容(方便后续Zabbix处理字段),可使用带捕获组的版本:

^.*\Q[ERR]\E\s*(.*)(?:\r\n?|\n)(.*)(?:\r\n?|\n)(.*)

正则各部分说明

  • ^:锚定行首,避免匹配日志文本中间偶然出现的[ERR]片段
  • \Q[ERR]\E:转义匹配[ERR],方括号在正则中是特殊字符,用\Q和\E包裹可直接匹配原字符串
  • .*:匹配当前行剩余的全部内容(无需非贪婪模式,此处需覆盖整行)
  • (?:\r\n?|\n):匹配Windows(\r\n)或兼容类Unix(\n/\r)的换行符,非捕获组不占用分组编号
  • 重复的.*:依次匹配后续两行的全部内容

针对你的日志示例测试

你的日志片段:

2023-03-15 18:14:31.149 -04:00 [ERR] Exception Time:
3/15/2023 6:14:31 PM Exception Message: Could not find file
'\XXXXX01\Files\51372\Working.xml'.

使用第一个正则会完整匹配这三行内容;使用带捕获组的版本时,三个捕获组分别对应:

  1. Exception Time:
  2. 3/15/2023 6:14:31 PM Exception Message: Could not find file
  3. '\XXXXX01\Files\51372\Working.xml'.

你之前正则的问题分析

你原正则中的(.*?){2}(.+)逻辑错误:

  • (.*?)是非贪婪匹配任意字符,{2}是让这个捕获组重复两次,而非匹配两行内容
  • 换行符的位置没有正确分隔行,导致正则无法识别完整的行结构

Zabbix配置注意事项

  1. 确保日志监控项开启多行匹配支持(Zabbix部分版本需手动启用,避免仅匹配单行)
  2. 如果使用捕获组,可在Zabbix的项目参数中引用分组值(如$1、$2)用于告警或存储
  3. 可通过Zabbix内置的正则测试功能验证匹配效果,调整细节

内容的提问来源于stack exchange,提问作者ahess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:00:22