一、版本信息
ElasticSearch版本:elasticsearch-5.4.2.rpm
Kibana版本:kibana-5.4.2-linux-x86_64.tar.gz
logstash版本:logstash-2.3.4.tar.gz(为了适配kafka0.8.2.2版本)
二、时区简介
地球总是自西向东自转,东边总比西边先看到太阳,东边的时间也总比西边的早。东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒来计算。
为了照顾到各地区的使用方便,又使其他地方的人容易将本地的时间换算到别的地方时间上去。1884年的国际经度会议规规定将地球表面按经线从南到北划分为24个时区,并且规定相邻区域的时间相差1小时。当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时),跨过几个区域就加或减几小时。
1、时区含义
UTC(Universal Time Coordinated世界协调时间),又叫做0时区
CST(China Standard Time北京时间),又叫做东8区(CST= GMT + 8 =UTC + 8 )
PDT(美国时区)
GMT,英国(格林尼治天文台旧址) 的格林尼治标准时间,也就是世界时。GMT的正午是指当太阳横穿格林尼治子午线(本初子午线)时的时间。但由于地球自转不均匀不规则,导致GMT不精确,现在已经不再作为世界标准时间使用。UTC与GMT基本上等同,误差不超过0.9秒。
2、UNIX时间戳
计算机中的UNIX时间戳,是以GMT/UTC时间
「1970-01-01T00:00:00」 为起点,到具体时间的秒数,不考虑闰秒。
3、ELK时区介绍
ElasticSeaerch,Logstash 默认都是UTC时区,Kibana则是根据本地浏览器显示本地时区,已经对显示做了转换。Kibana时区修改如下图
默认为浏览器时间,现在改为UTC时间
4、logstash入库差8小时问题(延迟8小时创建索引)
由于我们处于东8区,logstash搬运ES的时候当我们到8点后才会发生索引切割,导致我们这显示今天8点的日志存入了昨天的索引。
如何解决这个问题,首先我们看下logstash获取时间的代码
进入目录。
cd /usr/local/logstash-2.3.4/vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.4-java/lib/logstash
vim timestamp.rb
我们可以看到时间默认初始化为utc的时区
修改后的样式
修改后的样式
UTC = org.joda.time.DateTimeZone.forID(“UTC”)
修改为:
UTC = org.joda.time.DateTimeZone.getDefault()
vim string_interpolation.rb
显示格式也为utc格式
修改后的样式
配置文件需要添加:
filter {
ruby {
code => "event.timestamp.time.localtime"
}
}