Linux Journal 보관 주기 및 용량 관리

linux journal

본 글에서는 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 자동 삭제 보관주기 및 용량 관리에 대해서 정리했습니다.

Leave a Comment