Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 无法使用nginx logwarn正确解析包含特定关键字的日志行_Regex_Linux_Posix_Nagios - Fatal编程技术网

Regex 无法使用nginx logwarn正确解析包含特定关键字的日志行

Regex 无法使用nginx logwarn正确解析包含特定关键字的日志行,regex,linux,posix,nagios,Regex,Linux,Posix,Nagios,在上次调用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.campaig

在上次调用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';
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_hiphop_error /mnt/log/hiphop/error_`(date +'%Y%m%d')`.log ".*SlowTimer.*"
下面的logwarn命令查找
SlowTimer
,如我所料,会找到一个匹配的日志(输出是最后一次调用该命令后添加的整个日志行)——

但是,以下查找
SlowTimers
的命令也会找到匹配的日志,我不希望这样-

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_hiphop_error /mnt/log/hiphop/error_`(date +'%Y%m%d')`.log ".*SlowTimers.*"
我在上测试了正则表达式,
/.*SlowTimer.*/g
匹配,而
/.*SlowTimer.*/g
不匹配任何东西。我认为这是一个非常简单的正则表达式,在不同的口味中都有类似的效果

当命令未找到任何匹配项时(例如,上次调用后没有新的日志行),这是我得到的输出-

OK: No log errors found
当我查找
*慢定时器。*
时,我期望得到上述输出


请查找以供参考。

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

-p将默认匹配行为更改为非匹配。默认情况下,如果日志
消息与任何积极或消极模式都不匹配,它是
被认为是一场比赛。此标志反转此行为,以便
消息被视为不匹配。

我也可能错了,但我认为正则表达式可以简化为
SlowTimers
,而不是
*SlowTimers.*
。它没有指定开始(
^
)和结束(
$
),因此可能会出现在文本中的任何位置。

您可能需要使用
-p
标志:

-p将默认匹配行为更改为非匹配。默认情况下,如果日志
消息与任何积极或消极模式都不匹配,它是
被认为是一场比赛。此标志反转此行为,以便
消息被视为不匹配。

我也可能错了,但我认为正则表达式可以简化为
SlowTimers
,而不是
*SlowTimers.*
。它没有指定开始(
^
)和结束(
$
),因此可能出现在文本中的任何位置。

感谢您的回答。但是,我需要匹配关键字,所以我不明白为什么应该使用<代码> -p>代码来反转这个行为,把关键字看作非匹配的。你尝试了吗?文档似乎暗示,如果日志消息与正则表达式不匹配,除非使用此标志,否则它仍然被视为匹配。您是正确的。我想我之前做了一些不正确的观察,在我的内心深处认为这是行不通的。我之前试过
-p
,可能我先试过一个不匹配的关键字,虽然日志文件中没有添加新行,但我试过一个匹配的关键字,因此得到了一个“确定:没有发现日志错误”。你能详细说明一下吗“文档似乎暗示,如果日志消息与正则表达式不匹配,除非使用此标志,否则它仍然被视为匹配"? 您在文档中的什么地方找到的?
-p
标志是:将默认匹配行为更改为非匹配。默认情况下,如果日志消息与任何正模式或负模式都不匹配,则将其视为匹配。此标志反转此行为,因此这些消息被视为不匹配。感谢您的回答。但是,我需要匹配关键字,所以我不明白为什么应该使用<代码> -p>代码来反转这个行为,把关键字看作非匹配的。你尝试了吗?文档似乎暗示,如果日志消息与正则表达式不匹配,除非使用此标志,否则它仍然被视为匹配。您是正确的。我想我之前做了一些不正确的观察,在我的内心深处认为这是行不通的。我之前试过
-p
,可能我先试过一个不匹配的关键字,虽然日志文件中没有添加新行,但我试过一个匹配的关键字,因此得到了一个“确定:没有发现日志错误”。你能详细说明一下吗“文档似乎暗示,如果日志消息与正则表达式不匹配,除非使用此标志,否则它仍然被视为匹配"? 您在文档中的什么地方找到的?
-p
标志是:将默认匹配行为更改为非匹配。默认情况下,如果日志消息与任何正模式或负模式都不匹配,则将其视为匹配。此标志反转此行为,因此这些消息被视为不匹配。