当 Logstash 向输入源发送 ACK 时

When Logstash sends ACK to input source

我已经阅读了 filebeat 的至少一次交付承诺,我的理解是,直到 filebeat 未收到已发送日志行的确认,该行将再次发送(如果 filebeat 重新-开始)。 现在假设,在我的解决方案中,我使用 Filebeat、Logstash 和 logstash 用于过滤的另一个组件。过滤后,logstash 将行发送到 elasticsearch。

下面是我们可能会丢失数据的检查点:

  1. Filebeat 没有收到来自 logstash 的确认就关闭了 - 在这种情况下,我们知道该行将由 filebeat 再次发送。
  2. 假设 Filebeat 发送了一行,logstash 使用外部组件对其进行过滤,然后当它尝试发送到 elasticsearch 并且同时 logstash/elasticsearch 崩溃了,那么我们会丢失这些数据吗?

我的问题是:

基本上 logstash 按以下顺序处理数据:

INPUT --> FILTER --> OUTPUT

所以我想知道logstash会在哪一步发送ACK给filebeat。我想基本上了解 ACKS 是如何发送的以及何时发送。我尝试在google和ELK官网上搜索,但没有得到详细信息。

有人可以帮助我了解这些细节吗? 提前致谢。

当输入将事件推送到管道工作人员的内部队列时,输入将确认。那是插件输入线程认为事件完成的时候。

管道工人会发生什么取决于。如果您配置并启用了持久队列,一旦 logstash 重新启动,这些作业将再次被拾取,并且不应丢失任何数据(如果是,那是一个错误)。如果您没有持久队列,那么该数据将会丢失。