在 Logstash 中定义多个输出,同时处理 Elasticsearch 实例的潜在不可用性

Defining multiple outputs in Logstash whilst handling potential unavailability of an Elasticsearch instance

我为 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.localhost2.local 不可用,Logstash 将无法 process/deliver 数据到另一个,即使它可用.

我是否可以对配置进行修改,以允许将数据传送到可用的 Elasticsearch 实例,即使另一个实例挂掉了?

logstash 具有至少一次交付模型。 If persistent queues are not enabled data can be lost across a restart, but otherwise, logstash will delivery events to all of the outputs at least once. As a result, if one output becomes unreachable the queue (either in-memory or persistent) will back up and block processing. You can use persistent queues and pipeline-to-pipeline communication with an output isolator 模式以避免在另一个输出不可用时停止一个输出。