【问题标题】:With logstash how to combine lines starting with timestamp使用logstash如何组合以时间戳开头的行
【发布时间】:2016-12-30 10:26:52
【问题描述】:

这是我需要使用 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 多行过滤器解析这种格式的日志,以及我应该使用什么模式。

提前谢谢你!!

【问题讨论】:

    标签: logstash multiline logstash-grok


    【解决方案1】:

    如果您使用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 也可能会有所帮助。希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      有两种实现方式

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        • 2015-10-23
        相关资源
        最近更新 更多