旧系统的日志记录的时间是北京时间'yyyy-MM-dd HH:mm:ss'格式的,导入elk希望能已日志时间建立索引,方便查询。由于kibana的前端自动处理utc时间,会将elasticsearch的utf时间转换成当前的时间,所有我们在elk中统一使用utc时间。
通过配置logstash的filter处理
步骤一:配置grok,找到符合日志时间格式的pattern,TIMESTAMP_ISO8601是内置的pattern,从源码看出%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? 符合我们的日志的格式
步骤二:配置date, 从步骤一获取到logtime中匹配“yyyy-MM-dd HH:mm:ss”的时间,重写@timestamp;这里关键的一点是指定timezone为日志的时区,我们使用Asia/Shanghai, 这样logstash才能知道时间的时区信息,转换成对应的utc时间保存到elasticsearch

参考:http://blog.csdn.net/xiaoyu_bd/article/details/52531051
官网:https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html#plugins-filters-date-locale
pattern源码:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
时区:http://joda-time.sourceforge.net/timezones.html