使用logstash如何组合以时间戳开头的行

时间:2016-12-30 10:26:53

标签: logstash multiline logstash-grok

以下是我需要使用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

请给我一些建议如何使用grok multiline过滤器解析此格式的日志,以及我应该使用哪种模式。

提前谢谢!!

2 个答案:

答案 0 :(得分: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也可能有所帮助。希望它有所帮助!

答案 1 :(得分:0)

实施

有两种方法
  • logstash输入中的Mutipleline

这可以使用多个线程来解析日志。

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
       }
    }
  • logstash过滤器中的Mutipleline

不能使用多线程,但可以通过特殊情况设置过滤器

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