2015-10-26 89 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過濾器。