当Logstash将ACK发送到输入源时

时间:2017-07-14 08:49:00

标签: elasticsearch logstash elastic-stack filebeat

我已经了解了filebeat的至少一次交付承诺,我理解的是,在filebeat没有收到发送日志的确认之前,该行将再次发送(如果filebeat重新启动) )。 现在说,在我的解决方案中,我使用的是Filebeat,Logstash以及logstash用于过滤的另一个组件。过滤后,logstash会将该行发送到elasticsearch。

现在这里是我们可以丢失数据的检查点:

  1. Filebeat在没有从logstash接收到ack的情况下关闭了 - 在这种情况下,我们知道该行将通过filebeat再次发送。
  2. 假设Filebeat发送了一行,并且logstash对外部组件应用了过滤,然后当它尝试发送到elasticsearch并且同时logstash / elasticsearch崩溃时,我们将丢失这些数据。
  3. 我的问题是:

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

    INPUT --> FILTER --> OUTPUT
    

    所以我想知道logstash将把ACK发送到filebeat的步骤。我想基本了解ACKS的发送方式和时间。我试图在谷歌和ELK官方网站上搜索它,但没有得到详细信息。

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

1 个答案:

答案 0 :(得分:1)

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

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