我们的 logstash 5.6.6 中有一个问题OutOfMemoryException
,导致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 加载到管道中,以便我们不会丢失几千个事件?
答案1
我们最终查看了一个工作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
为该错误消息中的实际值。