我遇到了使用Influxdb输出插件的logstash 5.2版的数据丢失问题。
我的logstash配置是:
filter {
grok {
patterns_dir => ["/etc/logstash/patterns"]
match => { "message" => "%{NGINXACCESSBLOG}"}
if [type] == "nginx-access-router" {
ruby { code => "event.set('epoc', event.get('@timestamp').to_i)" }
date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
target => "newdate"
}
mutate { convert => [ "request_time", "float" ] }
if ![response] {
mutate { add_field => ["response", "nil"] }
}
}
}
}
output {
if [type] == "nginx-access" {
influxdb {
host => "localhost"
port => 8086
user => "admin"
password => "XXX"
db => "xx"
allow_time_override => true
retention_policy => "XX"
measurement => "XXXX"
enable_metric => false
send_as_tags => ["response"]
data_points => {
"response" => "%{[response]}"
"timestamp" => "%{[epoc]}"
"time" => "%{[epoc]}"
}
coerce_values => {
"request_time" => "float"
}
}
}
}
注意:我已经在调试日志中检查了所有收到的日志行都是用grok模式成功解析的。
然后为什么会有超过50%的数据丢失。
我试过一些解决方案: 按照 https://github.com/logstash-plugins/logstash-output-influxdb/issues/69
我尝试使用“allow_time_override”作为上述配置,但logstash停止将数据推送到涌入并在错误日志文件中得不到任何内容。
答案 0 :(得分:0)
经过一步一步的跟踪,能够找到我昨天发布的数据丢失问题的根本原因和解决方法。
问题的根本原因是:
Influxdb会覆盖重复的时间戳
解决方案:覆盖时间为微秒