압축을 통한 로그 회전?

압축을 통한 로그 회전?

저는 stdout에서 많은 출력을 생성하는 Linux(CentOS 7)에서 프로세스를 실행하고 있습니다. 모두 파일로 보내면 파일 크기가 1TB보다 커집니다. 그러나 다행히도 출력은 꽤 압축 가능합니다. 꽤 반복적인 텍스트로 구성되어 있기 때문입니다.

제 생각에는 여기에 설명된 것과 같은 일종의 로그 회전 프로그램을 사용할 수 있을까요?stdout의 로그 회전?), 그러나 로그가 더 이상 최신이 아닌 경우 압축되며 삭제되지 않습니다. 그래서 결국 파일에 몇 GB 정도 쓰고 압축한 다음 계속해서 새로운 파일에 쓰게 될까요?

답변1

당신이 사용할 수있는로그로테이션이를 위해. CentOS 7을 사용 중입니다.체계화된그래서 당신은예약된 로그 회전 작업다음과 같이 :

  • 다음 내용으로 /etc/systemd/system호출되는 logrotate 구성 파일을 만듭니다 .mylogrotate.config

    /path/to/your/logfile/*.log {
        compress
        copytruncate
        delaycompress
        minsize 1G
        missingok
        nomail
        notifempty
        rotate 30
    }
    

이는 logrotate에 다음을 수행하도록 지시합니다.

  • 이전 버전의 로그 파일은 기본적으로 gzip으로 압축됩니다.
  • 이전 로그 파일을 이동하고 선택적으로 새 로그 파일을 만드는 대신 복사본을 만든 후 원본 로그 파일을 자릅니다.
  • 이전 로그 파일의 압축을 다음 순환 주기로 연기하여 두 개의 압축되지 않은 로그 파일을 갖게 됩니다.
  • 로그 파일이 1GB보다 커지면 순환됩니다.
  • 로그 파일이 누락된 경우 오류 메시지를 표시하지 않고 다음 파일로 이동합니다.
  • 오래된 로그 파일을 어떤 주소로도 우편으로 보내지 마십시오.
  • 로그 파일은 제거되기 전에 30번 순환되므로 30개의 오래된 로그 파일이 있게 됩니다. 그보다 오래된 것은 삭제됩니다.

시스템 서비스를 만듭니다. 다음을 사용하여 /etc/systemd/system호출된 파일을 만듭니다 .mylogrotate.service

[Unit]
Description=Rotate My Log

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/systemd/system/mylogrotate.config --state /etc/systemd/system/mylogrotate.state --verbose

이 작업을 예약해 보겠습니다. 다음을 사용하여 /etc/systemd/system호출된 세 번째 파일을 만듭니다 .mylogrotate.timer

[Unit]
Description=Rotate My Log Timer

[Timer]
OnCalendar=*:00:00
Persistent=true

[Install]
WantedBy=timers.target

매시간 logrotate가 실행됩니다.

모두 설정되었습니다. 이제 예약된 작업을 활성화합니다.

systemctl enable mylogrotate.timer
systemctl start mylogrotate.timer

물론 이 모든 작업을 루트로 수행하십시오.

(저는 Ubuntu를 사용하고 있지만 CentOS에서도 문제 없이 작동하길 바랍니다)

관련 정보