2015-07-17 4 views
0

Я пытаюсь извлечь данные из моего сообщения log4j с помощью logstash. сообщение выглядит следующим образом:logstash: как извлечь данные из сообщения log4j?

Method findAll - Start by : bokc 

Я хотел бы, чтобы извлечь имя метода: «FindAll» и пользователя «bokc».

Как я могу это сделать?

Я использую logstash 1.5.2 и мой конфиг является:

input { 
    log4j { 
     mode => "server" 
     type => "log4j-artemis" 
     port => 4560 
    } 
} 

filter { 
    multiline { 
    type => "log4j-artemis" 
    pattern => "^\\s" 
    what => "previous" 
    } 
    mutate { 
    add_field => [ "source_ip", "%{host}" ] 
    } 
} 
+0

Вы посмотрели фильтр grok? https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html –

+0

Да, но я не знаю, как использовать его для добавления поля. Вход log4j дает мне поля, которые я хочу. Я просто хочу добавить 2 поля (имя метода и пользователя), не переписывая весь фильтр. – BokC

ответ

0

Используйте grok filter:

filter { 
    grok { 
    match => [ 
     "message", 
     "^Method %{WORD:method} - Start by : %{USER:user}" 
    ] 
    tag_on_failure => [] 
    } 
} 

Это извлекает два слова в поле "метод" и "пользователь". Установка tag_on_failure гарантирует, что сообщения, не соответствующие совпадению, не помечены _grokparsefailure. Поскольку большинство сообщений не предположительно, чтобы соответствовать шаблону, не имеет смысла отмечать их как сбои.

+0

Это работает. Благодарю. – BokC

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