2015-04-01 1 views
6

Я засыпаю свои журналы в Elasticsearch. Таким образом, для создания индекса по дате войти это метка время, я использую date фильтр так:Syslog временная метка без года?

date { 
       "locale" => "en" 
       match => ["timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"] 
       target => "@timestamp" 
     } 

Я использую журналы из Syslog и формат системного журнала метка времени не делает иметь год:

# Syslog Dates: Month Day HH:MM:SS 
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME} 

Так после использования фильтра даты созданный индекс выглядит как logstash-2015.12.26 , если я читаю журнал 26-го декабря 2014 года. Так как временная метка недоступна в журнале, она выбирает текущий год по умолчанию.

Любая идея, как сделать правильный индекс?

ответ

7

Отсутствие года в строке, обрабатываемой Joda Time, в настоящее время в Logstash по умолчанию используется год, когда был запущен процесс Logstash. См. github.com/logstash-plugins/logstash-filter-date bug #3. В качестве временного временного решения добавьте временный фильтр, чтобы добавить правильный год (2014) в конец поля метки времени и отредактируйте свой шаблон date filter, чтобы включить YYYY.

filter { 
    mutate { 
    replace => ["timestamp", "%{timestamp} 2014"] 
    } 
    date { 
    locale => "en" 
    match => ["timestamp", 
       "MMM d HH:mm:ss YYYY", 
       "MMM dd HH:mm:ss YYYY", 
       "ISO8601"] 
    } 
} 
+1

Так, за исключением временного жесткого кода, существует не обходное решение? –

+0

Я не верю, что нет, нет. Ну, кроме сброса времени на машине, где вы запускаете Logstash, но это будет очень плохая идея. –

0

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

Пример того, как извлечь дату/время из файла можно найти здесь: Logstash: How to use date/time in a filename as an imported field

1

Вы можете преобразовать строку даты в формате даты, используя фильтр даты. По умолчанию, когда вы используете фильтр даты, дата (или дата-время) вашего журнала будет перезаписывать @timestamp. Итак, в вашем фильтре вам не нужна цель. Вы просто используете его, если хотите преобразовать переменную строку в дату.

Пример: матч => [ "временная метка", "МММ д HH: мм: сс", "МММ ДД ЧЧ: мм: сс", "ISO8601"]