作者:宝贝小左手很开心 | 来源:互联网 | 2023-06-11 17:14
http:www.cnblogs.comwangpei886p8043021.html使用版本:elk6.0配置文件:logstash.confgoutput{el
http://www.cnblogs.com/wangpei886/p/8043021.html
使用版本:elk6.0
配置文件:logstash.confg
output {
elasticsearch {
id => "logstash-%{+YYYY.MM.dd}"
}
}
问题:如图14号的数据,结果采集到了15号,慢了8小时,希望得到的结果,是凌晨0点索引自动切换
原因: 原来Logstash用的UTC时间, logstash在按每天输出到elasticsearch时,因为时区使用utc,造成每天8:00才创建当天索引,而8:00以前数据则输出到昨天的索引
查看一些论坛,不建议更改源码,因为logstash和elasticsearch是按照UTC时间的,kibana却是按照正常你所在的时区显示的
解决:修改logstash配置
logstash在按每天输出到elasticsearch时,因为时区使用utc,造成每天8:00才创建当天索引,而8:00以前数据则输出到昨天的索引
在logstash filter 解决
1. 增加一个字段,计算timestamap+8小时
ruby {
# 新增索引日期,解决地区时差问题
code => "event.set('index_date', event.get('@timestamp').time.localtime + 8*60*60)"
}
2. 用mutate插件先转换为string类型,gsub只处理string类型的数据,在用正则匹配,最终得到想要的日期
# 定义索引名时间
mutate {
cOnvert=> ["index_date", "string"]
gsub => ["index_date", "T([\S\s]*?)Z", ""]
gsub => ["index_date", "-", "."]
}
3.output配置
elasticsearch {
hosts => ["localhost:9200"]
index => "log1-%{index_date}"
}
* 这里是取系统时间,你可以取你日志里面的时间戳来做索引名
或许有其他更好的方案!请留言告知