码迷,mamicode.com
首页 > 其他好文 > 详细

Logstash之日志多行合一行(日志错行)

时间:2016-05-12 18:28:06      阅读:669      评论:0      收藏:0      [点我收藏+]

标签:

我们在用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)。



Logstash之日志多行合一行(日志错行)

标签:

原文地址:http://blog.csdn.net/shan1369678/article/details/51353909

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!