elastic date时区问题解决办法
之前介绍filter date插件时就谈到时区问题,但是没有说明白。最近在使用range查询时间范围内的数据时出现了数据量不一致的情况。特地了解了下ELK Stack中关于时区的问题。
问题:
使用kibana discovery界面搜索时,数据量一致。使用curl 搜索时少了数据。
再说时间问题前,简单了解下UTC:
UTC(Universal Time Coordinated) 叫做世界统一时间,中国大陆和 UTC 的时差是 + 8 ,也就是 UTC+8。
UTC时区参考文档
查看官方文档后得到的结论:
ELK Stack集群各服务对时间处理的介绍:
logstash :根据所在机器的时区并对date类型数据进行处理,整理成UTC时间
elastic :所有date类型数据都存储为GMT(毫秒级)
kibana :根据kibana配置的时区,从elastic取出的timestamp时间转换为相应时区的时间。
问题原因:
logstash处理后以UTC时间存储进elastic,kibana取出来后,在恢复成相应时区的时间。因为我机器都是CST的时间,所以使用kibana搜索没有问题,但是curl命令不会对所取出来的时间进行时区转换,所以就少了8小时数据。
解决方法:
一:
logstash 过滤字段信息时,删除或分开匹配时间和时区信息,timestamp
只匹配具体时间,timezone
则匹配+0800
这样的时区信息,并同时定义timezone为UTC,这样从根本上就得到原始的时间。
UTC时间的示例:
$ bin/logstash -f text.conf
[26/Mar/2019:00:00:08 +0800] #这里以nginx日志中的时间为例
{
"timestamp" => "26/Mar/2019:00:00:08",
"message" => "[26/Mar/2019:00:00:08 +0800]",
"@timestamp" => 2019-03-26T00:00:08.000Z, #@timestamp的时间和输入的时间一致
"@version" => "1",
"timezone" => "+0800",
"host" => "node2007"
}
$ cat text.conf
input {
stdin {}
}
filter {
grok {
match => {
"message" => "\[%{NOTSPACE:timestamp} %{INT:timezone}\]"
}
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss" ]
timezone => "UTC" #无法从timestamp中提取时区。设置时区为UTC时间,忽略系统时区,如果date插件中的match匹配到了时区,则此处的时区不生效。所以在grok插件中将timezone和timestamp分隔开
}
}
output {
stdout{
codec => rubydebug
}
}
正常时间处理:
$ bin/logstash -f text.conf
[26/Mar/2019:00:00:08 +0800]
{
"@version" => "1",
"@timestamp" => 2019-03-25T16:00:08.000Z, #转换成UTC时间,减少8小时,
"message" => "[26/Mar/2019:00:00:08 +0800]",
"host" => "node2007",
"timestamp" => "26/Mar/2019:00:00:08 +0800"
}
$ cat text.conf
input {
stdin {}
}
filter {
grok {
match => {
"message" => "\[%{HTTPDATE:timestamp}\]"
}
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
timezone => "UTC"
}
}
output {
stdout{
codec => rubydebug
}
}
系统日志中不带有时区信息,则可以直接在配置文件中指定timezone => "UTC"
即可。无需要做匹配工作。
二:
匹配到时区时间没有关系,可以在过滤时,在把时间补回来。
...
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
target => "time"
}
ruby {
code => "event.set('timestamp', event.get('time').time.localtime + 8*60*60)" #处理时将logstash自动减少的时间在给加回来
}
ruby {
code => "event.set('@timestamp',event.get('timestamp'))"
}
...
以上代码经过我测试,可以正常使用。这里使用ruby插件,我不懂,time -> timestamp -> @timestamp需要经由两个变量才能最后赋值给@timestamp,为什么不能直接使用@timestamp处理并赋值,如果有懂得的人,还请留言告知。
对时间进行处理后,我们可以使用curl命令随意进行查询啦,但是使用kibana时,还需要设置一下默认的时区: Management -> kibana(高级设置) -> Timezone for date formatting 并选择UTC时间展示。

总结:
ELK Stack一整套组合拳的时区特性特别好用,但是在国内还是统一时区吧。统一时区还是再数据存储前做调整,否则后期查询会流泪的。
elastic date时区问题解决办法的更多相关文章
- 苹果ios用js的Date()出现NaN问题解决办法
原文:苹果ios用js的Date()出现NaN问题解决办法 ios使用如下方法获得NaN,安卓手机则是正常计算,解决方法是换个这个时间的格式 new Date("2017-04-28 23: ...
- CefSharp 提示 flash player is out of date 运行此插件 等问题解决办法
CefSharp 提示 flash player is out of date 或者 需要手动右键点 运行此插件 脚本 等问题解决办法 因为中国版FlashPlayer变得Ad模式之后,只好用旧版本的 ...
- Windows XP系统下添加任务计划常出现问题解决办法
Windows XP系统下添加任务计划常出现问题解决办法 计划任务就是让电脑在指定的时间内执行指定的动作(计划动作),这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的(通俗一些就是双击 ...
- Open Sans字体兼容问题解决办法[font-face]
参考:http://www.tantengvip.com/2014/11/open-sans/ 1.font-face使用方法 font-face是CSS3中的一个模块,主要是把自定义的Web字体嵌入 ...
- ASP+Access UTF-8 网页乱码问题解决办法
用ACCESS数据库和ASP做网站时用UTF-8编码有时会出现乱码,再者网页出错或者刷新页面后就是乱码,如果数据库取值乱码在开头加上<%@LANGUAGE="VBSCRIPT" ...
- 易通电脑锁2007V6.3.3.3无法卸载问题解决办法
易通电脑锁2007V6.3.3.3无法卸载问题解决办法把原版文件拷贝回去.bat@echo offcolor 2Fecho 该批处理会把易通电脑锁2007版原文件拷贝回去,解决易通电脑锁卸载时出现的运 ...
- Sublime Text 3 若干问题解决办法
1.在高分屏下中文文件夹名显示异常问题解决办法 新买了个2K的屏,有些中文文件夹名全部变成了“口口”. 在“preferences” - "设置-用户" 添加 "dpi_ ...
- C盘不能新建文件的问题解决办法
C盘不能新建文件的问题解决办法 主要症状: 1.C 盘文件不能修改2.C 盘不能新建文件3.总之就是只能读取不能,写入和修改这样对于平时操作造成了极其的不方便~~~复制文件到C 盘会提示:错误0×80 ...
- iOS常见异常Exec_Bad_Access问题解决办法
iOS常见异常Exec_Bad_Access问题解决办法 在iOS开发中,经常遇到Exec_Bad_Access异常,导致程序奔溃问题,一般这个问题都是因为过早的release对象,然后又对该 ...
随机推荐
- Java基础的容错
新手会有一些常犯的过失,一般一个新手在学习Java开发的时分,往往会挑选买书去学习,首要这样的学习功率是非常差的,比如在学习html,css的时分,是彻底不必看书的.书里大多数东西你都不了解.这是新手 ...
- navicat密码错误的问题
上集说到我的navicat打不开对吧..‘ 这下就来聊聊打开了的问题 下午非常开心,就打开了mysql的图形化界面, 但是,在我连接数据库的时候就报错了 错误就是密码错误那行 什么什么‘localho ...
- ASP.NET开发实战——(三)第一个ASP.NET应用《MyBlog》
本文开始通过ASP.NET MVC创建一个博客应用,该应用是通过默认的MVC模板修改而来,所以创建的过程和代码都与默认模板一致,然后通过修改的方式将默认模板改为博客的主页,并添加博客列表.内容等页面. ...
- Linux性能优化实战学习笔记:第四十九讲
一.上节回顾 上一期,我们一起梳理了,网络时不时丢包的分析定位和优化方法.先简单回顾一下.网络丢包,通常会带来严重的性能下降,特别是对 TCP 来说,丢包通常意味着网络拥塞和重传,进而会导致网络延迟增 ...
- Linux性能优化实战学习笔记:第五十四讲
一.上节回顾 上一节,我带你学习了,如何使用 USE 法来监控系统的性能,先简单回顾一下. 系统监控的核心是资源的使用情况,这既包括 CPU.内存.磁盘.文件系统.网络等硬件资源,也包括文件描述符数. ...
- MySQL实战45讲学习笔记:第七讲
一.上节回顾今日计划 在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL的行锁. MySQL 的行锁是在引擎层由各个引擎自己实现的.但并不是所有的引擎都支持行锁, ...
- [LeetCode] 69. Sqrt(x) 求平方根
Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a no ...
- RHEL8/CentOS8的基础防火墙配置-用例
systemctl systemctl unmask firewalld #执行命令,即可实现取消服务的锁定 systemctl mask firewalld # 下次需要锁定该服务时执行 syste ...
- LeetCode 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix (最少翻转次数将二进制矩阵全部置为0)
给一个矩阵mat,每个格子都是0或1,翻转一个格子会将该格子以及相邻的格子(有共同边)全部翻转(0变为1,1变为0) 求问最少需要翻转几次将所有格子全部置为0. 这题的重点是数据范围,比赛结束看了眼数 ...
- 企业应用向ASP.NET Core迁移
有人说.NET在国内的氛围越来越不行了,看博客园文章的浏览量也起不来.是不是要转Java呢? 没有必要扯起语言的纷争,Java也好C#都只是语言是工具,各有各的使用场景.以前是C#非开源以及不能在Li ...