Logstash之日誌多行合一行(日誌錯行)

我們在用Logstash收集日誌的時候會碰到日誌會錯行,這個時候我們需要把錯的行歸併到上一行,使某條數據完整;也防止因爲錯行導致其他字段的不正確。

在Logstash-filter插件中,multiline插件可以解決這個問題,舉個例子如下:

假如我們的日誌形式如下:

2016-04-05 13:39:52.534 1.28.253.193 201603110904
07705e58772f6c 22863457 10.0.251.146 http://q.hexun.com/102148/quickmessage.aspx
2016-04-05 13:39:52.534 114.81.254.169 201604051339 0 10.0.251.146 http://forex

上面這兩條日誌由於第一條日誌錯行,如果不處理錯行,可能會收集到三條日誌。

下面我們可以配置filter處理錯行:

input{
        kafka {
          zk_connect => "bdc41.hexun.com:2181,bdc40.hexun.com:2181,bdc46.hexun.com:2181,bdc54.hexun.com:2181,bdc53.hexun.com:2181"
          group_id => "logstash"
          topic_id => "TrackLogT"
          reset_beginning => false # boolean (optional)
          consumer_threads => 3  # number (optional)
          decorate_events => true
  #        codec => plain {
  #          charset => "UTF-8"
  #       }
       }
}

filter {
       multiline {
            pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
            negate => true
            what => "previous"
        }

      ruby {
           init =>"@kname =['dateday','datetime','ip','cookieid','userid','logserverip','referer']"
           code =>"event.append(Hash[@kname.zip(event['message'].split(/ /))])"
           remove_field => ["message"]
         
      }
}

output{
  #  stdout{
  #    codec=>rubydebug
  #  }


  elasticsearch{
    hosts => [ "10.130.2.53:9200","10.130.2.46:9200","10.130.2.54:9200" ]
    flush_size=>50000
    workers => 5
    index=> "logstash-tracklog"
  }
}


上述配置重點就在於:

 multiline {
            pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
            negate => true
            what => "previous"
        }

這裏所採用的是正則匹配行頭的方式來實現合併錯行的:假如某一行行頭不能匹配\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2},則把此行歸併到上一行,如此可以實現錯行合一的效果。

在這裏第二行開頭爲:07705e58772f6c 228,此行不能匹配\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}這個正則,所以把第二行歸併到第一行。


這種方式會造成延遲一條的現象:因爲如果沒有下一條數據能匹配這個正則,則說明此條數據還有可能繼續錯行,所以在第三行數據來之後,匹配成功,錯行結束,第一條日誌纔會往下走(進行分割,直至索引進ES)。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章