2013-09-17 3 views
0

Я пытаюсь структурно фильтровать свой журнал с помощью фильтра grok в logstash.Фильтрация logstash с использованием grok

Это образец журнала:

5d563f04-b5d8-4b8d-b3ac-df26028c3719 SoapRequest CheckUserPassword <?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><CheckUserPassword xmlns=\"http://users.tvinci.com/\"><sWSUserName>users_199</sWSUserName><sWSPassword>11111</sWSPassword><sUserName>test</sUserName><sPassword>123456</sPassword><bPreventDoubleLogins>false</bPreventDoubleLogins></CheckUserPassword></soap:Body></soap:Envelope> 

И это мой фильтр шаблон матч Grok:

%{DATA:method_id} %{WORD:method_type} %{WORD:method} %{GREEDYDATA:data} 

Структура Я получаю это:

"method_id" => "963ad634-92d6-4a6c-9e6b-ef57e6bcd374", 
     "method_type" => "SoapRequest", 
     "method" => "CheckUserPassword", 
     "data" => " <?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><CheckUserPassword" 

, который является правильную структуру, за исключением поля данных, здесь я ожидаю увидеть весь XML SOAP (как вы можете видеть, он разрезан в mi ddle)

Любые предложения?

+0

попытка% {DATA: method_id}% {WORD: method_type}% {WORD: метод} (? . * $) –

ответ

0

На самом деле, вы должны просто работать. В вашем конфиге должно быть что-то еще не так. Попробуйте ниже:

logstash.config


input { 
    stdin { 
    } 
} 

filter { 
    grok { 
    match => [ "message", "%{DATA:method_id} %{WORD:method_type} %{WORD:method} %{GREEDYDATA:data}" ] 
    } 
} 

output { 
    stdout { debug => true } 
} 

$ java -jar logstash-1.2.1-flatjar.jar agent -f logstash.conf 
5d563f04-b5d8-4b8d-b3ac-df26028c3719 SoapRequest CheckUserPassword <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CheckUserPassword xmlns="http://users.tvinci.com/"><sWSUserName>users_199</sWSUserName><sWSPassword>11111</sWSPassword><sUserName>test</sUserName><sPassword>123456</sPassword><bPreventDoubleLogins>false</bPreventDoubleLogins></CheckUserPassword></soap:Body></soap:Envelope> 
{ 
     "message" => "5d563f04-b5d8-4b8d-b3ac-df26028c3719 SoapRequest CheckUserPassword <?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><CheckUserPassword xmlns=\"http://users.tvinci.com/\"><sWSUserName>users_199</sWSUserName><sWSPassword>11111</sWSPassword><sUserName>test</sUserName><sPassword>123456</sPassword><bPreventDoubleLogins>false</bPreventDoubleLogins></CheckUserPassword></soap:Body></soap:Envelope>\r", 
    "@timestamp" => "2013-10-26T04:01:19.386Z", 
     "@version" => "1", 
      "host" => "NYCL530", 
     "method_id" => "5d563f04-b5d8-4b8d-b3ac-df26028c3719", 
    "method_type" => "SoapRequest", 
     "method" => "CheckUserPassword", 
      "data" => "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><CheckUserPassword xmlns=\"http://users.tvinci.com/\"><sWSUserName>users_199</sWSUserName><sWSPassword>11111</sWSPassword><sUserName>test</sUserName><sPassword>123456</sPassword><bPreventDoubleLogins>false</bPreventDoubleLogins></CheckUserPassword></soap:Body></soap:Envelope>\r" 
} 
2

Используйте следующий фильтр:

mutate { 
    gsub => [ 

    "message", "\n", "", # Unix newline 

    "message", "\r", "", # OS X newline 

    "message", "\r\n", "" # Windows newline 

    ] 
} 
+0

Это помогло мне, у меня было множество новых строк, испортивших мой XML. – Fawix

0

Если у вас возникли проблемы с новыми линиями, как было предложено другой плакат

Из сообщения, которое я видел в Интернете, похоже, что эта проблема также решена с использованием опции многострочного кодека в поле входного файла.

В приведенном ниже примере каждый раз, когда я вижу TIMESTAMP_ISO8601 в самом начале строки, я объявляю, что это новая «запись», и все до следующей отметки времени в начале строки является частью этой записи.

input { 
    file { 
    path => "/var/elasticsearch-input/Log.log" 
    type => "log4netLog" 
    codec => multiline { 
     pattern => "^%{TIMESTAMP_ISO8601} " 
     negate => true 
     what => previous 
    } 
    } 
} 

В вашем случае, вам нужно написать регулярное выражение для GUID и поместить его туда в качестве шаблона. это, вероятно, будет выглядеть так, но я не уверен на 100%, так как я его не тестировал.

input { 
    file { 
    path => "/var/elasticsearch-input/Log.log" 
    type => "log4netLog" 
    codec => multiline { 
     pattern => "^%{UUID} " 
     negate => true 
     what => previous 
    } 
    } 
} 

Документация: https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html Статья, что я вытащил его из (под Настройка logstash - intputs): http://www.ben-morris.com/using-logstash-elasticsearch-and-log4net-for-centralized-logging-in-windows/

Смежные вопросы