Мой конвейер Logstash имеет 2 выхода:
output {
elasticsearch {
hosts => "blabla"
}
jdbc {
connection_string => "blabla"
statement => [ "blabla" ]
}
}
Предположим, что один из этих выходов недоступен. Что будет с трубопроводом? Прекратит ли он передавать события или продолжит использовать доступный вывод? Можно ли настроить такое поведение?
Есть похожий вопрос многократный вывод logstash не работает, если один из выходов не работает задавал 5 лет назад, но с тех пор Logstash выпустил 5 мажорных версий, возможно что-то изменилось.
Если у вас есть несколько выходов в одном конвейере, и один из этих выходов недоступен, он заблокирует все остальные выходы.
Есть проблема с предложениями по ее решению, но пока ничего не реализовано.
Один из способов избежать этого — использовать связь конвейер-конвейер.
Вам понадобится что-то подобное в вашем основном конвейере.
output {
pipeline {
send_to => [outputElastic]
}
pipeline {
send_to => [outputjdbc]
}
Затем вам нужно будет создать конвейер для получения этого вывода, по одному для каждого желаемого вывода, что-то вроде этого.
input {
pipeline {
address => outputElastic
}
}
output {
elasticsearch {
hosts => ["blablabla"]
}
}
Таким образом, ваш основной конвейер всегда будет доставлять, и если один из ваших выходов выйдет из строя, он не заблокирует другие, потому что они теперь изолированы.
Вы можете добиться того же, используя Kafka в качестве вывода и ввода, но это будет зависеть от того, всегда ли ваша Kafka работает.