logstash修改es创建索引的时间为凌晨00:00;

Posted 不知名运维:

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logstash修改es创建索引的时间为凌晨00:00;相关的知识,希望对你有一定的参考价值。

问题描述

因公司目前业务量不大,故把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时区

以上是关于logstash修改es创建索引的时间为凌晨00:00;的主要内容,如果未能解决你的问题,请参考以下文章

Logstash 时区问题导至数据被写进错误的 ES 索引的解决方法

Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引

es 无日志,logstash 报错

Logstash动态模板映射收集Nginx的Json格式的日志

大数据周会-本周学习内容总结05

Logstash中配置默认索引映射