我有一个可用的 Redis 支持的 ELK 堆栈,但是偶尔,当 ElasticSearch 由于某种原因不可用时,我会遇到问题。
日志事件流:
- 服务器生成日志
- 服务器运行 log-courier,收集日志,远程推送到 Logstash 服务器
- Logstash-incoming 写入本地 Redis 服务
- Redis 保存要处理的事件,充当缓冲区
- Logstash-outgoing 从 Redis 队列读取数据,运行 grok 和其他过滤器,然后输出到 Elasticsearch 集群。
logstash-incoming.conf
input {
courier {
port => 123
transport => "tcp"
}
}
output {
redis {
host => "127.0.0.1"
data_type => "list"
key => "logstash"
}
}
logstash-outgoing.conf
input {
redis {
host => "127.0.0.1"
data_type => "list"
key => "logstash"
}
}
output {
elasticsearch {
hosts => "elasticsearchcluster.local"
}
}
如果第 5 步失败,事件将从 Redis 中弹出,Logstash 将尝试三次,然后将批量有效负载设为黑洞,从而导致我的数据收集出现漏洞。
有没有办法:
- 将重试时间从 3 次 x 2 秒的等待时间延长到更慷慨的时间。
- 将失败的负载写入磁盘,以便在问题解决后将它们通过管道传输回 ElasticSearch。
- 理想情况下,两者兼而有之。
最佳答案
我认为在撰写本文时,两者都不可能。关于第 2 点。死信队列设施已在路线图上,但显然尚未发布。查看这两张票:
再见, 马库斯
关于elasticsearch - Logstash + Elasticsearch 本地故障转移或重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320253/