Фильтр даты Logstash в специальном формате даты

Я пытаюсь сохранить старые файлы журналов в эластичном формате, и я использую для этого logstash.

отметки времени в журналах имеют следующий формат:

13 AUG 2015 | 07:04:35 | .......

1-я проблема заключалась в том, что месяц в верхнем регистре, поэтому я скопировал шаблон «МЕСЯЦ», как он появляется в шаблонах grok, и все это заключил в верхний регистр:

исходный МЕСЯЦ:

MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b

мой "MONTHCAP" в верхнем регистре:

MONTHCAP \b(?:JAN(?:UARY)?|FEB(?:RUARY)?|MAR(?:CH)?|APR(?:IL)?|MAY|JUN(?:E)?|JUL(?:Y)?|AUG(?:UST)?|SEP(?:TEMBER)?|OCT(?:OBER)?|NOV(?:EMBER)?|DEC(?:EMBER)?)\b

Следующее, что я пытаюсь сделать, это использовать фильтр даты, поэтому эластичный использует метку времени из журнала как @timestamp, а НЕ время строки, хранящейся в эластичном:

date{
                match => ["MONTHDAY","dd","MONTHCAP","MMM","YEAR","yyyy","TIME","HH:mm:ss"]
    }

Проблема в том, что я получаю следующую ошибку при попытке сохранить данные:

Error: Cannot register filter date plugin. The error reported is:
Illegal pattern component: O for pattern 'MONTHCAP'

дополнительная информация: это Grok-фильтр, который я использую для анализа строк журнала:

%{MONTHDAY} %{MONTHCAP} %{YEAR} \| %{TIME} \|

любая идея, почему я продолжаю получать эту ошибку, когда я использую шаблон «MMM»? Благодарность!


person Eitan Vesely    schedule 18.08.2015    source источник


Ответы (1)


В документации совпадение только для одного поля:

match => [ "logdate", "MMM dd YYY HH:mm:ss",
      "MMM  d YYY HH:mm:ss", "ISO8601" ]

Требуется первое решение, соответствующее полю logdate.

Вам нужно создать поле, в котором будет указана ваша дата, и после этого вы сможете выполнить фильтр даты.

 match => [logdate, dd MMM yyyy HH:mm:ss]
person mherbert    schedule 18.08.2015
comment
Спасибо я поняла. Но как мне объединить все отдельные поля метки времени в одно? - person Eitan Vesely; 18.08.2015
comment
filter {mutate {add_field = ›{foo _% {somefield} =› Привет, мир, от% {host}}}} - person mherbert; 18.08.2015
comment
Благодарю. теперь, когда он заработал, я добавил все поля, чтобы создать одно, как вы предложили 'add_field = ›{logTimeStamp =›% {day}% {month}% {year}% {time}}', но по какой-то причине фильтр даты по-прежнему не работает :( date {match = ›[logTimeStamp, dd MMM YYYY HH: mm: ss]}. Может ли дело быть в том, что месяц написан заглавными буквами ?? т.е. JAN, FEB и т. д. и MMM представляет Ян, Фев, ... и т. д.? - person Eitan Vesely; 25.08.2015