Logstash + Elasticsearch 本地故障转移或重试
Logstash + Elasticsearch failover locally or retry
我有一个可用的 Redis 支持的 ELK 堆栈,但是偶尔,当 ElasticSearch 由于某种原因不可用时,我会遇到问题。
日志事件流:
- 服务器生成日志
- 服务器 运行 日志快递,收集日志,远程推送到 Logstash 服务器
- Logstash-incoming 写入本地 Redis 服务
- Redis 保存要处理的事件,充当缓冲区
- Logstash-outgoing从Redis队列读取,运行s 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 点。死信队列设施已在路线图上,但显然尚未发布。查看这两张票:
再见,
马库斯
我有一个可用的 Redis 支持的 ELK 堆栈,但是偶尔,当 ElasticSearch 由于某种原因不可用时,我会遇到问题。
日志事件流:
- 服务器生成日志
- 服务器 运行 日志快递,收集日志,远程推送到 Logstash 服务器
- Logstash-incoming 写入本地 Redis 服务
- Redis 保存要处理的事件,充当缓冲区
- Logstash-outgoing从Redis队列读取,运行s 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 点。死信队列设施已在路线图上,但显然尚未发布。查看这两张票:
再见, 马库斯