【问题标题】:Logstash 1.4.1 multiline codec not workingLogstash 1.4.1 多行编解码器不起作用
【发布时间】:2014-06-27 16:49:52
【问题描述】:

我正在尝试从日志文件中解析多行数据。 我尝试过多行编解码器和多行过滤器。 但它对我不起作用。

日志数据

INFO 2014-06-26 12:34:42,881 [4] [HandleScheduleRequests] Request Entity:
User Name : user
DLR : 04
Text : string
Interface Type : 1
Sender : sdr
DEBUG 2014-06-26 12:34:43,381 [4] [HandleScheduleRequests] Entitis is : 1 System.Exception

这是配置文件

input {

   file {
           type => "cs-bulk"
           path =>
           [
                   "/logs/bulk/*.*"
           ]

           start_position => "beginning"
           sincedb_path => "/logstash-1.4.1/bulk.sincedb"

           codec => multiline {
                    pattern => "^%{LEVEL4NET}"
                    what => "previous"
                    negate => true
           }
   }
}

output {

  stdout { codec => rubydebug }

  if [type] == "cs-bulk" {

     elasticsearch {
       host => localhost
       index => "cs-bulk"
     }
   }
}

filter {

  if [type] == "cs-bulk" {
    grok {
        match => { "message" => "%{LEVEL4NET:level} %{TIMESTAMP_ISO8601:time} %{THREAD:thread} %{LOGGER:method} %{MESSAGE:message}" }
         overwrite => ["message"]
    }
  }
}

这就是我在logstash解析多行部分时得到的 它只是获取第一行,并将其标记为多行。 其他行未解析!

{
    "@timestamp" => "2014-06-27T16:27:21.678Z",
       "message" => "Request Entity:",
      "@version" => "1",
          "tags" => [
        [0] "multiline"
    ],
          "type" => "cs-bulk",
          "host" => "lab",
          "path" => "/logs/bulk/22.log",
         "level" => "INFO",
          "time" => "2014-06-26 12:34:42,881",
        "thread" => "[4]",
        "method" => "[HandleScheduleRequests]"
}

【问题讨论】:

    标签: multiline logstash


    【解决方案1】:

    在 grok 模式的开头放置一个 (?m)。这将允许正则表达式不会停在\n

    【讨论】:

      【解决方案2】:

      不太清楚发生了什么,但使用多行过滤器而不是像这样的编解码器:

      input {
        stdin {
        }
      }
      
      filter {
           multiline {
                          pattern => "^(WARN|DEBUG|ERROR)"
                          what => "previous"
                          negate => true
                 }
      }
      

      在我的测试中有效...

      {
             "message" => "INFO 2014-06-26 12:34:42,881 [4] [HandleScheduleRequests] Request Entity:\nUser Name : user\nDLR : 04\nText : string\nInterface Type : 1\nSender : sdr",
            "@version" => "1",
          "@timestamp" => "2014-06-27T20:32:05.288Z",
                "host" => "HOSTNAME",
                "tags" => [
              [0] "multiline"
          ]
      }
      {
             "message" => "DEBUG 2014-06-26 12:34:43,381 [4] [HandleScheduleRequests] Entitis is : 1 System.Exception",
            "@version" => "1",
          "@timestamp" => "2014-06-27T20:32:05.290Z",
                "host" => "HOSTNAME"
      }
      

      除了...我使用的测试文件从未打印出最后一行(因为它仍在寻找更多内容)

      【讨论】:

      • 我尝试了多行过滤器,但它不起作用。我已经删除了 GROK 过滤器并且它有效!我正在尝试弄清楚如何使两个过滤器一起工作
      • 我相信您现在遇到的问题是 grok 不再匹配多行输入,因为 grok 不能很好地处理换行符。我在另一个 q/a 上看到了一个建议,建议在进行 grok 之前使用 gsub\n 替换为空格。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多