안녕하세요. 지구 IDC 기술팀입니다.
Ubuntu 24.04 서버를 장기간 운영하면 systemd-journald가 수집한 시스템 로그가 누적되어 /var/log/journal 또는 /run/log/journal의 사용량이 커질 수 있습니다. 로그를 무조건 삭제하기보다 SystemMaxUse와 RuntimeMaxUse를 설정하면 journal 로그가 사용할 수 있는 최대 공간을 지속적으로 제한할 수 있습니다.
이번 문서에서는 현재 journal 사용량과 저장 위치를 확인하고, Ubuntu 24.04에서 drop-in 설정 파일로 로그 용량을 제한한 뒤 기존 로그를 안전하게 정리하고 적용 여부를 검증하는 방법을 설명합니다.
적용 환경
| 운영체제 | Ubuntu 24.04 LTS |
|---|---|
| 로그 서비스 | systemd-journald.service |
| 영구 로그 경로 | /var/log/journal |
| 휘발성 로그 경로 | /run/log/journal |
| 필요 권한 | sudo 권한이 있는 관리자 계정 |
이 문서에서 알아볼 내용
- 현재 systemd journal 로그 사용량과 저장 위치 확인
- 영구 저장 로그와 휘발성 로그의 차이
SystemMaxUse,SystemKeepFree,RuntimeMaxUse설정- 기존 journal 로그를 즉시 줄이는 방법
- 설정 적용 확인, 오류 해결 및 원상복구
현재 journal 로그 사용량 확인
설정을 변경하기 전에 journal 파일이 실제로 차지하는 전체 디스크 사용량을 확인합니다. 다음 명령은 활성 journal 파일과 보관된 journal 파일의 사용량 합계를 표시합니다.
sudo journalctl --disk-usage
출력에서 Archived and active journals take up 뒤에 표시되는 값이 현재 journal 로그의 전체 사용량입니다. 파일시스템 전체 사용량도 함께 확인합니다.
df -h /var /run
journal 디렉터리별 사용량을 확인하려면 다음 명령을 실행합니다. 존재하지 않는 경로에서 발생하는 오류 메시지는 숨기도록 구성한 명령입니다.
sudo du -sh /var/log/journal /run/log/journal 2>/dev/null
영구 로그와 휘발성 로그 구분
systemd-journald의 용량 제한 항목은 로그가 저장되는 위치에 따라 다르게 적용됩니다.
| 저장 방식 | 저장 경로 | 주요 제한 항목 | 특징 |
|---|---|---|---|
| 영구 저장 | /var/log/journal |
SystemMaxUseSystemKeepFree |
재부팅 후에도 이전 로그 유지 |
| 휘발성 저장 | /run/log/journal |
RuntimeMaxUseRuntimeKeepFree |
메모리 기반 파일시스템에 저장되며 재부팅 시 사라짐 |
기본 Storage=auto 설정에서는 /var/log/journal 디렉터리가 존재하면 영구 저장을 사용하고, 존재하지 않으면 휘발성 저장을 사용합니다. 다음 명령으로 두 경로의 존재 여부를 확인할 수 있습니다.
sudo ls -ld /var/log/journal /run/log/journal 2>/dev/null
systemd-journald 로그 용량 제한 설정
공급자가 제공한 기본 설정 파일을 직접 수정하지 않고, 로컬 관리자용 drop-in 파일을 생성하는 방법을 사용합니다. 이 방식은 패키지 업데이트 후에도 설정을 관리하기 쉽고 우선순위도 명확합니다.
1. 설정 디렉터리 생성
다음 명령으로 systemd-journald의 로컬 drop-in 설정 디렉터리를 생성합니다.
sudo mkdir -p /etc/systemd/journald.conf.d
2. 용량 제한 drop-in 파일 생성
아래 예시는 영구 journal 로그를 최대 500MB로 제한하고, 파일시스템에 최소 1GB의 여유 공간을 남기도록 설정합니다. 휘발성 journal 로그는 최대 100MB로 제한하고 최소 200MB의 여유 공간을 남깁니다.
sudo tee /etc/systemd/journald.conf.d/60-size-limit.conf > /dev/null <<'EOF'
[Journal]
SystemMaxUse=500M
SystemKeepFree=1G
SystemMaxFileSize=50M
RuntimeMaxUse=100M
RuntimeKeepFree=200M
EOF
| 설정 항목 | 설명 |
|---|---|
SystemMaxUse=500M |
/var/log/journal의 목표 최대 사용량을 500MB로 제한합니다. |
SystemKeepFree=1G |
journal이 저장된 파일시스템에 다른 용도로 사용할 1GB의 여유 공간을 남깁니다. |
SystemMaxFileSize=50M |
개별 영구 journal 파일의 최대 크기를 조절하여 로그 회전과 오래된 파일 삭제 단위를 작게 만듭니다. |
RuntimeMaxUse=100M |
/run/log/journal의 목표 최대 사용량을 100MB로 제한합니다. |
RuntimeKeepFree=200M |
/run 파일시스템에 최소 200MB의 여유 공간을 남깁니다. |
MaxUse와 KeepFree를 함께 설정하면 systemd-journald는 두 조건 중 더 엄격한 제한을 따릅니다. 예를 들어 500MB 한도에 도달하지 않았더라도 남은 공간이 1GB 아래로 내려가면 journal의 추가 증가가 제한될 수 있습니다.
3. 읽히는 설정 파일 확인
Ubuntu 24.04의 systemd-analyze cat-config 명령으로 기본 설정과 drop-in 파일이 어떤 순서로 읽히는지 확인합니다.
systemd-analyze cat-config systemd/journald.conf
출력 하단에 /etc/systemd/journald.conf.d/60-size-limit.conf와 지정한 값이 표시되는지 확인합니다. 같은 항목을 설정한 다른 drop-in 파일이 뒤에서 다시 덮어쓰고 있지 않은지도 확인해야 합니다.
4. systemd-journald 재시작
설정 변경 사항을 적용하기 위해 journal 서비스를 재시작합니다.
sudo systemctl restart systemd-journald
서비스가 정상적으로 실행 중인지 확인합니다.
systemctl is-active systemd-journald
정상 상태라면 active가 표시됩니다.
기존 journal 로그 즉시 정리
용량 제한 설정은 앞으로 journal 파일이 증가할 때 적용됩니다. 이미 많은 로그가 쌓여 있다면 현재 활성 파일을 먼저 회전한 뒤 오래된 보관 파일을 정리해야 디스크 공간을 즉시 확보할 수 있습니다.
현재 활성 journal 파일을 회전하고 보관 로그의 합계를 500MB 아래로 줄이려면 다음 명령을 실행합니다.
sudo journalctl --rotate --vacuum-size=500M
용량 대신 보존 기간을 기준으로 정리하려면 다음과 같이 실행할 수 있습니다. 아래 예시는 14일보다 오래된 보관 journal 파일을 삭제합니다.
sudo journalctl --rotate --vacuum-time=14days
두 명령을 모두 실행할 필요는 없습니다. 서버의 운영 정책이 용량 기준인지 보존 기간 기준인지에 따라 하나를 선택합니다. 크기와 기간 조건을 동시에 적용하면 어느 한 조건에 해당하는 오래된 보관 파일이 삭제될 수 있으므로 보존 정책을 먼저 확인하십시오.
설정 적용 확인
서비스 상태 확인
systemd-journald의 상세 상태를 확인합니다.
sudo systemctl status systemd-journald --no-pager
Active: active (running) 상태인지 확인합니다. 설정 항목이나 파일 문법에 문제가 의심되면 최근 서비스 로그를 확인합니다.
sudo journalctl -u systemd-journald --since "10 minutes ago" --no-pager
로그 기록 기능 확인
테스트 메시지를 journal에 기록한 뒤 정상적으로 조회되는지 확인합니다.
logger "JIGU-IDC journald limit test"
journalctl -n 20 --no-pager | grep "JIGU-IDC journald limit test"
테스트 문장이 출력되면 재시작 후에도 로그 수집이 정상적으로 작동하는 것입니다.
정리 후 사용량 재확인
sudo journalctl --disk-usage
이후 로그가 다시 증가하더라도 systemd-journald는 새 journal 파일을 확장하는 시점에 설정된 크기와 여유 공간 조건을 적용하고 오래된 보관 파일을 정리합니다.
운영 시 권장사항
- 소형 VPS: 디스크가 작다면 100MB~500MB 범위에서 시작하되 실제 로그 발생량을 며칠간 확인합니다.
- 일반 웹 서버: 장애 분석 기간을 확보할 수 있도록 500MB~2GB 수준과 별도의 애플리케이션 로그 정책을 함께 검토합니다.
- 보안 감사 서버: 로컬 보존량만 줄이지 말고 원격 syslog, SIEM 또는 중앙 로그 서버로 로그를 전송합니다.
- 반복적인 로그 폭증: 저장 한도만 낮추지 말고
journalctl -p warning, 서비스별journalctl -u 서비스명명령으로 과도한 로그를 발생시키는 원인을 확인합니다. - 별도 로그 파일 확인: journald 제한은 journal 파일에만 적용됩니다. rsyslog나 애플리케이션이 별도 파일에 기록하는 로그는
logrotate정책을 따로 점검해야 합니다.
보존 기간을 설정 파일에서 지속적으로 강제해야 한다면 drop-in 파일의 [Journal] 섹션에 다음 항목을 추가할 수 있습니다.
MaxRetentionSec=14day
크기 제한만으로 충분한 환경에서는 이 항목을 추가하지 않아도 됩니다. 기간 제한을 추가한 후에는 systemd-journald를 다시 시작해야 합니다.
자주 발생하는 오류와 해결 방법
| 증상 | 가능한 원인 | 확인 방법 | 해결 방법 |
|---|---|---|---|
SystemMaxUse를 설정했지만 용량이 줄지 않음 |
현재 로그가 휘발성 경로에 저장되거나 기존 활성 파일이 남아 있음 | ls -ld /var/log/journal /run/log/journal 및 journalctl --disk-usage 확인 |
RuntimeMaxUse도 설정하고 --rotate --vacuum-size를 실행 |
| 설정 파일이 적용되지 않음 | 파일 경로, 확장자, 섹션명이 잘못되었거나 뒤 순서의 drop-in이 값을 덮어씀 | systemd-analyze cat-config systemd/journald.conf 실행 |
/etc/systemd/journald.conf.d/*.conf, [Journal] 섹션 및 파일 정렬 순서 확인 |
| vacuum 후에도 설정값보다 사용량이 큼 | 현재 사용 중인 활성 journal 파일은 vacuum 대상이 아님 | journalctl --disk-usage로 전체 사용량 확인 |
--rotate를 함께 사용하고 개별 파일 크기가 크면 SystemMaxFileSize를 조정 |
systemd-journald 재시작 실패 |
설정값 오타, 잘못된 단위 또는 파일 권한 문제 | systemctl status systemd-journald와 최근 journal 로그 확인 |
문제가 된 drop-in 파일을 수정하거나 제거한 뒤 서비스를 다시 시작 |
/var/log 사용량이 계속 증가함 |
journal 외의 syslog 또는 애플리케이션 로그가 증가 중 | sudo du -xhd1 /var/log | sort -h 실행 |
해당 서비스의 로그 설정과 logrotate 정책을 별도로 점검 |
원상복구 방법
이 문서에서 생성한 용량 제한 설정을 제거하려면 drop-in 파일을 삭제합니다.
sudo rm /etc/systemd/journald.conf.d/60-size-limit.conf
systemd-journald를 재시작하여 기본값 또는 다른 설정 파일의 값으로 되돌립니다.
sudo systemctl restart systemd-journald
원상복구 여부는 다음 명령으로 확인합니다.
systemd-analyze cat-config systemd/journald.conf
공식 참고자료
- Ubuntu 24.04 Manpage - journald.conf: 저장 방식, drop-in 우선순위, SystemMaxUse 및 RuntimeMaxUse 설정 확인
- Ubuntu 24.04 Manpage - journalctl: 디스크 사용량, rotate 및 vacuum 명령 확인
- Ubuntu 24.04 Manpage - systemd-analyze: cat-config를 이용한 설정 파일 및 drop-in 확인 방법
- Ubuntu 24.04 Manpage - systemctl: 서비스 재시작과 상태 확인 방법
- Canonical - Ubuntu release cycle: Ubuntu 24.04 LTS 지원 상태 확인
공식 자료 조회일:
자주 묻는 질문
SystemMaxUse를 500M으로 설정하면 정확히 500MB를 넘지 않나요?
항상 정확히 500MB 이하로 표시되는 것은 아닙니다. systemd-journald는 오래된 보관 파일을 삭제하여 제한을 맞추지만 현재 쓰고 있는 활성 journal 파일은 유지합니다. 이 때문에 실제 사용량이 설정값을 일시적으로 초과할 수 있습니다.
설정만 적용하면 기존 로그도 바로 삭제되나요?
설정 변경만으로 기존 로그가 즉시 목표 용량까지 줄어들지 않을 수 있습니다. 디스크 공간을 바로 확보해야 한다면 journalctl --rotate --vacuum-size=500M을 별도로 실행하십시오.
SystemMaxUse와 RuntimeMaxUse 중 하나만 설정해도 되나요?
영구 저장만 확실히 사용하는 서버라면 주로 SystemMaxUse가 적용됩니다. 다만 부팅 초기나 영구 저장을 사용하지 않는 환경에서는 RuntimeMaxUse가 적용되므로 두 값을 함께 설정하면 저장 방식 변화에도 대응하기 쉽습니다.
journal 로그를 완전히 비활성화해도 되나요?
운영 서버에서는 권장하지 않습니다. systemd 서비스 오류, 부팅 문제, 커널 메시지와 보안 이벤트를 확인하기 어려워집니다. 로그를 끄기보다 적절한 용량과 보존 기간을 설정하거나 중앙 로그 서버로 전송하는 편이 안전합니다.
systemd-journald를 재시작하면 기존 로그가 삭제되나요?
서비스 재시작 자체는 기존 journal 파일을 삭제하지 않습니다. 과거 로그 삭제는 --vacuum-size, --vacuum-time 등의 vacuum 작업을 실행할 때 발생합니다.
마무리
Ubuntu 24.04에서 systemd-journald 로그 용량을 제한하려면 저장 위치에 맞춰 SystemMaxUse와 RuntimeMaxUse를 설정하고, SystemKeepFree와 RuntimeKeepFree로 파일시스템의 최소 여유 공간도 함께 확보하는 것이 좋습니다.
기존 로그가 이미 디스크를 많이 차지하고 있다면 설정 적용 후 rotate와 vacuum을 실행해야 즉시 공간을 확보할 수 있습니다. 다만 과거 로그는 장애 분석에 필요할 수 있으므로 삭제 전 보존 정책과 백업 여부를 반드시 확인하시기 바랍니다.
오늘 준비한 내용은 여기까지입니다. 다음에도 서버 운영에 도움이 되는 기술정보로 인사드리겠습니다.
中文
English
한국어