2015-10-26 61 views
2

我正在尝试为某些日志编写groke规则,并且无法找到在单个日志中有多行的情况下应该如何处理的问题 以下是我拥有的日志截图: screenshot of logs 在附加图像中,绿色(即较短的日志)得到正确解析,而较长的(由红色框表示,它有多条线),错误地被解析。在logstash中解析更长的日志时遇到问题

多:

这里是多,这是我写的,

multiline 
{ 
    type => "sftp" 
    pattern => "^[^\[2015]" 
    what => "previous" 
} 

这是相同的解析输出(错误):

[2015-10-03 23:32:00.603] ALL Config.logConfiguration() client configuration:]\n localPortCollection=[null]\n minThreadPoolSize=[3]\n maxThreadPoolSize=[6]\n perimeterServerName=[BSC_NODE2_OBD_PS3]\n. 

,你可以看,上面这个输出有它的“\ n”,并且我写的grok规则不被接受,因为父日志中的“\ n”。

我在编写grok规则时尝试了“\ n”。

+0

使用多行是将它们合并的正确方法。您可以查看否定参数,这可以使您的节更容易阅读/维护。如果你的输入不符合你的模式,也许你可以更新模式对空白不感兴趣? –

回答

0
filter { 
if [type] == "sftp"{ 
    multiline { 
    pattern => "^\[%{TIMESTAMP_ISO8601" 
    negate => true 
    what => previous 
    } 

    grok { 
    match => { 
    message => "\[%{TIMESTAMP_ISO8601:timestamp}\]%{SPACE}%{WORD:loglevel}%{SPACE}%{GREEDYDATA:message}" 
    } 
    } 

} 
} 

多线使用negate和检查http://grokdebug.herokuapp.com/patterns#可用的最新模式。

还使用date过滤器。