리눅스 서버에서는 다양한 로그가 자동으로 생성됩니다. 시스템 로그, 애플리케이션 로그, 사용자 활동 로그 등은 운영과 보안에 중요한 데이터를 담고 있지만, 주기적으로 관리되지 않으면 디스크 공간을 차지하고 시스템 성능에 영향을 줄 수 있습니다.
이 글에서는 리눅스 서버에서 로그 파일을 정기적으로 자동 삭제하는 방법을 소개합니다. 대표적인 자동화 툴인 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. 주의사항
- 중요 로그는 삭제 전에 백업하세요.
- 스크립트를 적용하기 전에는 테스트 필요
logrotate
와cron
이 충돌하지 않도록 설정 확인- 일부 로그 파일은 루트 권한이 필요할 수 있음
- 애플리케이션 별로 별도 설정이 존재할 수 있음 (예: 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. 가능합니다. logrotate
의 olddir
옵션이나 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
'전산' 카테고리의 다른 글
# Kubernetes에서 로그파일을 주기적으로 삭제하는 방법 (0) | 2025.04.09 |
---|---|
# Docker에서 로그파일을 주기적으로 삭제하는 방법 (0) | 2025.04.09 |
# 윈도우 서버에서 로그파일을 주기적으로 삭제하는 방법 (0) | 2025.04.09 |
# 리눅스 GPFS 스토리지 연결하기 (0) | 2025.04.04 |
# 리눅스 NAS 스토리지 연결하기: 완벽 가이드 (NFS / SMB 방법 포함) (0) | 2025.04.04 |