ES中:
日期时间字段在json中以字符串形式存在,但是在es中有专门的date类型来表示日期时间,并且,es中是以0时区来存储date类型的值。
这就引出了一个问题:
如果原始内容中的日期时间字段有时区信息,那么es会将其转换为0时区并转换为时间戳以long类型存储在es中;
如果原始内容日期时间字段没有时区信息的话,例如2018-10-30 11:10:45
,那么es会将其视为0时区的时间,即实际在es中存储为2018-10-30 11:10:45 +0000
的时刻。
kibana中
kibana从es中获取到date类型的字段后,会通过js获取本机/本地时区,并将时间字段从es的0时区转换为本地时区之后展示出来。
所以遇到的问题如下:
比如日志中日期时间值为2018-10-30 11:10:45
,然后自定义mapping为
"accountTime": {
"type": "date",
"format" : "yyyy-MM-dd HH:mm:ss"
},
那么我们日志中东8区的时间2018-10-30 11:10:45
在es中会存储为2018-10-30 11:10:45 +0000
的时间戳,然后kibana读取的时候再做一次转换,在kibana中该时刻就变成了2018-10-3