저널로그에서 Data hash table of /run/log/journal/... 의 반복적인 출력 이슈
이 글을 쓴이유
서버 점검중에 로그데이터중 반복적으로 출력시키는 것을 확인했죠
$> dmesg -T
[일 12월 10 18:20:06 2024] systemd-journald[655]: Data hash table of /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal has a fill level at 75.0 (19207 of 25607 items, 8388608 file size, 436 bytes per hash table item), suggesting rotation.
[일 12월 10 18:20:06 2024] systemd-journald[655]: /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal: Journal header limits reached or header out-of-date, rotating.
[일 12월 10 19:30:37 2024] systemd-journald[655]: Data hash table of /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal has a fill level at 75.0 (19206 of 25607 items, 14749696 file size, 767 bytes per hash table item), suggesting rotation.
[일 12월 10 19:30:37 2024] systemd-journald[655]: /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal: Journal header limits reached or header out-of-date, rotating.
[일 12월 11 19:40:48 2024] systemd-journald[655]: Data hash table of /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal has a fill level at 75.0 (19206 of 25607 items, 8388608 file size, 436 bytes per hash table item), suggesting rotation.
처음에 화들짝. 😳 (디스크 깨졌나...)
자세히 보니 info레벨의 로그였고 저널(journald)데몬에 의해 기록된 내용이였어요.
내용자체는 로테이트 했다는 info성 메시지였죠
Journald?
- systemd서비스의 로그데이터를 저널(Journal)이라는 형태로 저장을 하게 되는데, OS 부팅이후 발생하는 서비스 및 OS로그들을 확인할 수 있는 기능입니다. (약간... rsyslog와 좀 비슷한 역활을 하고 있는녀석이겠네요)
- 바이너리 형태로 저장되다 보니 vi로는 확인이 안되고 journalctl 이라는 별도의 바이너리를 통해 데이터 확인을 할 수 있어요
- dmesg에 나왔던 이유는 journald.conf 파일에 ForwardToWall값이 yes(디폴트)로 되어 있어서 출력된 이벤트예요.
해결방법
- journald.conf 파일에서 ForwardToWall값을 no로 바꾼 후 데몬 재기동 해주면 됩니다.
$>vi /etc/systemd/journald.conf ... ForwardToWall=no ...
- 하나만 더 찾아봤어요. 왜냐하면 관리하고 있는서버가 상당히 많은데 일부 서버에서만 저런 유사한 로그데이터를 출력하고 있었거든요.(로그 용량이 차서 로테이트 돌은건 OK, 그래도 너무 빈번한게 왜 그럴까..였죠)
- 서버 상태 점검 : 이상무
- 하드웨어 상태 점검 : 이상무
- 디스크 사용량(+inode값 포함) : 어? 저널로그경로의 데이터가 너무 크네요.
$> du -hs /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4 50G .
시스템 로그를 50G나 먹고 있었다니.. (배부르냐?!)
- uptime을 확인해보니 이제 겨우 40일 지났습니다...
- journald는 시스템 로그를 기록하는 데몬이라고 했죠.? 관련된 시스템 로그를 보다 보니.... 아니나 다를까.
cron에 관련된 용량이 엄청 났던거죠.
$>journalctl --file=xxxxxx ... crond crond crond crond crond ...
- 네.. 그렇습니다. Crontab에 시간단위로 실행하는 스크립트가 있는데 표준 출력+에러 까지 모두 기록하다보니 저렇게 어마어마한 용량을 자랑하고 있었네요.
- 해당 스크립트의 표준출력은 뺐습니다. (어짜피 들여다보고 분석할 필요가 없었거든요)
반영하기
- systemd-journald 데몬을 재실행해주면 됩니다.
- 자.. 지금 구동상태를 한번 볼까요?
$> systemctl status systemd-journald ● systemd-journald.service - Journal Service Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static) Active: active (running) since Sat 2023-01-09 22:54:40 KST; 6 days ago TriggeredBy: ● systemd-journald.socket ● systemd-journald-dev-log.socket Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 655 (systemd-journal) Status: "Processing requests..." Tasks: 1 (limit: 35765) Memory: 91.2M CPU: 36.469s CGroup: /system.slice/systemd-journald.service └─655 /usr/lib/systemd/systemd-journald [일 12월 10 18:20:06 2024] systemd-journald[655]: Data hash table of /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal has a fill level at 75.0 (19207 of 25607 items, 8388608 file size, 436 bytes per hash table item), suggesting rotation. [일 12월 10 18:20:06 2024] systemd-journald[655]: /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal: Journal header limits reached or header out-of-date, rotating. [일 12월 10 19:30:37 2024] systemd-journald[655]: Data hash table of /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal has a fill level at 75.0 (19206 of 25607 items, 14749696 file size, 767 bytes per hash table item), suggesting rotation. [일 12월 10 19:30:37 2024] systemd-journald[655]: /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal: Journal header limits reached or header out-of-date, rotating. [일 12월 11 19:40:48 2024] systemd-journald[655]: Data hash table of /run/log/journal/8d8bce04dde6433198c5ff39a2265dd4/system.journal has a fill level at 75.0 (19206 of 25607 items, 8388608 file size, 436 bytes per hash table item), suggesting rotation.
* 아까 dmesg에서 봤던 로그데이터가 여기서 보이네요.
- 서비스 재기동 파파팟!
$> systemctl restart systemd-journald
- 재기동 후 잘 뜨고 있는지 확인
$> systemctl status systemd-journald ● systemd-journald.service - Journal Service Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static) Active: active (running) since Mon 2024-01-15 23:07:33 KST; 1s ago TriggeredBy: ● systemd-journald.socket ● systemd-journald-dev-log.socket Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 127119 (systemd-journal) Status: "Processing requests..." Tasks: 1 (limit: 35765) Memory: 1.4M CPU: 14ms CGroup: /system.slice/systemd-journald.service └─127119 /usr/lib/systemd/systemd-journald 1월 15 23:07:33 systemd-journald[127119]: Journal started 1월 15 23:07:33 systemd-journald[127119]: Runtime Journal (/run/log/journal/8d8bce04dde6433198c5ff39a2265dd4) is 108.9M, max 112.5M, 3.5M free.
- 자.. 지금 구동상태를 한번 볼까요?
결론
제 경우는 그랬습니다. 한시간 단위로 실행하는 스크립트 배포 후 cron에 관련된 시스템 로그용량 증가 -> 증가속도가 빈번하게 journald 에서 잦은 로그 순환 (결국 info성 로그.?? )
Reference
- https://sysops.tistory.com/115
- https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/automating_system_administration_by_using_rhel_system_roles/configuring-persistent-logging-by-using-the-journald-system-role_configuring-the-systemd-journal-by-using-the-journald-rhel-system-role
- https://access.redhat.com/documentation/ko-kr/openshift_container_platform/4.6/html/logging/cluster-logging-systemd
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nahejae533&logNo=221270596126
No Comments