因公司目前业务量不大,故把elk部在了虚机上,给予的硬盘空间少的离谱,需一天清一次开测环境的日志,当写完脚本定时执行发现每天的定时任务日志是正常的但是第二天发现索引还在!起初以为是脚本或定时任务的问题,最后发现是索引的生成时间有问题,索引默认的生成时间是凌晨八点
;而脚本的定时任务是凌晨四点,肯定是生效了,但是由于还有数据写入就又会生成这个索引;
原因分析:
因为logstash默认使用的UTC时间
,我们现在处于的是东八区CST(CST=UTC+8h)
,也就是UTC时间是比我们慢8个小时的,当UTC时间到00:00的时候,会触发生成新的索引,这时候我们就已经到了08:00;
解决方案:
1、索引的创建时间
或日志写入es的时间
是根据默认的"@timestamp"字段来创建写入的,所以直接给"@timestamp"加上8小时即可;这样,索引生成的时间就是00:00了
filter {date { match =>["log_time", "yyyy-MM-dd HH:mm:ss.SSS"]
target =>"@timestamp"
}
ruby { code =>"event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
}
ruby { code =>"event.set('@timestamp',event.get('timestamp'))"
}
mutate { remove_field =>["timestamp"]
}
}
}
- date插件:将@timestamp字段替换为我日志中的log_time字段,主要是将日志写入es的时间修改为我日志生成的时间;
- ruby1::将
"@timestamp"
字段的时间+8个小时赋值给新的"timestamp"
字段 - ruby2:将
"timestamp"
字段再赋值给"@timestamp"
字段 - mutate:删除多余的
"timestamp"
字段
如下:
修改后观察第二天索引的创建时间戳已正常改为凌晨00:00
2、还有一点是需要将kibana的显示时间改为UTC
,默认kibana是自动根据浏览器"Browser"
的时间来的,这样会导致我们现在的时间+8小时;当改为UTC后+8h正好符合我们现在的时间
使用kibana的默认时间"Browser"
显示日志如下
可以看出kibana显示的时间为浏览器的时间东八区时间CST(CST=UTC+8h)
+8h,所以会比我们实际日志产生的时间多了8h,即只需要将kibana的显示时间改为UTC即可;
kibana7.x修改显示的时间为UTC:
kibana界⾯⿏标依次点击如下:
(1)菜单栏;
(2)StackManagement;
(3)Kibana;
(4)高级设置;kibana6.x修改显示的时间为UTC:
kibana界⾯⿏标依次点击如下:
(1)菜单栏;
(2)管理
(3)Kibana;
(4)高级设置;
kibana修改显示的时间为UTC格式后,日志如下:
显示时间一切正常;
总结
简单来说解决方案就是两步
(1)把logstash由默认的UTC时区
修改为我们的东八区CST(CST=UTC+8h)
,也就是把logstash的默认"索引的创建时间
或日志写入es的时间"
+8h
;
(2)将kibana默认的浏览器时间"Browser"
(东八区)改为UTC时区
;
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站题目:logstash修改es创建索引的时间为凌晨00:00;-创新互联
标题来源:http://scgulin.cn/article/dgiihe.html