誘因:主要原因是由于logstash底層取的timestamp是直接獲取的服務(wù)器的系統(tǒng)時(shí)間(大多數(shù)情況下是直接以GMT時(shí)間或者UTC時(shí)間去獲取的)棚潦,這樣拣技,對(duì)于在東八區(qū)的我們批狐,就可能會(huì)出現(xiàn)這個(gè)時(shí)間戳少了8個(gè)小時(shí)的問(wèn)題
解決方法:
一瓮下、直接修改服務(wù)器的系統(tǒng)時(shí)區(qū)记劈,不過(guò)這種方法有時(shí)候不一定起作用盖腕,因?yàn)橛锌赡苣愕姆?wù)器本身就是使用CST時(shí)區(qū)的茄菊,但是這個(gè)logstash可能還是會(huì)從GMT時(shí)間或者UTC時(shí)間獲取疯潭,本人親測(cè),在Linux環(huán)境比較有效
二面殖、在logstash的配置中添加:
filter {
ruby {#設(shè)置一個(gè)自定義字段'timestamp'[這個(gè)字段可自定義]竖哩,將logstash自動(dòng)生成的時(shí)間戳中的值加8小時(shí),賦給這個(gè)字段
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*3600)"
}
ruby {#將自定義時(shí)間字段中的值重新賦給@timestamp
code => "event.set('@timestamp',event.get('timestamp'))"
}
mutate {#刪除自定義字段
remove_field => ["timestamp"]
}
}
這個(gè)方式在Windows上配合kibana可能會(huì)有一些問(wèn)題脊僚,因?yàn)閃indows本身你的時(shí)間使用的是UTC+8,然而相叁,logstash使用這個(gè)會(huì)使用UTC時(shí)間來(lái)作為@timestamp的時(shí)間,但是你的kibana在Windows上面的默認(rèn)配置會(huì)是使用的brower[也就是utc+8]的辽幌,所以會(huì)出現(xiàn)在kibana上面的table的@timestamp字段會(huì)比你的logstash寫(xiě)到你的_source中的@timestamp字段多了8小時(shí)的問(wèn)題增淹,這個(gè)只需要修改kibana的默認(rèn)時(shí)區(qū)就行了。這個(gè)問(wèn)題在Linux環(huán)境應(yīng)該是不存在的
三乌企、直接修改logstash源碼配置:
這個(gè)方法我只使用過(guò)在老版本上面的
老版本(1.5之前的版本):
WithZone (org. Joda. Time. DateTimeZone: : UTC)
修改為:
WithZone (org. Joda. Time. DateTimeZone.getDefault ())
1.5以后的版本(沒(méi)試過(guò)虑润,這個(gè)是別人用過(guò)的):
路徑:/vendor/bundle/jruby/1.9/gems/logstash-core-(version)-java/lib/logstash/event.rb
/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.1.0-java/lib/logstash/timestamp.rb
57行
UTC = org.joda.time.DateTimeZone.forID(“UTC”)
修改為:
UTC = org.joda.time.DateTimeZone.getDefault(:)