rsyslog 在具有 OMFileZipLevel 的日志文件上出现意外的文件结尾

rsyslog 在具有 OMFileZipLevel 的日志文件上出现意外的文件结尾

操作系统:Centos7
rsyslog:8.24.0

我让多个主机向我的中央rsyslog服务器发送日志。我使用OMFileZipLevel配置文件中的选项来压缩日志,然后zcat随时都可以查看内容。

自从我升级到后rsyslog8,每当我尝试zcat压缩我的某个日志时都会收到以下错误:

#   zcat srv1.example.com.log.gz
2021-01-06T04:46:11-08:00 srv1.example.com lab: test_msg

gzip: srv1.example.com.log.gz: unexpected end of file

如果我停止 rsyslog 服务器并访问该文件,则不会收到该错误消息。即使我启动服务器,我仍然可以看到没有 EOF 消息的日志文件,然而当我的 rsyslog 服务器收到一条消息并将其写入文件时,我开始收到相同的消息:

#   zcat srv1.example.com.log.gz
2021-01-06T05:54:22-08:00 srv1.example.com lab: test_msg

gzip: srv1.example.com.log.gz: unexpected end of file


#   systemctl stop rsyslog

#   zcat  srv1.example.com.log.gz
2021-01-06T05:54:22-08:00 srv1.example.com lab: test_msg


#   systemctl start rsyslog

#   zcat srv1.example.com.log.gz
2021-01-06T05:54:22-08:00 srv1.example.com lab: test_msg


srv1:~$ logger -p local5.info test_msg2 @my_rsyslog_server

#   zcat srv1.example.com.log.gz
2021-01-06T03:32:09-08:00 srv1.example.com lab: hab_test
2021-01-06T05:55:27-08:00 srv1.example.com lab: test_msg2

gzip: srv1.example.com.log.gz: unexpected end of file

我能够找到一个邮件列表,其中有人提到了类似的问题,这与 rsyslog 仍打开的文件有关。

问题是我有另一个运行版本5.8.10(Centos 6)的 rsyslog 服务器,它具有完全相同的 rsyslog 配置文件,但我的压缩日志上的 EOF 消息没有出现这样的行为。

这可能是 rsyslog 中的一个错误吗8.24.0

答案1

这似乎是一种正常行为。我不确定closeTimeout参数,因为OMFileZipLevel它通常应用于生成大量输出的服务,所以我从来没有遇到过 10 分钟(或 10 秒)没有写入文件的情况!

GZIP 是一个流压缩器,因此文件会带有文件头和文件尾,但是直到文件被视为关闭和终止时才会写入文件尾,因此 zcat 和 gunzip 在到达仍在写入的普通 gzip 文件的末尾时会发出抱怨。

使用OMFileZipLevel只是告诉 rsyslog 将日志压缩为普通 gzip 文件,所以这仍然适用。

使用veryRobustZiprsyslog 可以构建由一个接一个连接起来的小块 gzip 数据组成的 gzip 文件(符合 gzip 标准),并且可以允许使用 zcat 或 gunzip 无错误地提取数据(但查阅 rsyslog 帮助检查一些细节)。

尽管如此,我已经开发工具轻松管理 rsyslog 生成的压缩日志文件,无论使用哪种选项:您都可以

  • tail -f像处理文本文件一样连续跟踪 .log.gz 文件,使用gztool -T
  • 即使发送日志的过程突然停止然后重新启动,也会提取所有数据,这会导致 gzip 文件包含 zcat/gunzip 无法访问的数据,但 gztool 可以完美地提取gztool -p
  • 从 gzip 文件的任何部分提取数据,而无需全部读取(这对于其他工具是必需的)

只是参考使用示例工具

问题是为什么它在升级之前没有发生:你确定在相同的 rsyslog 配置下以前没有发生过这种情况吗?

相关内容