Logstash @timestamp和正常时间差8小时的解决办法

最近在做 logstash 消费 kafka 写到 es 的项目中,在 kibana 中查看发现 logstash 写入的 @timastamp 比真实服务器的时间少了8个小时。并且生成的文件中,日志切分的格式也是差了8小时。例如:2019-01-01的日志里面会写入2019-01-02 08:00:00 前的日志。因为logstash默认使用的是UTC时间。
使用版本:

nameversion
logstash6.3.2
es6.2.2
kibana6.2.2

解决方法:对@timestamp重新赋值,加上8小时。直接给@timestamp赋值不行,需要一个中间变量来操作。
ruby代码:
event.set(‘timestamp’, event.get(’@timestamp’).time.localtime + 86060)
event.set(’@timestamp’,event.get(‘timestamp’))
remove_field => [“timestamp”]

完整代码如下:

input {
    kafka{
        bootstrap_servers => "kafka-1:10193,kafka-2:10193"
        group_id => "mygroup"
        topics => ["docker-log"]
        consumer_threads => 5
        decorate_events => true
        codec => json {
             charset => "UTF-8"
        }
        auto_offset_reset => "latest"
    }
}
filter {
   mutate{
        split=>["source", "/"]
          add_field => {
            "file_name" => "%{source[5]}"
        }
        remove_field => ['@version','source','fields','input_type','beat']
    }
   if "webapp" not in [docker]{
     drop {}
   }
   grok{
       match => {"message" => "\[%{TIMESTAMP_ISO8601:logTimestamp}\] {%{LOGLEVEL:level}} \[(?<thread>.*)\] %{JAVACLASS:className} %{NUMBER:lineNum} \- (?<content>.*)"}
   }
   if "controller" != [className] and "用户" not in [content]{
      drop {}
   }
   ruby {
     code => "
       if !event.get('content').start_with?'用户'
          event.cancel
       end
       event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)
       event.set('@timestamp',event.get('timestamp'))
       "
     remove_field => ["timestamp"]
   }
}
output {
    #elasticsearch {
    #    hosts => ["es-6.com:80"]
    #    index =>  "%{docker}_%{+YYYY-MM-dd}"
    #}
    stdout {
        codec => rubydebug
    }
}

注意:
高版本ruby代码中已经不能使用 event[‘name’] 取值了,需要改为:event.get(‘name’)
jruby 语法 api 参考链接
Logstash进阶指南 | 1. 万能的ruby filter

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值