본문 바로가기

전산

# 리눅스 서버에서 로그파일을 주기적으로 삭제하는 방법

반응형

리눅스 서버에서는 다양한 로그가 자동으로 생성됩니다. 시스템 로그, 애플리케이션 로그, 사용자 활동 로그 등은 운영과 보안에 중요한 데이터를 담고 있지만, 주기적으로 관리되지 않으면 디스크 공간을 차지하고 시스템 성능에 영향을 줄 수 있습니다.

이 글에서는 리눅스 서버에서 로그 파일을 정기적으로 자동 삭제하는 방법을 소개합니다. 대표적인 자동화 툴인 logrotate, cron, 그리고 간단한 쉘 스크립트를 활용해 실전 적용이 가능한 방법을 알려드립니다.


1. 리눅스 로그 파일이 저장되는 위치

리눅스에서는 대부분의 로그 파일이 /var/log 디렉토리에 저장됩니다. 예를 들어:

  • /var/log/syslog 또는 /var/log/messages: 시스템 로그
  • /var/log/auth.log: 인증 관련 로그
  • /var/log/nginx/: 웹 서버 로그
  • /var/log/httpd/: Apache 로그
  • 애플리케이션별 로그 경로는 /opt, /home, /srv 등에도 존재할 수 있음

2. 로그 파일을 정리해야 하는 이유

  • 디스크 공간 확보: 로그 파일은 누적되며 수 GB 이상을 차지할 수 있음
  • 보안 관리: 오래된 인증 로그 등은 보안 사고 위험
  • 시스템 성능 최적화: 불필요한 I/O 부하 예방
  • 운영 효율성 확보: 수동으로 삭제하는 번거로움 해소

3. logrotate로 로그 자동 정리하기

logrotate란?

logrotate는 리눅스에서 기본적으로 사용되는 로그 관리 도구로, 로그를 주기적으로 압축, 이동, 삭제할 수 있도록 설정할 수 있습니다.

logrotate 설정 파일 위치

  • 전역 설정: /etc/logrotate.conf
  • 개별 설정: /etc/logrotate.d/ 디렉토리 내의 설정 파일들

예시: nginx 로그 자동 삭제 설정

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    delaycompress
    postrotate
        systemctl reload nginx > /dev/null 2>/dev/null || true
    endscript
}

설명:

  • daily: 매일 회전
  • rotate 7: 7일치 보관, 그 이후 삭제
  • compress: gzip으로 압축
  • notifempty: 비어 있는 로그는 건너뜀
  • postrotate: 로그 회전 후 Nginx 재시작

4. cron과 쉘 스크립트를 활용한 로그 삭제 자동화

간단한 쉘 스크립트 예제

아래는 30일 이상된 로그 파일을 삭제하는 스크립트입니다.

#!/bin/bash
LOG_DIR="/var/log/custom/"
find $LOG_DIR -type f -name "*.log" -mtime +30 -exec rm -f {} \;

크론(cron)으로 주기적 실행 설정

crontab -e

예: 매일 자정에 실행

0 0 * * * /usr/local/bin/delete_old_logs.sh

스크립트에 실행 권한을 부여하세요:

chmod +x /usr/local/bin/delete_old_logs.sh

5. 시스템 로그 정리 예시: journalctl

systemd 기반 시스템에서는 journalctl 명령어로 로그를 관리합니다.

오래된 로그 자동 삭제

sudo journalctl --vacuum-time=7d
  • 7일 이상 된 시스템 로그 삭제

자동화를 원한다면 다음과 같이 crontab에 추가:

0 3 * * * /usr/bin/journalctl --vacuum-time=7d

6. 삭제가 아닌 압축/백업이 필요하다면?

로그를 바로 삭제하기보다 압축 후 백업하는 것도 좋은 방법입니다.

예제: gzip으로 로그 압축 후 삭제

find /var/log/custom/ -type f -name "*.log" -mtime +7 -exec gzip {} \;
find /var/log/custom/ -type f -name "*.log.gz" -mtime +30 -exec rm -f {} \;
  • 7일 이상된 로그는 압축
  • 압축된 후 30일 지난 로그는 삭제

7. 주의사항

  • 중요 로그는 삭제 전에 백업하세요.
  • 스크립트를 적용하기 전에는 테스트 필요
  • logrotatecron이 충돌하지 않도록 설정 확인
  • 일부 로그 파일은 루트 권한이 필요할 수 있음
  • 애플리케이션 별로 별도 설정이 존재할 수 있음 (예: Docker 로그)

8. 실무 적용 팁

항목 설명
관리 대상 .log, .gz, .old 등 로그 파일
도구 logrotate, cron, journalctl, find
보관 기간 7일, 30일 등 운영정책에 따라 조정
백업 경로 /mnt/nas/logs/, AWS S3 등 외부 스토리지
적용 주기 daily, weekly, monthly 설정 가능

자주 묻는 질문 (FAQ)

Q1. logrotate는 어떤 리눅스 배포판에서 사용 가능한가요?

A. 거의 모든 주요 리눅스 배포판(Ubuntu, CentOS, Debian, Rocky Linux 등)에 기본 설치되어 있으며, 없다면 패키지 매니저를 통해 설치 가능합니다.

sudo apt install logrotate        # Ubuntu, Debian
sudo yum install logrotate        # CentOS, RHEL

Q2. 로그를 삭제하지 않고 다른 디스크로 옮길 수 있나요?

A. 가능합니다. logrotateolddir 옵션이나 mv 명령어로 이동할 수 있으며, rsync로 NAS나 외부 저장소에 백업 후 삭제하는 것도 일반적인 방법입니다.


Q3. logrotate 설정이 적용되지 않는 것 같습니다. 왜 그럴까요?

A. 다음 사항을 점검해보세요:

  • 설정 파일에 문법 오류 (logrotate -d로 테스트 가능)
  • logrotate가 cron에 등록되어 있지 않은 경우
  • 해당 로그 파일이 열려 있어 회전 불가

Q4. Docker 로그도 자동으로 삭제할 수 있나요?

A. 가능합니다. Docker에서는 로그 드라이버를 변경하거나, logrotate를 활용해 /var/lib/docker/containers 아래의 로그를 정기 삭제할 수 있습니다. 단, 운영 중인 컨테이너의 로그는 주의해서 삭제해야 합니다.


마무리

리눅스 서버를 안정적으로 운영하려면 로그 파일 관리 자동화는 필수입니다. logrotate, cron, 쉘 스크립트를 잘 활용하면 수동 작업 없이 효율적으로 로그를 유지 관리할 수 있습니다.

특히, 로그를 단순히 삭제하기보다는 보관 기간 설정, 압축, 백업 전략과 병행하여 사용하는 것이 안전하고 효율적인 운영 방법입니다.


🔍 관련 키워드: 리눅스 로그 삭제 자동화, logrotate 설정, crontab 로그 정리, 리눅스 서버 유지관리, 쉘 스크립트 로그 정리, journalctl 로그 삭제, Linux log cleanup

반응형