2017-07-14 56 views
0

我已經閱讀過關於filebeat的至少一次投遞的承諾,我的理解是,直到發送的logline的確認沒有被filebeat接收到,該行將被再次發送(在filebeat重新啓動的情況下)。 現在假設,在我的解決方案中,我使用了Filebeat,Logstash和logstash用於過濾的其他組件。過濾後,logstash將該行發送到elasticsearch。當Logstash發送ACK到輸入源

現在,這裏是下面的檢查站,我們可以損失數據:

  1. Filebeat關閉了未經logstash收到ACK - 在這種情況下,我們知道,生產線將再次filebeat發送。
  2. 假設Filebeat發送一行,並且logstash對外部組件應用過濾,然後當它嘗試發送給elasticsearch並且同時logstash/elasticsearch崩潰時,我們將丟失該數據。

我的問題是:在下面的序列

基本上logstash處理數據:

INPUT --> FILTER --> OUTPUT 

所以我想知道,在該步驟中logstash將發送ACK給filebeat。我想基本瞭解ACKS如何發送以及何時發送。我試圖在谷歌和ELK官方網站上搜索它,但沒有得到詳細信息。

有人能幫助我理解這些細節嗎? 在此先感謝。

回答

1

當輸入將事件推送到管道工作者的內部隊列時,輸入將會發出ACK。這是插件輸入線程認爲事件完成的時候。

管道工的種類取決於什麼。如果您配置並啓用了持久隊列,那麼一旦logstash重新啓動並且不會丟失任何數據(如果是,那是一個錯誤),那些作業就會再次被拾取。如果你沒有持久隊列,那麼這些數據將會丟失。