如果 Logstash 输出之一不可用会怎样?

What happens if one of Logstash output is not available?

我的 Logstash 管道有 2 个输出:

output {
    elasticsearch {
        hosts => "blabla"
    }
    jdbc {
        connection_string => "blabla"
        statement => [ "blabla" ]
    }
}

假设其中一个输出不可用。管道会发生什么?它会停止传递事件还是继续使用可用输出?这样的行为是可配置的吗?

有一个类似的问题 logstash multiple output doesn't work if one of outputs fails 5 年前问过,但 Logstash 从那时起发布了 5 个主要版本,可能有些东西已经改变了。

如果您在单个管道中有多个输出并且其中一个输出不可用,它将阻止所有其他输出。

有一个 issue 的建议来解决这个问题,但还没有实现。

避免这种情况的一种方法是使用 pipeline-to-pipeline 通信。

您的主管道中将需要这样的东西。

output {
    pipeline {
        send_to => [outputElastic]
    }
    pipeline {
        send_to => [outputjdbc]
    }

然后你需要创建一个管道来接收这个输出,一个用于你想要的每个输出,就像这样。

input {
    pipeline {
        address => outputElastic
    }
}
output {
    elasticsearch {
        hosts => ["blablabla"]
    }
}

这样你的主管道将始终交付,如果你的输出之一失败,它不会阻止其他人,因为它们现在是孤立的。

您可以使用 Kafka 作为您的输出和输入来实现同样的事情,但这取决于您的 Kafka 始终处于运行状态。