2015-04-15 3 views
2

У меня эти журналы, где я пытаюсь извлечь несколько данных из каждой строки с помощью grok. Но, похоже, некоторые матчи не принимаются во внимание, хотя они кажутся мне прекрасными.Logstash grok множественные совпадения неудачи

Вот пример строки:

"#wtb# GetSP ok. Referer:http://test.redacted.com/path?query=string. Wtb:535e2554bdfdf33a22f564d0. Name:Client. Eans:3017565410073." 

И Heres' соответствующая часть файла конф:

grok{ 
    break_on_match => false 
    match => [ 
    "msg", "Referer:%{URI:referer}\.", 
    "msg", "Wtb:%{WORD:wtb}", 
    "msg", "Name:(?<name>[^\.]+)", 
    "msg", "Eans:(?<eans>[\d,]+)", 
    "referer", "https?://%{HOSTNAME:host}" 
    ] 
    tag_on_failure => [] 
} 

Я использую несколько матчей, потому что каждая строка может быть любая комбинация различные параметры, указанные в образце.
В Кибане в событиях добавлены referer и host поля, но все остальные отсутствуют (wtb, name, eans). Понятия не имею почему. Он не останавливается после успешного совпадения с момента добавления последнего шаблона. Может ли кто-нибудь определить, что мне не хватает?

+0

Синтаксис на странице подтверждения повтора (https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#plugins-filters-grok-match) работал для меня с несколькими совпадениями. – Matthias

ответ

5

Простой ответ заключается в том, что grok не работает так. Способ, которым он реализован, соответствует только первому шаблону в вашем списке grok для заданного ключа.

Если вы посмотрите на исходный код jls-grok-0.10.12/lib/grok/pure/pile.rb, вы увидите это:

def match(string) 
    @groks.each do |grok| 
    match = grok.match(string) 
    if match 
     return [grok, match] 
    end 
    end 
    return false 
end # def match 

, который в основном вызывает его, чтобы остановить ГРОК ворс для данного ключа после первого матча.

Чтобы сделать то, что вы хотите, вам нужно разбить grok, так что есть только один шаблон msg за grok.

+0

Мы всегда должны читать исходный код, вы правы. Да, это то, что я закончил, разбивая шаблоны msg в разных groks. – Antoine

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