Logstash為了防止資料丟失提供兩種隊列
默認情況下,Logstash 管道階段(輸入→管道工作器)之間使用內存中有界隊列來緩衝事件。這些內存隊列的大小是固定的,並且不可配置。如果Logstash遇到暫時的機器故障,則內存隊列中的內容將丟失。 為了防止異常終止期間的數據丟失,Logstash 具有持久性隊列功能,可以啟用該功能以將消息隊列存儲在磁盤上。 隊列位於輸入和過濾器階段之間,如下所示:
input→persistent queue→filter→output
使用Persistent Queues並不是無償的,會影響Logstash整體效能,尤其是當queue.type選擇persisted把資料存放在硬碟上,同步磁盤I/O會大大影響效能需要多開多Logstash管道才有辦法改善
僅對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"
}
}