簡體   English   中英

Logstash-希臘多行

[英]Logstash - grok multiline

我嘗試在grok過濾器中使用多行,但無法正常工作。

我的日志是

H3|15:55:04:760|exception|not working properly
message:space exception
 at line number 25

我的conf文件是

input { file {

    path => "logs/test.log"
    start_position => beginning
    sincedb_path => "/dev/null"
  }}
filter{

 multiline {

    pattern => "^(\s|[A-Z][a-z]).*"
    what => "previous"
  }
if [message] =~ /H\d+/{

grok {

match => ["message", "(?m)%{USERNAME:level}\|%{TIME:timestamp}\|%{WORD:method}\|%{GREEDYDATA:error_Message}" ]
  }
   }

   else {

   grok {

match => ["message", "(?m)%{GREEDYDATA:error_Message}" ]
  }
   }
  }

output {elasticsearch { host => "localhost"  protocol => "http" port => "9200" }}

我能夠處理日志文件的第一行,但是在我想使用多行的地方,日志文件的第二行不起作用

我想要的輸出

{

"@timestamp" => "2014-06-19 00:00:00,000"
"path" => "logs/test.log"
"level"=>"H3"
"timestamp"=>15:55:04:760
"method"=>exception
"error_message"=>not working properly
},
{
"@timestamp" => "2014-06-19 00:00:00,000"
"path" => "logs/test.log"
"error_message" => "space exception at line 25"
}   

請幫助我獲得所需的輸出。

您的多行配置說:“如果找到此模式,請與上一行保持一致”。

您的模式“ ^(\\ s | [AZ] [az])。*”表示“空格或大寫字母后跟小寫字母,再跟其他內容”。

因此,“ foo”或“ California”將匹配,但“ H3”將不匹配。

我建議一個匹配多行表達式開始的模式,並使用“求反”功能使所有不匹配該模式的行都連接到原始行:

filter {
    multiline {
      pattern => "^[A-Z][0-9]\|"
      negate => 'true'
      what => 'previous'
    }
  }
}

這將采用“ H3 |” 行作為開始,然后將所有其他行加入其中。 根據行開頭的值范圍,您可能需要編輯regexp。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM