2016-06-08 3 views
1

Я написал файл conf в logstash, чтобы прочитать журнал 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

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 } 
} 

Все дела шли хорошо, за исключением, когда я бегу конф и результат дает мне эту

    "@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. Лучшее многострочное условие, вероятно, было бы «если линия не начинается с ### < соединяется с предыдущей строкой». Если вы настаиваете на том, чтобы придерживаться своего текущего шаблона, вы должны, по крайней мере, добавить его с помощью ^, чтобы он соответствовал только амперсандам в начале строки.
Смежные вопросы