在 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.local
或 host2.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 模式以避免在另一个输出不可用时停止一个输出。
我为 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 将无法 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 模式以避免在另一个输出不可用时停止一个输出。