最近在测试使用logstash将数据从redis同步到es,并且按小时生成文本,但是在使用中发现logstash中的时间与服务器时间差8小时,导致@timestamp字段中的时间不对,并且生成文本名字中的时间不对,影响后续流程处理,logstash版本6.3.2,解决方式如下,不需要修改源码:
input {
redis {
host => "127.0.0.1"
port => "6379"
password => "password"
db => 0
key => "key_test" #队列名称
data_type => "list" #队列类型
threads => 1
}
}
filter {
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"]
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
action => index
index => "index_test" #es中的索引名称
document_id => "%{id}" #以数据中的哪个字段做es中的_id
document_type => "type_test" #es中的mapping名称
codec => json_lines
}
file {
path => "/root/data/%{+yyyyMMddHH}.txt"
}
}
logstash生成文件名中的日期是从@timestamp字段的值中获取,通过设置filter将timestamp中的时间转换成系统时间,问题解决。
本文介绍了一种在Logstash配置中解决时间戳偏差的方法,通过调整时间偏移确保@timestamp字段与服务器时间一致,从而避免影响文件命名及后续流程。
2592

被折叠的 条评论
为什么被折叠?



