우분투 실전 명령어 | logrotate로 로그 용량 폭증 방지 설정
언제 쓰는가
운영 중인 서버에서 /var/log가 빠르게 불어나 디스크를 압박할 때 가장 먼저 손보는 게 logrotate입니다. 특히 Nginx, 애플리케이션, 배치 로그가 하루 단위로 쌓이면 방치 시 장애로 이어지기 쉽습니다. "로그는 남기되 용량은 통제"가 필요할 때 바로 적용하면 됩니다.
바로 쓰는 명령어
# 1) 현재 logrotate 설정 점검
sudo logrotate --debug /etc/logrotate.conf | less
# 2) 서비스별 설정 확인
cat /etc/logrotate.d/nginx
# 3) 커스텀 로그 회전 정책 파일 생성
sudo tee /etc/logrotate.d/myapp >/dev/null <<'EOF'
/var/log/myapp/*.log {
daily
rotate 14
missingok
notifempty
compress
delaycompress
dateext
copytruncate
su root adm
}
EOF
# 4) 문법/동작 테스트
sudo logrotate --debug /etc/logrotate.conf
# 5) 즉시 강제 회전 테스트
sudo logrotate --force /etc/logrotate.conf
핵심 옵션/패턴
# 주기
weekly # 주간 회전
monthly # 월간 회전
# 보관 개수
rotate 8 # 최근 8개 파일 보관
# 압축
compress
delaycompress # 직전 회전 파일은 다음 회전 시점에 압축
# 예외 처리
missingok # 파일 없어도 에러 내지 않음
notifempty # 빈 파일은 회전하지 않음
# 프로세스가 파일 핸들을 잡고 있을 때
copytruncate # 원본을 복사 후 잘라내기(재시작 없이 대응)
자주 하는 실수
copytruncate없이 회전만 걸어두고 "로그가 안 줄었다"고 오해하는 경우가 많습니다. 프로세스가 기존 파일 핸들을 계속 쓰면 파일이 기대처럼 줄지 않습니다.rotate값을 너무 작게 잡아 장애 분석에 필요한 과거 로그가 사라지기도 합니다. 서비스 중요도에 맞춰 보관 기간을 먼저 계산하세요.--force를 운영 시간에 무심코 반복 실행하면 I/O가 튈 수 있습니다. 트래픽이 낮은 시간에 검증하는 게 안전합니다.
검증 방법
# 회전 결과 확인
ls -lh /var/log/myapp/
# 최근 실행 상태 확인
sudo cat /var/lib/logrotate/status | tail -n 20
# 압축 파일 포함 용량 확인
du -sh /var/log/myapp
# 시스템 로그에서 logrotate 실행 흔적 확인
journalctl -u cron -n 50 --no-pager | grep -i logrotate
실행 결과 예시
$ sudo logrotate --debug /etc/logrotate.conf
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file nginx
reading config file myapp
...
rotating pattern: /var/log/myapp/*.log after 1 days (14 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/myapp/app.log
log needs rotating
$ ls -lh /var/log/myapp/
-rw-r----- 1 root adm 12M Feb 18 21:20 app.log
-rw-r----- 1 root adm 1.8M Feb 17 00:00 app.log-20260217.gz
-rw-r----- 1 root adm 2.1M Feb 16 00:00 app.log-20260216.gz
출처
- Ubuntu Server Guide
- logrotate man page
- Debian logrotate package notes