perl 使用regex监控Zabbix日志文件,尝试复制第2行和第3行

dxxyhpgq  于 2023-03-19  发布在  Perl
关注(0)|答案(1)|浏览(157)

我正在使用Zabbix监控系统。我需要监控Windows服务器上的日志文件中的错误消息。第一行只显示ERR,接下来的2行显示错误的时间戳和详细信息。我需要将所有3行放入Zabbix。Zabbix使用perl regex完成此操作。
下面是我一直在玩的正则表达式。它可以在日志中找到ERR,也可以复制额外的行,但不是两者都有。我想我需要的是一个if then do语句,但不知道如何编写。

\Q[ERR]\E(?:\r\n?|\n)(.*?)(?:\r\n?|\n)(.*?){2}(.+)

\Q[ERR]\E  -finds ERR in the log file
(?:\r\n?|\n)(.*?)(?:\r\n?|\n)(.*?){2}(.+)
  • 当我把它们放在一起时,复制接下来的2行,它不起作用
    日志文件:2023年3月15日18:14:31.149 -04:00 [错误]异常时间:2023年3月15日下午6:14:31异常消息:找不到文件“\XXXXX01\Files\51372\Working.xml”。
    请帮帮忙。我已经用头撞墙一个星期了。
wz1wpwve

wz1wpwve1#

如果要匹配所有3行而不匹配捕获组,其中第一行包含[ERR]

.*\[ERR]\h*(?:\R.*){2}

Regex demo
或匹配以下所有包含Exception的行

.*\[ERR]\h*(?:\R.*\bException\b.*){2}

Regex demo

相关问题