2016-06-08 45 views
1

我已經在logstash中寫入了一個conf文件來讀取jms日誌,問題是我無法將記錄拆分成新行前過濾。這裏是原始數據Logstash讀取新行問題

####<Sep 20, 2015 12:00:12 AM> <> <1442678412960> <809000> <ID:<307061.1442678412716.0>> <> <[email protected]_audit_als_dQue> <Consumed> <<anonymous>> <MC:CA(local):OAMI(CmsCorpAlsPrd_cdceap7e_32040.jms.connection36.session121.consumer125)> <&lt;?xml version="1.0" encoding="UTF-8"?&gt; 
&lt;mes:WLJMSMessage xmlns:mes="http://www.bea.com/WLS/JMS/Message"&gt;&lt;mes:Header&gt;&lt;mes:JMSDeliveryMode&gt;PERSISTENT&lt;/mes:JMSDeliveryMode&gt;&lt;mes:JMSExpiration&gt;0&lt;> <> ####<Sep 20, 2015 12:00:13 AM> <> <1442678413018> <392000> <ID:<307061.1442678412943.0>> <> <[email protected]_audit_als_dQue> <Produced> <<anonymous>> <> <&lt;?xml version="1.0" encoding="UTF-8"?&gt; 
&lt;mes:WLJMSMessage xmlns:mes="http://www.bea.com/WLS/JMS/Message"&gt;&lt;mes:Header&gt;&lt;mes:JMSDeliveryMode&gt;PERSISTENT&lt;/mes:JMSDeliveryMode&gt;&lt;mes:JMSExpiration&gt;0&lt;> <> 

,這裏是在logstash我的conf文件

input{ 
    stdin{} 
    file{ 
     type => "txt" 
     path => "C:\HA\jms\jms.log" 
     start_position => "beginning" 
    } 
} 
filter{ 
    multiline{ 
     pattern => "\&" 
     what => previous 
    } 
    grok{ 
    match => {"message" => ['####<%{GREEDYDATA:Date}>%{SPACE}<>%{SPACE}<%{GREEDYDATA:Millisec_Date}>%{SPACE}<%{GREEDYDATA:Nanosec_Date}>%{SPACE}<ID:<%{GREEDYDATA:JMS_message_ID}>>%{SPACE}<>%{SPACE}<%{GREEDYDATA:JMS_destination_name}>%{SPACE}<%{GREEDYDATA:JMS_message_eventname}>%{SPACE}<<%{GREEDYDATA:JMS_username}>>%{SPACE}<%{GREEDYDATA:JMS_correlationID}>%{SPACE}<%{GREEDYDATA:Mcls}:JMSDeliveryMode&gt;%{WORD:JMSDeliveryMode}&lt;/mes:JMSDeliveryMode&gt;&lt;mes:JMSExpiration&gt;%{NUMBER:JMSExpiration}&lt;>%{SPACE}<>']} 
     } 
} 
output{ 
    elasticsearch { hosts => ["localhost:9200"] 
    } 
    stdout { codec => rubydebug } 
} 

所有的事情都很順利,當我運行的conf除,結果給了我這個

    "@version" => "1", 
       "@timestamp" => "2016-06-08T06:23:50.543Z", 
        "path" => "C:\\HA\\jms\\jms.log", 
        "host" => "WIN-07LLQEN2SJB", 
        "type" => "txt", 
        "tags" => [ 
     [0] "multiline" 
    ], 
        "Date" => "Sep 20, 2015 12:00:12 AM> <> <1442678412960> <809000> <ID:<307061.1 
442678412716.0>> <> <[email protected]_audit_als_dQue> <Consumed> <<anonymou 
s>> <MC:CA(local):OAMI(CmsCorpAlsPrd_cdceap7e_32040.jms.connection36.session121.consumer125)> <&lt;?xml version=\"1.0\" 
encoding=\"UTF-8\"?&gt;\n&lt;mes:WLJMSMessage xmlns:mes=\"http://www.bea.com/WLS/JMS/Message\"&gt;&lt;mes:Header&gt;&lt; 
mes:JMSDeliveryMode&gt;PERSISTENT&lt;/mes:JMSDeliveryMode&gt;&lt;mes:JMSExpiration&gt;0&lt;> <> \n####< 
Sep 20, 2015 12:00:13 AM", 
      "Millisec_Date" => "1442678413018", 
      "Nanosec_Date" => "392000", 
      "JMS_message_ID" => "307061.1442678412943.0", 
    "JMS_destination_name" => "[email protected]_audit_als_dQue", 
    "JMS_message_eventname" => "Produced", 
      "JMS_username" => "anonymous", 
        "Mcls" => "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;mes:WLJMSMessage xmlns:mes=\"http: 
//www.bea.com/WLS/JMS/Message\"&gt;&lt;mes:Header&gt;&lt;mes", 
      "JMSDeliveryMode" => "PERSISTENT", 
      "JMSExpiration" => "0" 
} 

顯然,日期已經有部分已經讀取了第一條消息中的所有數據,並且似乎將我分類爲第二條消息的數據。無論如何要解決這個在新行中打破不同的記錄?我已經配置幫助

回答

0

一段時間後,兩件事情:

  1. 不要使用GREEDYDATA匹配的日期。顧名思義它很貪婪。使用更具體的grok表達式。
  2. 更好的多行條件可能是「除非該行以### <與前一行連接開始」。如果你堅持堅持使用你現在的模式,你至少應該在^之前加上^,這樣它只能匹配行首的符號。