안녕하세요. VISION IDC 기술팀입니다.
Ubuntu 22.04 서버를 운영하다 보면 /var/log 아래의 로그 파일이 예상보다 크게 증가하여 디스크 공간을 많이 차지하는 경우가 있습니다. 이때는 로그를 바로 삭제하기보다 어떤 파일이 커졌는지 확인하고, 해당 로그에 적용되는 logrotate 규칙과 실행 상태를 점검하는 것이 안전합니다.
이번 문서에서는 Ubuntu 22.04에서 큰 로그 파일을 찾고, /etc/logrotate.conf와 /etc/logrotate.d/ 설정을 확인한 뒤 보관 개수·압축·크기 기준 등을 조정하는 방법을 설명합니다. 설정 변경 후에는 실제 로그를 강제로 삭제하지 않고 logrotate --debug로 문법과 적용 대상을 먼저 검증합니다.
적용 환경
- 운영체제: Ubuntu 22.04 LTS (Jammy Jellyfish)
- 로그 순환 도구:
logrotate - 주요 설정 파일:
/etc/logrotate.conf,/etc/logrotate.d/* - 상태 파일:
/var/lib/logrotate/status - 자동 실행 확인:
logrotate.timer
1. 용량이 큰 로그 파일 확인
먼저 전체 파일시스템의 사용량을 확인합니다. 로그 파일이 커졌다고 생각해도 실제로는 다른 디렉터리가 디스크 공간을 사용하고 있을 수 있으므로, 어느 파일시스템이 부족한지 먼저 확인하는 것이 좋습니다.
df -h
그다음 /var/log 안에서 용량이 큰 항목을 확인합니다.
sudo du -ah /var/log | sort -h | tail -n 30
일반 텍스트 로그 파일만 별도로 확인하려면 다음과 같이 find를 사용할 수 있습니다. 아래 예시는 100MB를 초과하는 파일을 표시합니다.
sudo find /var/log -xdev -type f -size +100M -printf '%10s %p\n' | sort -n
2. logrotate 설정과 실행 상태 확인
logrotate 설치 여부 확인
먼저 패키지가 설치되어 있는지 확인합니다.
dpkg -l logrotate
설치되어 있지 않다면 다음 명령으로 설치할 수 있습니다.
sudo apt update
sudo apt install -y logrotate
전역 설정과 개별 설정 확인
기본 전역 설정은 /etc/logrotate.conf에서 확인합니다. 일반적으로 이 파일에서 /etc/logrotate.d를 포함하도록 설정되어 있어 패키지나 애플리케이션별 규칙이 함께 읽힙니다.
sudo cat /etc/logrotate.conf
sudo ls -la /etc/logrotate.d/
특정 로그가 어떤 규칙으로 관리되는지 찾으려면 로그 경로를 검색합니다. 예를 들어 /var/log/syslog의 규칙을 찾으려면 다음과 같이 확인할 수 있습니다.
sudo grep -R --line-number --fixed-strings '/var/log/syslog' /etc/logrotate.conf /etc/logrotate.d/
자동 실행 상태 확인
Ubuntu 22.04에서는 systemd 타이머가 설치되어 있으므로 다음 명령으로 활성화 상태와 다음 실행 시점을 확인합니다.
systemctl status logrotate.timer
systemctl list-timers --all logrotate.timer
타이머가 비활성화되어 있다면 다음과 같이 활성화할 수 있습니다.
sudo systemctl enable --now logrotate.timer
최근 실행 결과는 서비스 로그에서 확인할 수 있습니다.
sudo journalctl -u logrotate.service --no-pager
3. 로그 순환 설정 수정
패키지가 제공한 설정 파일을 수정하기 전에는 백업을 만들어 두는 것이 좋습니다. 아래 예시의 파일명은 실제로 수정하려는 설정 파일에 맞게 변경하십시오.
sudo cp -a /etc/logrotate.d/myapp /root/myapp.logrotate.bak
직접 관리하는 애플리케이션의 로그가 /var/log/myapp/*.log에 기록된다고 가정하면 다음과 같은 규칙을 사용할 수 있습니다.
/var/log/myapp/*.log {
daily
rotate 14
maxsize 100M
compress
delaycompress
missingok
notifempty
}
| 옵션 | 의미 |
|---|---|
daily |
일 단위로 순환 조건을 판단합니다. |
rotate 14 |
순환된 로그를 최대 14개 보관한 뒤 오래된 항목부터 제거합니다. |
maxsize 100M |
시간 기준과 함께 사용할 때 로그가 지정한 크기를 넘으면 다음 logrotate 실행 시 순환할 수 있도록 합니다. |
compress |
이전 로그를 기본적으로 gzip으로 압축합니다. |
delaycompress |
가장 최근에 순환된 로그의 압축을 다음 순환 시점까지 미룹니다. |
missingok |
대상 로그가 없어도 오류로 중단하지 않습니다. |
notifempty |
빈 로그 파일은 순환하지 않습니다. |
copytruncate는 필요한 경우에만 사용
일부 프로그램은 로그 파일 이름이 변경된 뒤에도 기존 파일 디스크립터를 계속 사용합니다. 애플리케이션이 로그 파일을 다시 열도록 신호를 보낼 수 없는 경우에는 copytruncate를 고려할 수 있지만, 복사와 잘라내기 사이의 짧은 구간에서 로그 일부가 손실될 수 있습니다.
/var/log/myapp/*.log {
daily
rotate 14
compress
missingok
notifempty
copytruncate
}
가능하다면 해당 애플리케이션이 공식적으로 제공하는 로그 재열기(reopen) 또는 reload 방법과 postrotate 방식을 우선 검토하십시오.
4. 설정 검증과 수동 테스트
변경 없이 디버그 검사
--debug 옵션은 실제 로그 파일을 변경하거나 상태 파일을 갱신하지 않고 설정을 해석합니다. 설정을 수정한 직후 가장 먼저 실행하기 좋은 검사입니다.
sudo logrotate --debug /etc/logrotate.conf
특정 설정 파일만 확인하려면 해당 파일을 직접 지정할 수 있습니다.
sudo logrotate --debug /etc/logrotate.d/myapp
강제 순환 테스트
문법 검사가 끝났고 실제 순환 동작까지 확인해야 한다면 --force를 사용할 수 있습니다. 이 옵션은 현재 순환 조건을 충족하지 않아도 강제로 처리하므로 운영 로그에서는 신중하게 사용해야 합니다.
sudo logrotate --force --verbose /etc/logrotate.d/myapp
실행 후 원본 로그와 순환된 파일이 예상한 형태로 존재하는지 확인합니다.
sudo ls -lh /var/log/myapp/
logrotate가 마지막으로 처리한 기록은 기본 상태 파일에서도 확인할 수 있습니다.
sudo cat /var/lib/logrotate/status
5. 자주 발생하는 문제 해결
| 증상 | 확인 방법 | 조치 |
|---|---|---|
| 설정했는데 로그가 순환되지 않음 | logrotate --debug, systemctl status logrotate.timer, 상태 파일을 확인합니다. |
설정 파일이 실제로 포함되는지, 순환 조건이 충족되었는지, 타이머가 실행되는지 순서대로 확인합니다. |
| 순환 후 애플리케이션 로그가 더 이상 기록되지 않음 | 애플리케이션이 이전 로그 파일을 계속 열고 있는지 확인합니다. | 해당 애플리케이션의 공식적인 로그 reopen/reload 절차와 postrotate를 사용하거나, 불가피한 경우 copytruncate를 검토합니다. |
| 압축 로그가 계속 누적됨 | rotate와 maxage 설정을 확인합니다. |
필요한 보관 정책에 맞춰 순환 개수 또는 보관 기간을 조정합니다. 장애 분석이나 감사에 필요한 로그까지 과도하게 삭제하지 않도록 주의합니다. |
/var/log/journal이 매우 큼 |
journalctl --disk-usage로 systemd journal 사용량을 확인합니다. |
systemd journal은 일반 텍스트 로그와 별도의 저장·회전 정책을 사용하므로 journald.conf의 용량 제한을 점검해야 합니다. |
systemd journal인지 구분
큰 파일이 /var/log/journal 아래의 *.journal이라면 일반적인 logrotate 설정 대상이 아닙니다. 먼저 journal의 실제 사용량을 확인합니다.
journalctl --disk-usage
이 경우에는 /etc/systemd/journald.conf 또는 drop-in 설정에서 SystemMaxUse, SystemKeepFree 등 systemd journal 전용 제한을 검토해야 합니다. logrotate 규칙을 추가하는 방식으로 해결하지 않습니다.
6. 원상복구 방법
기존 설정을 수정하기 전에 백업 파일을 만들었다면 문제가 발생했을 때 원래 파일로 복원할 수 있습니다.
sudo cp -a /root/myapp.logrotate.bak /etc/logrotate.d/myapp
복원 후에는 실제 로그를 변경하지 않는 디버그 모드로 다시 확인합니다.
sudo logrotate --debug /etc/logrotate.conf
자주 묻는 질문
logrotate 설정을 바꾸면 서비스를 재시작해야 하나요?
logrotate 설정 파일 자체를 변경한 것만으로는 일반적으로 별도의 logrotate 데몬 재시작이 필요하지 않습니다. 다음 실행 때 설정을 읽습니다. 다만 로그 파일이 순환된 뒤 애플리케이션이 새 로그 파일을 다시 열어야 하는 구조라면 해당 서비스에 맞는 reload 또는 신호 처리가 필요할 수 있습니다.
100MB가 넘으면 바로 순환되도록 설정할 수 있나요?
size 또는 maxsize 같은 크기 조건을 설정할 수 있지만 logrotate는 실행될 때만 파일 크기를 검사합니다. 따라서 검사 주기가 하루 한 번이라면 파일이 기준 크기를 넘은 순간 즉시 순환되는 것은 아닙니다.
큰 로그 파일을 그냥 비워도 되나요?
긴급한 디스크 공간 확보가 필요하더라도 원인을 확인하지 않고 로그를 삭제하거나 잘라내는 것은 권장하지 않습니다. 먼저 로그 발생 서비스와 순환 정책을 확인하고, 장애 분석에 필요한 기록을 보존한 뒤 서비스 특성에 맞는 방법을 사용하십시오.
logrotate와 systemd-journald는 같은 로그 관리 기능인가요?
아닙니다. logrotate는 주로 일반 로그 파일을 설정 규칙에 따라 순환·압축·삭제하며, systemd journal은 자체 파일 형식과 용량 제한 정책을 사용합니다. /var/log/journal 사용량 문제는 journald 설정을 별도로 확인해야 합니다.
공식 참고자료
- Ubuntu Manpages - logrotate(8): https://manpages.ubuntu.com/manpages/jammy/man8/logrotate.8.html
확인 내용: 설정 파일 처리 방식,--debug,--force, 상태 파일, 순환 주기,size/maxsize, 압축 및copytruncate동작. 조회일: 2026-08-18. - Ubuntu Packages - logrotate (Jammy): https://packages.ubuntu.com/jammy/logrotate
확인 내용: Ubuntu 22.04용 logrotate 패키지와 패키지 정보. 조회일: 2026-08-18. - Ubuntu Packages - logrotate 파일 목록: https://packages.ubuntu.com/jammy/amd64/logrotate/filelist
확인 내용:/etc/logrotate.conf,/etc/logrotate.d/,logrotate.service,logrotate.timer제공 여부. 조회일: 2026-08-18. - Ubuntu Manpages - journald.conf(5): https://manpages.ubuntu.com/manpages/jammy/man5/journald.conf.5.html
확인 내용: systemd journal 저장 위치와SystemMaxUse,SystemKeepFree등 journal 전용 용량 제한. 조회일: 2026-08-18.
마무리
Ubuntu 22.04에서 로그 파일이 지나치게 커질 때는 먼저 실제로 용량을 차지하는 파일을 확인하고, 해당 로그에 적용되는 logrotate 규칙과 logrotate.timer 상태를 순서대로 점검하는 것이 중요합니다. 보관 개수, 압축, 크기 기준을 조정한 뒤에는 logrotate --debug로 설정을 검증하면 불필요한 로그 손실을 줄일 수 있습니다.
로그가 계속 빠르게 증가한다면 순환 주기만 줄이기보다 애플리케이션의 오류 반복이나 과도한 디버그 로그 등 원인도 함께 확인하시기 바랍니다. 오늘 준비한 내용은 여기까지입니다. 다음에도 서버 운영에 도움이 되는 기술정보로 인사드리겠습니다.
