OMFileZipLevel을 사용하는 로그 파일의 rsyslog 예기치 않은 파일 끝

OMFileZipLevel을 사용하는 로그 파일의 rsyslog 예기치 않은 파일 끝

운영체제: 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정확히 동일한 rsyslog 구성 파일이 있는 다른 rsyslog 서버 실행 버전(Centos 6)이 있지만 압축된 로그에 EOF 메시지와 같은 동작이 없다는 것입니다.

이것이 rsyslog의 버그일 수 있습니까 8.24.0?

답변1

정상적인 행동인 것 같습니다. 매개변수 는 일반적으로 많은 출력을 생성하는 서비스에 적용되기 closeTimeout때문에 잘 모르겠습니다 . 그래서 10분(또는 10초 동안) 동안 파일이 작성되지 않은 적이 없습니다!OMFileZipLevel

GZIP은 스트림 압축기이므로 파일은 헤더와 꼬리로 작성되지만 꼬리는 파일이 닫히고 종료된 것으로 간주될 때까지 작성되지 않으므로 일반 gzip 파일의 끝에 도달하면 zcat과 gunzip이 오류를 표시합니다. 아직 작성 중입니다.

를 사용하면 OMFileZipLevelrsyslog에 로그를 일반 gzip 파일로 압축하도록 지시하므로 이는 여전히 적용됩니다.

rsyslog를 사용하면 veryRobustZip차례로 연결된 작은 gzip 데이터 블록으로 구성된 gzip 파일을 구성할 수 있으며(gzip 호환) zcat 또는 gunzip을 사용하여 오류 없이 데이터를 추출할 수 있습니다(그러나rsyslog 도움말을 참조하세요.세부 사항을 확인하려면).

그럼에도 불구하고 나는 발전했다.gztool옵션에 관계없이 rsyslog에서 생성된 압축된 로그 파일을 쉽게 관리하려면 다음을 수행할 수 있습니다.

  • tail -f다음을 사용하여 텍스트 파일 과 마찬가지로 .log.gz 파일을 계속 추적합니다.gztool -T
  • 로그를 보내는 프로세스가 갑자기 중지되었다가 다시 시작되는 경우에도 모든 데이터를 추출합니다. 이로 인해 zcat/gunzip에 연결할 수 없는 데이터가 있는 gzip 파일이 생성되지만 gztool은 다음과 같이 완벽하게 추출할 수 있습니다.gztool -p
  • 모든 것을 읽지 않고 gzip 파일의 어느 부분에서나 데이터를 추출합니다(다른 도구에서는 필수임).

단지사용예를 참고하세요~의gztool.

문제는 업그레이드 전에 이런 일이 발생하지 않은 이유입니다. 동일한 rsyslog 구성을 사용하여 이전에 이런 일이 발생하지 않았습니까?

관련 정보