我正在将Logstash 6.2.4和以下yml设置一起使用-
pipeline.batch.size: 600
pipeline.workers: 1
dead_letter_queue.enable: true
用于运行logstash应用程序的conf文件为-
input {
file {
path => "/home/administrator/Downloads/postgresql.log.2018-10-17-06"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{DATESTAMP:timestamp} %{TZ}:%{IP:uip}\(%{NUMBER:num}\):%{WORD:dbuser}%{GREEDYDATA:msg}"}
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
id => 'es-1'
hosts => ["localhost:9200"]
timeout => 60
index => "dlq"
version => "%{[@metadata][version]}"
version_type => "external_gte"
}
}
输入是使用grok过滤器格式化的普通日志文件。 这里的版本始终是字符串,而不是整数,因此elasticsearch会引发错误400 Bad Request。
在此错误代码上-logstash应该重试有限次,然后应将此请求有效负载推送到dead_letter_queue文件(根据文档https://www.elastic.co/guide/en/logstash/current/dead-letter-queues.html),但是它陷入带有消息的无限循环中-
[2018-10-23T12:11:42,475] [错误] [logstash.outputs.elasticsearch]遇到可重试的错误。将以指数退避重试{:code => 400,:url =>“ localhost:9200 / _bulk”}
以下是data / dead_letter_queue /主目录的内容-
1.log(包含单个值“ 1”)
如果缺少任何配置导致这种情况,请提供帮助。