我正在使用名为'check_logfiles'的nagios检查来解析一堆solaris机器上的syslog。它完全用Perl编写,并采用也使用Perl语法的配置文件。我试图使用正则表达式从检查的输出中排除以下行:
Nov 16 19:15:04 db07 Cluster.CCR: [ID 574345 daemon.debug] server address: 127.0.0.1
这是我试图使用的正则表达式(失败)
'^.*?(Cluster.CCR).*?$'
这是检查的整个配置文件,以备您可能需要一些上下文:
$options = 'report=long';
@searches = (
{
tag => 'syslog',
logfile => '/var/adm/messages',
rotation => 'SOLARIS',
options => 'noprotocol',
sticky => 2400,
criticalpatterns => [
'daemon.debug',
'daemon.error',
'Could not send report: Broken pipe',
'Could not retrieve catalog from remote server: Error 400 on SERVER'
],
warningpatterns => [
'daemon.warning',
'daemon.info',
'daemon.notice',
'kern',
],
criticalexceptions => [
'connect from nagioszone01.mydomain.com',
'from 10.20.28.140',
'Finished catalog run in',
'Did not receive identification string from',
'^.*?(Cluster.CCR).*?$'
],
warningexceptions => [
'connect from nagioszone01.mydomain.com',
'from 10.20.28.140',
'Finished catalog run in',
'Did not receive identification string from',
'Cluster.CCR'
],
options => 'logfilenocry,sticky=900',
});
感谢您提出的任何建议
答案 0 :(得分:0)
我不知道你是否解决了,但我建议使用WOTS来完成任务。 我维护并扩展了原始的WOTS,并将它完全用于这些设置。如果你想向nagios发送被动警报,它是一个带有集成nsca客户端的perl守护进程。包括大量的例子。 对于WOTS:http://www.e-dynamics.be/?section=programs
答案 1 :(得分:-2)
正则表达式无法排除“单词” - 所以你需要使用workarround
想象一下,你想在div中匹配“EverythingTHING”,但不是,如果 其中有“花”这个词(你不喜欢花,所以你不想与之匹配。)
匹配div-tags之间的所有内容:
/<div>([^<]+?)<\/div>/
不是杰作。
我们“不能”排除单词 - 但我们可以排除后跟短语的字符。 所以我们排除任何字符后跟“lower”:
/<div>([^<](?!lower))+?)<\/div>/
这与其他单词(“Glower”“Alower”)的文本不匹配......
所以我们需要用另一个“lookbehind”来“修改”我们的“前瞻”:
/<div>((?:[^<](?!(?<=F)lower))+?)<\/div>/
在您的情况下,您可以使用^
和$
代替div标签,并选择一些不应位于匹配值内的随机字。
<div>((?:[^<](?!(?<=F)lower))+?)<\/div>
(但是,如果你想排除整行 - 为什么要使用正则表达式?)