使用nginx的logwarn含有特定的关键字不能正确地解析出日志行(Unable to corre

2019-09-27 04:51发布

用下面的日志行check_logwarn命令的最后调用之后加入 -

[Tue Nov 22 11:04:03 2016] [hphp] [10755:7f41af3ff700:6272:000001] [] SlowTimer [2086ms] at runtime/ext_m
ysql: slow query: SELECT b.bannerid, b.campaignid FROM ox_banners b, ox_campaigns c WHERE b.campaignid =
c.campaignid AND (b.status = 0 OR b.`updated` >= now() - INTERVAL 7 DAY) AND (c.status = 0 OR c.`updated`
 >= now() - INTERVAL 7 DAY)  AND b.updated >= '2016-11-22 11:03:01';

下面logwarn命令,寻找SlowTimer ,找到一个匹配的日志,如我期望(输出是其的命令的最后一个调用之后加入整个日志行) -

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_hiphop_error /mnt/log/hiphop/error_`(date +'%Y%m%d')`.log ".*SlowTimer.*"

但是,下面的命令寻找SlowTimers还发现一个匹配的日志,这是我不希望-

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_hiphop_error /mnt/log/hiphop/error_`(date +'%Y%m%d')`.log ".*SlowTimers.*"

我测试了正则表达式https://regex101.com/和/.*SlowTimer.*/g匹配而/.*SlowTimers.*/g不匹配任何东西。 我认为这是非常简单的正则表达式和作品跨越各种口味相似。

当命令没有找到任何匹配(例如,当没有新的日志行的最后一个调用之后),这是输出I得到 -

OK: No log errors found

我期待上面的输出,当我寻找.*SlowTimers.*

请找logwarn手册以供参考。

Answer 1:

认为你可能需要使用-p标志:

  -p Change default match behavior to non-matching. By default, if a log message doesn't match any of the positive or negative patterns, it is considered a match. This flag reverses this behavior so that these messages are considered non-matches. 

我也可能是错误的这一点,但认为正则表达式可以简化成SlowTimers而不是.*SlowTimers.* 。 它不是指定的开始( ^ )和结尾( $ ),这样可以在文本的任何地方出现。



文章来源: Unable to correctly parse out log lines containing particular keyword using nginx logwarn