잠재적으로 잘릴 수 있는 gzip 로그 파일 병합

잠재적으로 잘릴 수 있는 gzip 로그 파일 병합

매일 병합해야 하는 로그 파일이 여러 개 있습니다. 각각은 다른 서버에서 제공됩니다. 파일을 거기에 넣는 작업이 때때로 중단되고 파일이 잘립니다. 이 경우 파일은 다음에 실행될 때 다른 이름으로 기록됩니다. 따라서 다음과 같은 로그 파일 목록이 생성될 수 있습니다.

  • server-1-log.gz(어제의 로그 파일)
  • server-1-log.1.gz(오늘의 로그 파일은 전송 중에 중단되어 잘렸습니다.)
  • server-1-log.2.gz(오늘의 로그파일은 재전송되어 그대로 남아있습니다)
  • server-2-log.gz(어제의 로그 파일)
  • server-2-log.1.gz(오늘의 로그 파일)

모든 로그 파일은 각 줄의 타임스탬프로 시작하므로 정렬 및 중복 제거가 매우 간단합니다. 다음 명령을 사용하여 이 파일들을 병합하려고 했습니다.

zcat *.gz | sort | uniq | gzip > /tmp/merged.gz

문제는 잘린 로그 파일이 다음 오류를 생성한다는 것입니다 zcat.

gzip: server-1-log.1.gz: 예기치 않은 파일 끝

zcat에서 이 오류가 발생하면 다른 파일의 모든 데이터를 읽지 않고 완전히 종료되는 것으로 나타났습니다. 파일 중 하나가 손상되었기 때문에 좋은 파일에 있던 데이터가 손실되었습니다. 이 문제를 어떻게 해결할 수 있나요?

  • zcat오류가 발생하여 종료되지 않도록 할 수 있나요 ? 매뉴얼 페이지에는 아무것도 표시되지 않습니다.
  • 호출하기 전에 잘린 gzip 파일을 수정할 수 있습니까 zcat?
  • 다른 스트레스 감소 루틴을 사용할 수 있나요?

답변1

나는 당신이 사용하고 있는 gzip스크립트 버전을 추측하고 있습니다 zcat. 단지 실행되기만 gzip -dc하며 오류가 발생하면 오류를 무시하고 중지하라는 지시를 받을 수 없습니다.

개별 손상된 아카이브에 대한 문서화된 수정 사항은 해당 아카이브를 실행하는 것이므로 zcat거기에서는 많은 도움을 받을 수 없습니다...

파일을 처리하려면 파일을 반복하거나(루프 for또는 xargs찾은 것과 유사한 것을 사용) 다음을 사용할 수 있습니다.주틸스zcat오류가 발생해도 계속 처리하는 버전이 있습니다 .

답변2

나는 이것을 할 수 있는 방법을 찾았습니다. 각 파일을 자체적으로 전달할 수 있습니다 zcat. 이렇게 하려면 xargs -n 1각 파일에 대해 zcat 인스턴스를 시작할 수 있습니다.

echo *.gz | xargs -n 1 zcat | sort | uniq | gzip > /tmp/merged.gz

단일 zcat은 여전히 ​​실패하지만 다른 zcat 실행은 완료됩니다. 전체 파이프라인이 종료되지는 않습니다.

답변3

노력하다초고속 시스템 로그 검색기

(당신이 가지고 있다고 가정러스트 설치됨)

cargo install super_speedy_syslog_searcher

그 다음에

s4 server-*.gz

s4파일을 읽을 수 있습니다 .gz.

관련 정보