본 글에서는 Linux Journal 보관 주기 및 용량 관리에 대해서 정리했습니다.
디스크 사용량을 효율적으로 관리하기 위해 보관 주기 및 용량 제한을 설정하고 Journal 로그 위치, Journal 명령어, Journal Config 설정 방법을 알아보겠습니다.
테스트 환경은 AWS EC2이고 Amazon Linux 2023 OS를 사용했습니다.
참고로 보통 Journal 로그는 재부팅 시 사라지는 것으로 알고 있는데 Amazon Linux 2023 EC2에서는 재부팅을해도 사라지지 않았습니다.
AMI을 떠서 재생성 시에도 그대로 남아있었습니다.
1. Journal 로그 위치
/run/log/journal/ 또는 /var/log/journal/
Amazon Linux 2023의 경우 /var/log/journal/에 있었습니다.
[root@ip-172-xx-xxx-xxx journal]# pwd
/var/log/journal
[root@ip-172-xx-xxx-xxx journal]# ls -al
total 32
drwxr-sr-x+ 3 root systemd-journal 46 Jul 15 01:59 .
drwxr-xr-x. 13 root root 16384 Jul 17 17:59 ..
drwxr-sr-x+ 2 root systemd-journal 16384 Jul 18 22:05 105xxxxxfbdd4e88a59aaac0b116e4ea
[root@ip-172-xx-xxx-xxx journal]# ls -al 105xxxxxfbdd4e88a59aaac0b116e4ea/
total 98656
drwxr-sr-x+ 2 root systemd-journal 16384 Jul 18 22:05 .
drwxr-sr-x+ 3 root systemd-journal 46 Jul 15 01:59 ..
-rw-r-----+ 1 root systemd-journal 41943040 Jul 21 12:33 system.journal
-rw-r-----+ 1 root systemd-journal 47503096 Jul 18 22:05 system@ab95e70a4e1fxxxxxyyyyyc7b5f80d06-0000000000000001-000600755f45fc06.journal
-rw-r-----+ 1 root systemd-journal 8388608 Jul 21 12:32 user-1000.journal
-rw-r-----+ 1 root systemd-journal 3158128 Jul 18 22:05 user-1000@252f9e06be3649xxxxxyyyyy4ffa200c-000000000000045d-0006007560d20bf6.journal
2. Journal 명령어
2.1 상태 확인
systemctl status systemd-journald
응답 예시
● systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
Active: active (running) since Tue 2023-07-18 00:18:23 KST; 3 days ago
TriggeredBy: ● systemd-journald-dev-log.socket
● systemd-journald-audit.socket
● systemd-journald.socket
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 1041 (systemd-journal)
Status: "Processing requests..."
Tasks: 1 (limit: 1114)
Memory: 31.9M
CPU: 25.441s
CGroup: /system.slice/systemd-journald.service
└─1041 /usr/lib/systemd/systemd-journald
Jul 18 00:18:23 ip-172-xx-xxx-xxx.ap-northeast-2.compute.internal systemd-journald[1041]: Journal started
Jul 18 00:18:23 ip-172-xx-xxx-xxx.ap-northeast-2.compute.internal systemd-journald[1041]: Runtime Journal (/run/log/journal/105fba8afbdd4e88a59aaac0b116e4ea) is 2.3M, max 18.9M, 16.6M free.
Jul 18 00:18:23 ip-172-xx-xxx-xxx.ap-northeast-2.compute.internal systemd[1]: systemd-journald.service: Deactivated successfully.
Jul 18 00:18:23 ip-172-xx-xxx-xxx.ap-northeast-2.compute.internal systemd-journald[1041]: Time spent on flushing to /var/log/journal/105fba8afbdd4e88a59aaac0b116e4ea is 378.474ms for 674 entries.
Jul 18 00:18:23 ip-172-xx-xxx-xxx.ap-northeast-2.compute.internal systemd-journald[1041]: System Journal (/var/log/journal/105fba8afbdd4e88a59aaac0b116e4ea) is 48.0M, max 811.6M, 763.5M free.
Jul 18 00:18:24 ip-172-xx-xxx-xxx.ap-northeast-2.compute.internal systemd-journald[1041]: Received client request to flush runtime journal.
Jul 18 22:05:25 ip-172-xx-xxx-xxx.ap-northeast-2.compute.internal systemd-journald[1041]: Data hash table of /var/log/journal/105fba8afbdd4e88a59aaac0b116e4ea/system.journal has a fill level at 75.0 (138517 of 184689 items, 50331648 fil>
Jul 18 22:05:25 ip-172-xx-xxx-xxx.ap-northeast-2.compute.internal systemd-journald[1041]: /var/log/journal/105fba8afbdd4e88a59aaac0b116e4ea/system.journal: Journal header limits reached or header out-of-date, rotating.
AWS EC2 Amazon Linux 2023은 디폴트로 Runtime Journal과 System Journal의 Max 값이 설정되어 있었어요.
공식 문서에 나온 것처럼 Default로 로그를 쌓는 곳의 파일 시스템의 10%로 잡힌 것으로 보입니다.
저는 /run에 190M /에 8G 정도 할당되어 있었거든요.
이건 추측.. Time spent on flushing to /var/log/journal/부분이나 Received client request to flush runtime journal.을 보면 flush 설정이 되어있어서 /run/log/journal 말고 /var/log/journal에서 보관하나 봐요.
2.2 현재 사용 용량 확인
journalctl --disk-usage
2.3 로그 일괄 삭제
journal 로그는 journalctl을 사용하여 일괄 삭제.
2.3.1 용량 기준 일괄 삭제
journalctl --vacuum-size=BYTES
2.3.2 시간 기준 일괄 삭제
journalctl --vacuum-time=TIME
2.4 Help
journalctl --help
3. 저널 구성
Journal Config를 수정하여 보관주기와 최대 사용 용량을 제한.
3.1 자동 삭제 (보관 주기)
MaxRetentionSec
보관 주기를 설정할 수 있다.
기본 단위는 초이며 year, month, week, day, h, m를 숫자 뒤에 붙여주면 단위를 바꿀 수 있다.
vi /etc/systemd/journald.conf
MaxRetentionSec=3month로 수정
systemctl restart systemd-journald
예시가 1month뿐이라 그 이상일 때는 3months로 해야 하는지 고민했는데 경험상 3month로 설정했을 때 정상적으로 작동했다.
그리고 다른 포스팅에서 MaxFileSec을 수정해야 한다고 설명하는 사람들이 있는데 MaxFileSec를 수정했을 때 기간별로 자동 삭제는 되지 않았고 MaxRetentionSec를 수정한 후에야 제대로 작동했다.
3.2 자동 삭제 (용량)
SystemMaxUse
로그 최대 보관 용량를 설정할 수 있다.
기본 단위는 Byte이며 K, M, G, T, P, E를 숫자 뒤에 붙여주면 단위를 바꿀 수 있다.
vi /etc/systemd/journald.conf
SystemMaxUse=500M로 수정
systemctl restart systemd-journald
SystemMaxUse를 별도로 설정하지 않을 경우 /var/log/journal/이 위치한 파일 시스템 크기의 10% 정도 자동 설정되고, 최대 4GB를 넘을 수 없다.
예를 들어 50GB라면 5GB가 아니라 최대 4GB인 것이다.
runtime 로그 같은 경우에는 /run/log/journal이 위치한 파일 시스템 크기의 10% 정도로 자동 설정되는 것 같다.
4. 참고
Config 값에 대한 설명을 찾아보고 싶으시면 아래 링크에서 확인할 수 있다.
https://man7.org/linux/man-pages/man5/journald.conf.5.html
MaxRetentionSec, SystemMaxUse 둘 다 사용할 경우 둘 다 적용되는 것 같다.
만약 일주일 만에 로그가 1GB 정도 생성되었다고 하면 500M는 MaxRetentionSec 설정 기간인 3개월 전에 삭제되고, 3달 동안 로그가 100M밖에 안 생겼다고 하면 주기적으로 3개월이 지나면 삭제되도록 돌아가는 것 같다.
Journal 자동 삭제 보관주기 및 용량 관리에 대해서 정리했습니다.