Logstash преобразование даты в действительное время joda (@timestamp)
Надеюсь, кто-нибудь сможет мне помочь!
У меня есть вопрос о logstash. Я Грок следующую дату с succes: 26 / Jun/2013:14:00:26 +0200
Далее, я хочу, чтобы эта дата использовалась в качестве метки @timestamp события. Как вы знаете, logstash автоматически добавляет метку времени.
Замена метки времени, которую добавляет logstash, может быть выполнена фильтром дат. Я добавил следующий фильтр даты: match = > ["date", "dd/MMM/YYYY:HH:mm:ss Z"]
Но, по какой-то причине, это не работает. Когда я проверяю его, я вижу, что logstash просто добавляет свою собственную метку времени.
Код:
grok {
type => "log-date"
pattern => "%{HTTPDATE:date}"
}
date{
type => "log-date"
match => [ "date", "dd/MMM/YYYY:HH:mm:ss Z"]
}
Мне нужно это сделать, чтобы я мог добавлять события в elasticsearch.
Заранее спасибо!
2 ответа:
Я использовал следующий подход:
# strip the timestamp and force event timestamp to be the same. # the original string is saved in field %{log_timestamp}. # the original logstash input timestamp is saved in field %{event_timestamp}. grok { patterns_dir => "./patterns" match => [ "message", "%{IRODS_TIMESTAMP:log_timestamp}" ] add_tag => "got_syslog_timestamp" add_field => [ "event_timestamp", "%{@timestamp}" ] } date { match => [ "log_timestamp", "MMM dd HH:mm:ss" ] } mutate { replace => [ "@timestamp", "%{log_timestamp}" ] }
Теперь моя проблема заключается в том, что, даже если @timestamp будет заменен, я хотел бы сначала преобразовать его в формат, совместимый с ISO8601, чтобы другие программы не имели проблем с его интерпретацией, как временная метка, присутствующая в "event_timestamp":
"@timestamp" => "Mar 5 14:38:40", "@version" => "1", "type" => "irods.relog", "host" => "ids-dev", "path" => "/root/logstash/reLog.2013.03.01", "pid" => "5229", "level" => "NOTICE", "log_timestamp" => "Mar 5 14:38:40", "event_timestamp" => "2013-09-17 12:20:28 UTC", "tags" => [ [0] "got_syslog_timestamp" ]
Вы можете легко преобразовать его, так как у вас есть информация о годе... В моем случае мне пришлось бы разбирать его из атрибута" path " (filename)... но тем не менее, кажется, что нет convert_to_iso8901 = > директива @ timestamp.
Надеюсь, что это поможет с вашей проблемой в любом случае! :)
Приведенный выше ответ-это просто обходной путь !, попробуйте добавить
locale => "en"
к вашему коду.
Если не добавлено, дата будни и названия месяцев будут проанализированы с использованием языка локали платформы по умолчанию (испанский, французский или любой другой), и именно поэтому он не работал (так как ваш журнал на английском языке).date{ type => "log-date" match => [ "date", "dd/MMM/YYYY:HH:mm:ss Z"] locale => "en" }