iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 10
0

Logstash為了防止資料丟失提供兩種隊列

  • Persistent Queues
  • Dead Letter Queues

Persistent Queues

默認情況下,Logstash 管道階段(輸入→管道工作器)之間使用內存中有界隊列來緩衝事件。這些內存隊列的大小是固定的,並且不可配置。如果Logstash遇到暫時的機器故障,則內存隊列中的內容將丟失。 為了防止異常終止期間的數據丟失,Logstash 具有持久性隊列功能,可以啟用該功能以將消息隊列存儲在磁盤上。 隊列位於輸入和過濾器階段之間,如下所示:

input→persistent queue→filter→output

使用Persistent Queues的好處

  • 無需使用Redis或Apache Kafka之類的外部緩存隊列
  • 提供至少一次的傳遞保證,以防止在正常關閉以及Logstash異常終止時丟失消息。如果在發生事件時重新啟動Logstash,則Logstash將嘗試傳遞存儲在持久隊列中的消息,直到傳遞至少成功一次。

使用Persistent Queues的缺點

使用Persistent Queues並不是無償的,會影響Logstash整體效能,尤其是當queue.type選擇persisted把資料存放在硬碟上,同步磁盤I/O會大大影響效能需要多開多Logstash管道才有辦法改善

Dead Letter Queues

僅對Elasticsearch Output 支持

默認情況下,當Logstash遇到由於資料映射錯誤或某些其他問題而無法處理的事件時,Logstash管道會掛起或刪除失敗的事件。為了防止這種情況下的數據丟失,您可以配置Logstash將失敗的事件寫入Dead Letter Queues,而不是丟棄它們。

默認情況下是禁用,要使用需編輯 /etc/logstash/logstash.yml

dead_letter_queue.enable: true

path.dead_letter_queue: "path/to/data/dead_letter_queue" #設定資料存放位置

重新處理失敗的資料

可以再把失敗的資料接起來處理,使用dead_letter_queue套件即可

input {
  dead_letter_queue {
    path => "/path/to/data/dead_letter_queue" #dead_letter_queue設定的位置
    commit_offsets => true #保存偏移量。管道重新啟動時,它將繼續從中斷的位置開始讀取,而不是重新處理隊列中的所有項目
    pipeline_id => "main"
  }
}

上一篇
Day9-Logstash安裝設定(三)
下一篇
Day11-Logstash-監控
系列文
Elastic Stack 是一把梭,用起來再說!!!30

尚未有邦友留言

立即登入留言