在日志文件中考虑以下错误日志,我将其用作nagios logwarn命令的输入 -
[19910:7f88e07ff700:559445:000001] [] \nFatal error: File not found: ./postGetAds.php in /var/cake_1.2.0.6311-beta/app/webroot/openx/www/delivery/androidGetAd.php on line 302
以下正则表达式完美无缺,可以检测出"致命"字符串存在 -
/^.*Fatal*/g
这是完整的nagios logwarn命令,我使用上面的正则表达式 -
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_hiphop_error -p /mnt/log/hiphop/error_`(date +'%Y%m%d')`.log "^.*Fatal*"
这是输出,正如目前所希望的那样 -
Log errors: [Thu Jan 12 07:46:38 2017] [hphp] [19910:7f89543ff700:558024:000001] [] \nFatal error: File not found: ./postGetAd.php in /var/cake_1.2.0.6311-beta/app/webroot/openx/www/delivery/androidGetAd.php on line 302
现在,我想进行修改,如果有字符串"找不到文件,则忽略日志行的匹配:"跟随"致命",如上例中的错误日志。
logwarn documentation提到支持否定检查表达式并支持同一命令中的多个regexpressions,如下所示 -
logwarn -p -m '^myprog: ' '!retrying' 'ERROR'
所以,我尝试了以下内容,但仍未达到预期效果(仍然匹配文件不存在部分) -
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_hiphop_error -p /mnt/log/hiphop/error_20170118.log '^.*Fatal*' '!.*File not found\: \.\/postGetAd\.php'
在实际情况中,我会有多个文件路径,其中找不到相应的"文件"错误需要忽略。最好的解决方案也可以考虑这一点。
注意 - 这里的正则表达式是POSIX风格。
答案 0 :(得分:1)
logwarn
实用程序接受正面和负面正则表达式的列表。来自the manual page:
按照给定的顺序将每个日志消息与每个模式进行比较。 负模式用“!”前缀指定。如果是日志 在匹配否定之前,消息匹配正模式 !图案,或者如果没有任何图案匹配,则将其打印到 标准输出。
因此,每个行都按照按顺序进行测试。
您正在寻找包含A但不包含B的行,这些行可以用AND函数表示:A·!B
将模式列表指定为A !B
将导致函数:A +!B
而以相反顺序!B A
指定模式将导致函数:A·!B