메뉴 닫기

리눅스 로그 로테이션 logrotate로 디스크 용량 효율 관리

🐧 리눅스 로그 로테이션 logrotate로 디스크 용량 효율 관리

🛠️ 로그 백업과 삭제를 자동화해 서버 관리 시간을 줄이는 방법

서버를 운영하다 보면 로그 파일이 쌓여 디스크 용량을 압박하는 상황이 자주 발생합니다.
특히 웹 서버, 데이터베이스, 애플리케이션 로그는 장기간 방치하면 기가바이트 단위로 커지며 성능에도 영향을 줄 수 있습니다.
이런 문제를 해결하기 위해 많은 리눅스 서버에서는 logrotate라는 도구를 사용합니다.
이 도구는 일정 주기로 로그 파일을 압축·백업하거나 삭제하여 디스크 공간을 효율적으로 관리할 수 있게 해줍니다.
단순히 저장 공간을 확보하는 것을 넘어, 로그 분석 효율을 높이고 장애 대응 속도까지 개선할 수 있는 필수 관리 방법입니다.

이번 글에서는 logrotate의 기본 개념과 동작 방식, 그리고 실제 설정 예시까지 단계별로 안내합니다.
또한 운영 환경에 맞춘 커스터마이징 방법과 주의해야 할 점도 함께 다룰 예정입니다.
이 글을 읽고 나면 서버 로그 관리가 한층 수월해지고, 불필요한 용량 낭비 없이 안정적인 운영이 가능해질 것입니다.



🔍 logrotate란 무엇인가?

리눅스 서버를 장기간 운영하다 보면 로그 파일이 기하급수적으로 늘어나 디스크 공간을 크게 차지하게 됩니다.
특히 웹 서버의 access.logerror.log 같은 파일은 트래픽이 많은 환경에서 하루 만에 수백 메가바이트를 넘길 수 있습니다.
이런 상황을 방치하면 디스크가 가득 차 서비스 장애로 이어질 수 있죠.
이를 예방하고 효율적인 로그 관리를 위해 사용되는 것이 바로 logrotate입니다.

logrotate는 리눅스 시스템에서 로그 파일을 일정 주기마다 회전(rotating)시켜 새로운 파일로 교체하고, 오래된 로그는 압축하거나 삭제하는 자동화 도구입니다.
이를 통해 로그 파일 크기를 제한하고, 필요한 로그는 안전하게 백업하여 보관하며, 불필요한 데이터는 정리해 디스크 공간을 확보할 수 있습니다.
시스템 관리자 입장에서는 매번 수동으로 로그를 관리할 필요 없이, 설정만 해두면 자동으로 관리되므로 효율성과 안정성을 동시에 확보할 수 있습니다.

📌 logrotate의 주요 기능

  • 🗂️일정 주기로 로그 파일을 새로 생성하고 기존 로그를 분리 보관
  • 📦오래된 로그를 gzip 등으로 자동 압축
  • 🗑️설정한 보관 기간이 지난 로그 자동 삭제
  • 🔄로그 파일 교체 후 서비스 자동 재시작 또는 로그 핸들러 재설정

💬 logrotate는 대부분의 리눅스 배포판에 기본 탑재되어 있으며, 크론(cron) 또는 systemd 타이머를 통해 자동 실행됩니다.

⚙️ logrotate 기본 동작 원리

logrotate의 핵심 개념은 로그 파일을 일정 주기마다 교체하고, 이전 로그는 별도 파일로 보관하는 것입니다.
이 과정에서 오래된 로그는 압축하거나 삭제할 수 있으며, 주기와 보관 개수는 설정 파일을 통해 유연하게 조정할 수 있습니다.
이 덕분에 로그가 무한정 커지는 것을 방지하고, 디스크 공간을 안정적으로 유지할 수 있습니다.

logrotate는 크게 다음과 같은 절차로 동작합니다.
먼저 현재 사용 중인 로그 파일을 닫고, 새로운 로그 파일을 생성합니다.
그 후 기존 로그 파일의 이름을 날짜나 순번이 붙은 형태로 변경합니다.
이후 설정에 따라 이전 로그를 gzip으로 압축하거나, 설정된 보관 개수 이상이 된 파일은 삭제합니다.
마지막으로 로그를 쓰고 있는 서비스(예: Nginx, Apache, MySQL 등)에 로그 파일이 변경되었음을 알리는 신호를 보내 정상적으로 새 파일에 로그를 기록하도록 합니다.

📌 실행 주기와 트리거 방식

logrotate는 일반적으로 cron 작업이나 systemd timer에 의해 자동 실행됩니다.
예를 들어, 매일 새벽 4시에 한 번씩 실행되도록 설정할 수 있으며, 시스템 부하가 적은 시간대에 로그 교체 작업이 진행되도록 조정할 수 있습니다.
또한, 특정 서비스 로그만 별도의 주기로 회전시키는 것도 가능합니다.

  • 📅주기 설정: daily, weekly, monthly 등
  • 📦보관 개수 지정: rotate N
  • 🗜️gzip 등 압축 여부 설정
  • 🔄서비스 재시작 또는 로그 핸들러 재설정
CODE BLOCK
/var/log/nginx/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        systemctl reload nginx
    endscript
}



🛠️ logrotate 설정 파일 구조

logrotate는 설정 파일을 기반으로 작동하며, 기본 설정과 개별 서비스별 설정이 계층적으로 적용됩니다.
대부분의 리눅스 배포판에서는 /etc/logrotate.conf 파일이 기본 설정을 정의하고 있으며, 개별 설정은 /etc/logrotate.d/ 디렉터리 안의 서비스별 파일에 저장됩니다.

예를 들어 Nginx 로그를 관리하려면 /etc/logrotate.d/nginx 파일을 수정하거나 새로 생성하면 됩니다.
이 구조 덕분에 전체 시스템에 적용되는 정책과 개별 서비스에 특화된 정책을 분리해 관리할 수 있어, 유지보수가 용이합니다.

📌 주요 설정 지시어

지시어 설명
daily / weekly / monthly 로그 회전 주기 설정
rotate N 보관할 로그 파일 개수
compress gzip 등으로 로그 압축
missingok 로그 파일이 없어도 오류 없이 진행
notifempty 로그가 비어있으면 회전하지 않음
postrotate / endscript 회전 후 실행할 명령어(서비스 재시작 등)

💎 핵심 포인트:
logrotate 설정은 기본 정책과 서비스별 정책을 적절히 분리해 관리하는 것이 유지보수 효율을 높이는 핵심입니다.

📅 로그 로테이션 주기 설정하기

로그 로테이션 주기는 서버 환경과 로그 생성량에 따라 달라집니다.
트래픽이 많은 서비스는 하루 단위(daily)로 회전시키는 것이 좋고, 로그량이 적은 서비스는 주간(weekly) 또는 월간(monthly) 설정이 적합합니다.
올바른 주기 설정은 디스크 사용량 최적화와 장애 예방 모두에 중요한 역할을 합니다.

또한 보관 개수(rotate N)를 적절히 지정해야 합니다.
예를 들어 rotate 7로 설정하면 7일치 로그만 보관하고, 8일차 로그부터는 자동으로 삭제됩니다.
이는 오래된 로그가 불필요하게 쌓이지 않도록 해주며, 필요한 경우 압축 보관으로 설정해 공간 절약을 극대화할 수 있습니다.

📌 주기별 설정 예시

CODE BLOCK
# 매일 회전, 14일 보관, 압축
/var/log/nginx/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        systemctl reload nginx
    endscript
}

# 매주 회전, 4주 보관
/var/log/mysql/*.log {
    weekly
    rotate 4
    missingok
    notifempty
}

💡 TIP: 로그 보관 정책은 반드시 서비스의 성격과 법적 보관 의무를 고려해 설정해야 합니다. 특히 금융, 의료, 공공기관 서비스는 로그 보관 기간이 법적으로 규정된 경우가 많습니다.



💡 실전 logrotate 활용 팁

logrotate는 단순히 로그를 회전시키는 기능 외에도 다양한 활용 방법이 있습니다.
예를 들어, 서비스별로 서로 다른 주기와 보관 정책을 적용하거나, 로그 회전 후 자동으로 분석 스크립트를 실행하게 할 수도 있습니다.
또한, 압축 형식을 gzip에서 bzip2xz로 변경해 압축 효율을 높일 수도 있습니다.

서비스 운영 환경에 맞게 logrotate를 커스터마이징하면 관리 효율을 극대화할 수 있습니다.
특히 로그 분석, 보안 감사, 장애 대응 등 로그 활용 목적에 따라 회전 정책을 달리 적용하면 불필요한 용량 낭비를 줄이고 필요한 정보만 효율적으로 보관할 수 있습니다.

📌 실무에서 자주 쓰는 설정 예

CODE BLOCK
/var/log/app/*.log {
    weekly
    rotate 8
    compress
    delaycompress
    missingok
    notifempty
    dateext
    dateformat -%Y%m%d
    postrotate
        /usr/local/bin/log-analysis.sh
    endscript
}

  • 📂서비스별 개별 설정 파일로 관리
  • 📈로그 회전 후 분석 스크립트 자동 실행
  • 🗜️압축 방식 변경으로 저장 효율 향상
  • 🛡️보안 감사 및 장애 분석 로그는 장기 보관

⚠️ 주의: 로그 회전 시 서비스 재시작이 필요한 경우, 작업 시간대와 서비스 가용성을 반드시 고려해야 합니다.

자주 묻는 질문 (FAQ)

logrotate는 리눅스에 기본 설치되어 있나요?
대부분의 리눅스 배포판에는 logrotate가 기본 설치되어 있으며, 없는 경우 패키지 매니저를 통해 간단히 설치할 수 있습니다.
logrotate 실행 주기는 어떻게 조정하나요?
/etc/logrotate.conf 또는 서비스별 설정 파일에서 daily, weekly, monthly와 같은 주기를 지정하거나 cron, systemd timer 설정을 변경하면 됩니다.
압축 형식을 gzip 외에 변경할 수 있나요?
가능합니다. compress 옵션 대신 compresscmd를 사용하여 bzip2, xz 등 다른 압축 도구를 지정할 수 있습니다.
logrotate가 실행될 때 서비스가 중단되나요?
대부분의 경우 중단되지 않지만, 일부 서비스는 로그 파일 교체 후 재시작이 필요할 수 있으므로 설정에 주의해야 합니다.
회전된 로그는 어디에 저장되나요?
기본적으로 같은 디렉터리에 날짜나 번호가 붙은 파일명으로 저장되며, 설정에 따라 다른 경로로 지정할 수도 있습니다.
logrotate가 실행 중 실패하면 어떻게 되나요?
missingok 옵션을 사용하면 로그 파일이 없어도 에러 없이 진행되며, 실패 시 다음 실행 주기에 다시 시도됩니다.
logrotate 설정을 변경한 후 즉시 실행할 수 있나요?
네, logrotate -f /경로/설정파일 명령어로 강제 실행이 가능합니다.
서비스별로 다른 보관 기간을 설정할 수 있나요?
가능합니다. /etc/logrotate.d/ 디렉터리 내 개별 설정 파일에서 각 서비스별로 보관 기간과 압축 여부를 자유롭게 지정할 수 있습니다.

📦 logrotate로 효율적인 서버 로그 관리 마무리

리눅스 서버 운영에서 로그 관리는 단순한 기록 보관이 아니라, 서비스 안정성과 성능 유지에 직결되는 중요한 작업입니다.
logrotate를 활용하면 로그를 일정 주기로 자동 백업·삭제하여 디스크 용량을 확보하고, 필요 시 압축해 저장 효율을 높일 수 있습니다.
또한 서비스별로 다른 정책을 적용해 운영 환경에 맞는 유연한 관리가 가능합니다.
이번 글에서 살펴본 설정 방법과 활용 팁을 기반으로 logrotate를 적절히 활용하면, 장애 예방과 보안 감사 대응에도 큰 도움이 됩니다.

궁극적으로 logrotate는 단순한 로그 정리 도구를 넘어, 서버 관리 효율성과 안정성을 동시에 확보할 수 있는 필수 관리 도구입니다.
주기와 보관 정책, 압축 방식 등을 환경에 맞게 조율하여 장기적인 서비스 운영 전략에 반영해 보시기 바랍니다.


🏷️ 관련 태그 : 리눅스, 로그관리, logrotate, 서버운영, 시스템관리, 로그백업, 디스크용량관리, 서버보안, 로그자동화, 운영팁