2016-12-30 60 views
0

這裏是我需要使用logstash解析我的日誌文件示例:隨着logstash怎麼行結合開始時間戳

2016-12-27 07:54:38.621 8407 ERROR oslo_service.service Traceback (most recent call last): 
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service File "/usr/lib/python2.7/dist-packages/oslo_service/service.py", line 680, in run_service 
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service  service.start() 
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service File "/usr/lib/python2.7/dist-packages/nova/service.py", line 428, in start 
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service  self.binary) 
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service File "/usr/lib/python2.7/dist-packages/oslo_versionedobjects/base.py", line 181, in wrapper 

請給我一些建議,我怎麼可以解析使用神交多過濾器這種格式的日誌我應該使用什麼樣的模式。

預先感謝您!

回答

0

,如果你嘗試這樣使用grokmultiline什麼:

input { 
file { 
    path => [""] <-- path to your log directory 
    start_position => "beginning" 
    codec => multiline { 
        pattern => "^%{TIMESTAMP_ISO8601}" 
        negate => true 
        what => previous 
    }  
    } 
} 
filter { 
    grok { 
     patterns_dir => "./patterns" <-- the path to the patterns file 
     match=>["message","%{TIMESTAMP_ISO8601:timestamp} %{WORD:level} %{GREEDYDATA:content}"] 
    } 
} 

上面的只是一個樣本,你可以如你所願複製它。

Multiline是用於讀取數據的模式,將所有以空格開頭的行追加到上一行。換句話說,當Logstash讀取以空白(空格,製表符)開頭的一行輸入時,該行將與先前讀取的輸入信息合併。

這個SO也許會有幫助。希望能幫助到你!

0

有兩種方式來實現

  • Mutipleline在logstash輸入

這可以用多發線程來解析日誌。

input { 
    beats { 
     port => 5044 
     codec => multiline { 
     pattern => "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[\.,][0-9]{3,7} " 
     negate => true 
     what => "previous" 
     } 
     congestion_threshold => 40 
     } 
    } 
  • Mutipleline在logstash過濾

不能使用穆蒂線程,但可以通過特殊的情況下設置過濾器

filter { 
     if [@metadata][beat] =~ "xxxx" { 
       multiline { 
       pattern => "^%{TIMESTAMP_ISO8601}" 
       negate => true 
       what => "previous" 
      } 
     } 
    }