Logstash

修復logstash檢查點文件

  • April 6, 2020

我們OutOfMemoryException的 logstash 5.6.6 中有一個導致checkpoint. head文件無法正確寫入的問題:

ls -l /var/lib/logstash/queue/main/
total 266424
-rw-r--r-- 1 logstash logstash        34 Mar  1 20:33 checkpoint.55779
-rw-r--r-- 1 logstash logstash         0 Mar  1 20:34 checkpoint.head
-rw-r--r-- 1 logstash logstash 262144000 Mar  1 20:33 page.55779
-rw-r--r-- 1 logstash logstash 262144000 Mar  1 20:34 page.55780

有沒有辦法修復checkpoint.head或至少將頁面 55779 載入到管道中,這樣我們就不會失去幾千個事件?

我們最終查看了一個工作checkpoint.head文件並根據我們的需要對其進行了修改。在十六進制中,文件可能如下所示:

00000000: 0001 0000 d9e4 0000 d9e3 0000 0000 0000  ................
00000010: 0000 0000 0000 0000 0000 0000 0000 1855  ...............U
00000020: 2b6b 0a                                  +k. 

需要修改的有:

  • 字節 3-6:32 位有符號整數:最新頁面文件的數量
  • 字節 7-10:32 位有符號整數:最低未處理頁面文件的數量
  • 字節 31-34:32 位有符號整數:雜湊值

所有數字都是大端。

要獲取雜湊,只需設置頁面文件的值並啟動 logstash。它將向您顯示一條錯誤消息,其中提到了預期的和實際的雜湊值,將值替換為該checkpoint.head錯誤消息中的實際值。

引用自:https://serverfault.com/questions/1005253