[Linux] logrotate로 로그 파일 관리 자동화하기

리눅스 서버를 운영하다 보면 로그 파일이 계속 쌓이게 됩니다.
시간이 지나면 로그 파일 크기가 커져서 디스크 공간을 잡아먹고, 관리도 어려워지죠.

이럴 때 사용하는 도구가 바로 logrotate입니다.
정해진 주기에 따라 로그 파일을 자동으로 백업하고, 압축하고, 오래된 로그를 삭제해줍니다.

 


logrotate란?

logrotate는 로그 파일을 주기적으로 순환(rotating)하여 오래된 로그를 정리해주는 유틸리티입니다.
많은 리눅스 배포판에서 기본 설치되어 있으며, /etc/logrotate.conf/etc/logrotate.d/에서 설정을 관리합니다.

 

기본 동작 방식

logrotate는 다음과 같은 작업을 자동으로 수행할 수 있습니다:

  • 로그 파일 분리 및 백업 (rotate)
  • 압축 저장 (gzip)
  • 백업 개수 유지 (rotate 개수 설정)
  • 서비스 재시작 또는 로그 재오픈 (postrotate)

 

기본 설정 파일 위치

  • /etc/logrotate.conf: 전역 설정 파일
  • /etc/logrotate.d/: 개별 서비스별 설정 파일 (ex: nginx, apache 등)

보통 시스템에 설치된 서비스들은 /etc/logrotate.d/ 디렉토리 안에 설정 파일을 따로 가지고 있습니다.

 

예시: Nginx 로그 설정 보기

cat /etc/logrotate.d/nginx

예시 내용:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
    endscript
}

주요 항목 설명

  • daily: 매일 로그 순환
  • rotate 14: 14개의 백업 파일까지 유지
  • compress: gzip으로 압축
  • notifempty: 파일이 비어 있으면 무시
  • postrotate ~ endscript: 로그 분리 후 Nginx에 로그 파일 재오픈 신호

 

사용자 정의 로그 설정 만들기

예를 들어 /var/log/myapp.log라는 로그 파일을 관리하고 싶다면:

sudo nano /etc/logrotate.d/myapp

설정 예시:

/var/log/myapp.log {
    weekly
    rotate 8
    compress
    missingok
    notifempty
    create 0644 root root
}

이 설정은 매주 로그를 순환하고, 최대 8개의 백업 로그를 gzip으로 압축하여 유지합니다.

 

수동으로 logrotate 실행해보기

설정을 테스트하고 싶을 땐 수동으로 실행해볼 수 있어요.

sudo logrotate -d /etc/logrotate.conf

→ 실제로 실행하지 않고 시뮬레이션

sudo logrotate -f /etc/logrotate.conf

→ 강제로 실행

 

로그 관리는 logrotate

logrotate는 시스템 로그부터 애플리케이션 로그까지 자동으로 관리해주는 강력한 도구입니다.
정기적인 순환 설정만 잘 해두면, 디스크 공간을 아끼고 로그 관리도 훨씬 편해집니다.