如果 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 始终处于运行状态。
我的 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 始终处于运行状态。