2017-01-09 4 views
0

Я пытаюсь понять шаблон DATA в grok plugin logstash. Согласно документации DATA спичек следующим образом:Диаграмма данных в logstash - grok

DATA .*? -> Я интерпретировал это как-нибудь с длиной 1 до п [Пожалуйста Поправьте меня, если я понимаю неправильно].

В моем сценарии он не может правильно разобрать мой ввод.
Logstash конф:

input{ 
file { 
     path => ["/home/osboxes/logstash_conf/mydir/test_logs/*"] 
     start_position => beginning 
     sincedb_path => "/home/osboxes/logstash_conf/mydir/.sincedb" 
    } 
} 
filter{ 
     grok { 
       match => { "message" => "^%{TIMESTAMP_ISO8601:timeStamp},%{DATA:ID},%{DATA:somedata}" } 
     } 
} 
output { 
    stdout { 
     codec => json_lines 
    } 
} 

Вход:

2017-01-09 02:00:03.887,a,a 

Выход:

{ 
    "message": "2017-01-09 02:00:03.887,a,a", 
    "@version": "1", 
    "@timestamp": "2017-01-09T12:28:20.958Z", 
    "path": "/home/osboxes/logstash_conf/mydir/test_logs/data", 
    "host": "osboxes", 
    "timeStamp": "2017-01-09 02:00:03.887", 
    "ID": "a" 
} 

Я ожидал, что тег somedata будет заполняться значением [как это сделал для тега ID], но он не указан на выходе. Любой, пожалуйста, помогите мне понять поведение модели DATA.

ответ

1

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

выписал, проблемная часть выглядит следующим образом:

,(.*?),(.*?) (Захват группа добавлена ​​для читаемости)

Совпадение: ,a,

1.Take первого , и сравнить его.

2.Try в соответствии с .*? как можно (посимвольно до шаблон действителен) это совпадает с a

3.Try, чтобы соответствовать следующей ,. Это происходит так, что сделано первое .*?.

4.Попробуйте, чтобы соответствовать .*?. Так как это может соответствовать ноль раз, он сделает это, и соответствие будет завершено.


Простое решение вашей проблемы, чтобы добавить $ в конце вашего шаблона. $ - это конец строкового якоря, поэтому ваш второй .*? вынужден соответствовать другому a.

+0

Благодарим вас за ответ. В этом случае, надежно ли иметь шаблон DATA или мне нужно искать другой шаблон? Как вы упомянули, оно может совпадать с нулевыми символами, в некоторых случаях оно может пропустить значения, которые мне действительно интересны ... –

+0

@ G.S Вы должны быть добрым, если прекратите свой шаблон с помощью '$'. Это обеспечит, чтобы ваш второй 'DATA' __has__ соответствовал чему-то. – Fairy

+0

Поймите. Я просто волнуюсь, если подобное поведение происходит для DATA в середине. '$' может использоваться только для последнего поля. Не уверен, что 'DATA' может выйти из строя для полей в середине. Просто чтобы убедиться, что он надежный –

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