안녕하세요. VISION IDC 기술팀입니다.
Ubuntu 22.04 서버를 오래 운영하다 보면 systemd-journald가 저장하는 journalctl 로그가 누적되어 /var 또는 루트 파일시스템의 디스크 용량을 많이 사용하는 경우가 있습니다. 이때는 로그 파일을 직접 삭제하기보다 journalctl의 회전과 vacuum 기능을 사용해 오래된 저널을 안전하게 정리하는 것이 좋습니다.
이번 문서에서는 journal 로그의 현재 사용량을 확인하고, 오래된 로그를 기간 또는 용량 기준으로 정리한 뒤, 다시 과도하게 증가하지 않도록 journald의 최대 사용량을 제한하는 방법까지 설명합니다.
적용 환경
| 운영체제 | Ubuntu 22.04 LTS (Jammy Jellyfish) |
|---|---|
| 로그 시스템 | systemd-journald, journalctl |
| 지원 상태 | Ubuntu 22.04 LTS는 2027년 5월까지 표준 보안 유지보수 대상입니다. |
1. journal 로그 사용량 확인
먼저 실제로 파일시스템의 여유 공간이 부족한지 확인합니다.
df -hT /
df -hT /var
그다음 journalctl --disk-usage로 현재 journal 파일 전체가 차지하는 디스크 공간을 확인합니다.
sudo journalctl --disk-usage
이 값에는 활성 journal 파일과 이미 회전된 archived journal 파일이 함께 포함됩니다.
journal 저장 위치 확인
Ubuntu 22.04의 systemd-journald는 환경에 따라 로그를 영구 저장소인 /var/log/journal 또는 휘발성 저장소인 /run/log/journal에 보관합니다. 두 경로의 실제 사용량을 확인하려면 다음 명령어를 실행합니다.
sudo du -sh /var/log/journal /run/log/journal 2>/dev/null
2. 오래된 journal 로그 정리
활성 로그를 먼저 회전하기
--vacuum-* 옵션은 주로 이미 회전된 archived journal 파일을 대상으로 동작합니다. 현재 활성 journal까지 정리 대상에 포함시키려면 먼저 로그 회전을 실행하는 것이 효과적입니다.
sudo journalctl --rotate
기간 기준으로 오래된 로그 삭제
예를 들어 14일보다 오래된 archived journal 로그를 제거하려면 다음과 같이 실행합니다.
sudo journalctl --vacuum-time=14d
운영 정책에 따라 7d, 30d처럼 보존 기간을 조정할 수 있습니다.
용량 기준으로 로그 정리
archived journal 로그의 사용량을 약 1GB 이하로 줄이고 싶다면 다음 명령어를 사용할 수 있습니다.
sudo journalctl --vacuum-size=1G
활성 파일까지 먼저 회전한 뒤 바로 용량 기준으로 정리하려면 다음처럼 한 번에 실행할 수 있습니다.
sudo journalctl --rotate --vacuum-size=1G
정리 후 다시 사용량과 파일시스템 여유 공간을 확인합니다.
sudo journalctl --disk-usage
df -hT /var
df -hT /
3. journal 로그 최대 용량 제한
한 번 로그를 정리하는 것만으로는 같은 문제가 다시 발생할 수 있습니다. journal 사용량을 일정 수준으로 제한하려면 journald 설정을 추가합니다.
패키지가 제공하는 기본 설정 파일을 직접 수정하기보다 관리자 설정용 drop-in 디렉터리를 만드는 방식이 관리에 편리합니다.
sudo mkdir -p /etc/systemd/journald.conf.d
sudo nano /etc/systemd/journald.conf.d/10-disk-limit.conf
다음은 영구 journal 로그를 최대 1GB, 휘발성 journal 로그를 최대 256MB로 제한하는 예시입니다. 서버의 디스크 크기와 로그 보존 정책에 맞게 값을 변경하십시오.
[Journal]
SystemMaxUse=1G
RuntimeMaxUse=256M
적용되는 설정 확인
Ubuntu 22.04의 systemd에서는 다음 명령으로 기본 설정과 drop-in 파일을 포함한 구성을 확인할 수 있습니다.
sudo systemd-analyze cat-config systemd/journald.conf
설정을 저장한 뒤 systemd-journald를 재시작합니다.
sudo systemctl restart systemd-journald
서비스가 정상적으로 실행 중인지 확인합니다.
systemctl is-active systemd-journald
sudo journalctl --disk-usage
is-active 결과가 active이면 journald 서비스가 실행 중인 상태입니다.
4. 로그가 급격히 증가하는 원인 확인
journal 용량을 제한해도 특정 서비스가 오류를 반복해서 기록하고 있다면 근본 원인을 해결해야 합니다. 최근 로그를 확인하여 동일한 메시지가 지속적으로 반복되는지 점검합니다.
sudo journalctl --since "1 hour ago" --no-pager | tail -n 200
경고 이상의 메시지만 최근 24시간 기준으로 확인하려면 다음 명령을 사용할 수 있습니다.
sudo journalctl -p warning..alert --since "24 hours ago" --no-pager
특정 서비스가 의심된다면 해당 unit만 필터링합니다. 아래의 nginx.service는 예시이며 실제 점검할 서비스명으로 변경하십시오.
sudo journalctl -u nginx.service --since "1 hour ago" --no-pager
같은 오류가 짧은 간격으로 반복된다면 로그 삭제만 반복하기보다 해당 서비스의 설정 오류, 재시작 루프, 네트워크 연결 실패 등의 원인을 먼저 해결해야 합니다.
5. 자주 발생하는 문제와 해결 방법
| 증상 | 가능한 원인 | 확인 방법 | 해결 방법 |
|---|---|---|---|
--vacuum-size 실행 후에도 사용량이 크게 줄지 않음 |
활성 journal 파일은 vacuum 대상으로 바로 삭제되지 않음 | journalctl --disk-usage 실행 |
journalctl --rotate 후 vacuum을 다시 실행 |
SystemMaxUse를 설정했지만 용량 제한이 적용되지 않는 것처럼 보임 |
로그가 /run/log/journal에 저장되고 있음 |
du -sh /var/log/journal /run/log/journal 확인 |
RuntimeMaxUse도 환경에 맞게 설정 |
journal을 정리했는데도 /var 사용률이 높음 |
journal 외의 일반 로그 또는 다른 파일이 공간을 사용 중 | du -xhd1 /var 등으로 디렉터리별 사용량 확인 |
실제 대용량 디렉터리를 확인하고 해당 로그의 logrotate 설정 등을 별도로 점검 |
| 정리 후 journal이 다시 빠르게 증가함 | 특정 서비스가 오류 메시지를 반복 기록함 | 최근 로그 및 의심 서비스의 journalctl -u 출력 확인 |
로그 한도 조정과 함께 반복 오류의 근본 원인을 수정 |
6. 설정 원상복구
추가한 journal 용량 제한을 제거하려면 앞에서 만든 drop-in 파일을 삭제하고 systemd-journald를 재시작합니다.
sudo rm /etc/systemd/journald.conf.d/10-disk-limit.conf
sudo systemctl restart systemd-journald
설정이 제거되었는지 다시 확인합니다.
sudo systemd-analyze cat-config systemd/journald.conf
공식 참고자료
| 기관 / 프로젝트 | 문서 | 확인 내용 | 조회일 |
|---|---|---|---|
| Ubuntu Manpages | journalctl(1) | --disk-usage, --rotate, --vacuum-size, --vacuum-time 동작 |
|
| Ubuntu Manpages | journald.conf(5) | SystemMaxUse, RuntimeMaxUse 및 journal 저장 위치별 제한 방식 |
|
| Ubuntu Manpages | systemd-journald.service(8) | /var/log/journal과 /run/log/journal의 영구·휘발성 저장 방식 |
|
| Canonical | Ubuntu release cycle | Ubuntu 22.04 LTS 표준 보안 유지보수 기간 확인 |
자주 묻는 질문
journal 파일을 직접 삭제해도 되나요?
가능하면 직접 삭제하지 말고 journalctl --rotate와 --vacuum-time 또는 --vacuum-size를 사용하십시오. journal 파일의 상태를 고려해 정리할 수 있기 때문에 관리가 더 안전합니다.
vacuum을 실행했는데 왜 설정한 용량보다 크게 표시되나요?
journalctl --disk-usage에는 활성 파일도 포함되지만 vacuum은 archived 파일을 중심으로 제거합니다. 먼저 journalctl --rotate를 실행한 후 vacuum하면 더 많은 로그가 정리 대상에 포함될 수 있습니다.
SystemMaxUse 값을 얼마나 크게 설정해야 하나요?
정해진 단일 권장값은 없습니다. 서버 디스크 크기, 장애 분석에 필요한 보존 기간, 하루 로그 발생량을 기준으로 결정해야 합니다. 작은 VPS에서는 과도하게 큰 값을 지정하지 않는 것이 좋습니다.
로그를 지우면 현재 서비스 실행에 영향이 있나요?
정상적인 journalctl vacuum 기능은 오래된 archived journal을 정리하는 용도이며 실행 중인 애플리케이션의 데이터 자체를 삭제하지 않습니다. 다만 과거 로그가 사라지므로 장애 분석과 감사 기록에는 영향을 줄 수 있습니다.
마무리
오늘은 Ubuntu 22.04에서 journalctl 로그가 디스크 용량을 많이 사용할 때 현재 사용량을 확인하고, 오래된 로그를 기간 또는 용량 기준으로 정리하며, journald의 최대 저장 용량을 제한하는 방법을 살펴봤습니다.
journal 용량이 짧은 시간 안에 다시 증가한다면 정리 작업만 반복하지 말고 특정 서비스가 오류를 지속적으로 기록하고 있는지 함께 확인하시기 바랍니다. 서버 운영에 필요한 로그 보존 기간을 유지하면서 디스크 사용량을 관리하는 것이 중요합니다.
