Моя цель состояла в том, чтобы создать _id в elasticsearch, что есть время протоколирования в нем - так, что он никогда не будет повторяться, даже если журнал снова отправляется через logstash
Бросив еще несколько часов на эту проблему - У меня есть некоторые выводы, которые, насколько мне известно, недостаточно хорошо документированы и рекомендуют работать.
1) Если в файле журнала есть часовой пояс - ничего не может быть сделано для его изменения в logstash. Поэтому - не тратьте время на часовые пояса или частичное совпадение или добавление часового пояса. Если время имеет Z в конце - тогда это будет GMT. Я думаю, что это ошибка, когда это происходит - предупреждение не выдается.
2) Выход Logstash для стандартного вывода/файла со временем в локальное время независимо от формата входной строки.
3) Logstash использует время в свое местное время - поэтому объединение времени в переменную становится испорченным - даже если исходная строка была GMT. поэтому просто не пытайтесь работать с переменной @timestamp !!!
4) эластичный поиск работает в GMT - поэтому он ведет себя правильно. Итак, то, что вы видите в выводе logstash как «@timestamp» => «2015-02-21T20: 26: 24.921-08: 00», правильно интерпретируется методом упругого поиска как «@timestamp» => «2015-02-21T12 : 26: 24.921Z»
так что моя работа вокруг выглядит следующим образом: 1) хранить журналы с временной меткой, НЕ @timestamp 2) последовательно экономить время в лог-файлы, как по Гринвичу и помечать их с задней Z 3) используйте фильтр даты в его базовой форме. Нет атрибута временной зоны
filter {
date {
match => ["log_time", "YYYY-MM-dd'T'HH:mm:ss.SSSZ"]
#timezone => "Etc/GMT-8" <--- THIS DOES NOT WORK IF THERE IS A Z IN SOURCE
}
}
4) Производите производные по времени непосредственно из переменной журнала - не из @timestamp. например
output {
stdout { codec => rubydebug }
elasticsearch {
host => localhost
document_id => "%{log_time}-%{host}" # <--- DO THIS
# document_id => "%{@timestamp}-%{host}" <--- DON'T DO THIS
}
}
Если Джордан Сиссель случается читать это - я считаю, что logstash должен соответствовать elasticsearch как по умолчанию - или, по крайней мере, есть возможность для вывода и работать внутри по Гринвичу. У меня было скалистое начало делать то, что каждый проходит, когда тестирует инструмент в первый раз с существующими журналами.
Используете ли вы [фильтр даты @ logstash] (http://logstash.net/docs/1.4.2/filters/date)? Если это так, вы можете установить часовой пояс на «Etc/UTC» в явном виде. –
Существует также [эта проблема] (https://logstash.jira.com/browse/LOGSTASH-1646). –
Если поле '@ timestamp' уже установлено (как правило, другим экземпляром Logstash), я уверен, что Logstash его не коснется. Не могли бы вы пояснить, что на самом деле происходит здесь? Как выглядит ваша конфигурация? В идеале исходный лог-файл должен указывать метку времени в UTC или включать идентификатор метки времени в той же строке, которую вы подаете на фильтр даты. –