我为 Logstash 配置了两个输出,因为我需要将数据传送到不同位置的两个单独的 Elasticsearch 节点。
配置片段如下(根据需要进行编辑):
output {
elasticsearch {
hosts => [ "https://host1.local:9200" ]
cacert => '/etc/logstash/config/certs/ca.crt'
user => XXXXX
password => XXXXX
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
output {
elasticsearch {
hosts => [ "https://host2.local:9200" ]
cacert => '/etc/logstash/config/certs/ca.crt'
user => XXXXX
password => XXXXX
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
在测试过程中,我注意到,如果 ES 实例 host1.local
或 host2.local
之一不可用,Logstash 无法处理/将数据传送到其他,即使它可用。
我可以对配置进行修改,以允许将数据传递到可用的 Elasticsearch 实例,即使另一个实例挂掉了吗?
最佳答案
logstash 有一个至少一次的交付模型。如果persistent queues未启用的数据可能会在重新启动时丢失,但否则,logstash 会将事件至少传递到所有一次输出。因此,如果一个输出变得无法访问,队列(无论是内存中的还是持久的)将备份并阻止处理。您可以使用持久队列和管道到管道通信 output isolator模式以避免在另一个输出不可用时停止一个输出。
关于elasticsearch - 在 Logstash 中定义多个输出,同时处理 Elasticsearch 实例的潜在不可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66319588/