시스템 프로그래밍

dmesg vs journalctl

_어니언_ 2024. 11. 23. 23:13

시스템을 디버깅 하다보면 로그를 봐야할 일이 많이 있다. 파이썬이나 C 에서 띄워주는 컴파일/런타임 에러 말고.. 시스템에서 부팅 또는 커널레벨에서의 로그를 봐야 하는 경우가 왕왕 있다. 이 경우 많이 쓰는 두 명령어가 바로 'dmesg' 와 'journalctl' 이다. 

 

그런데 궁금한 점은 이 두 로그를 보는 명령어는 어떤 차이일까? 그리고 어떤 경우에 어떤걸 사용해야 할까? 이번 기회에 한번 정리해보았다.

 


dmesg란?

dmesg는 "diagnostic message"의 약자로, 리눅스 커널에서 발생하는 진단 메시지를 확인할 수 있는 명령어다. 주로 커널에서 하드웨어, 장치 드라이버, 그리고 시스템 부팅 과정에서 발생한 이벤트를 확인하는 데 사용된다.

 

- 로그의 위치: /var/log/dmesg

  • 해당 파일은 부팅 시점의 로그를 저장하며, 실시간 로그는 아님에 유의해야 한다.

- 커널 링 버퍼(Kernel Ring Buffer):

  • dmesg 명령은 커널 링 버퍼의 내용을 출력한다. 커널 링 버퍼는 순환 버퍼(circular buffer) 방식으로 동작하며, 일정 용량을 초과하면 가장 오래된 로그가 새 로그로 덮어쓰여진다.

 

 

dmesg를 sudo 없이 실행하기

dmesg는 기본적으로 root 권한이 필요하다. 일반 사용자가 실행하려면 sticky bit를 추가해야 한다.

sudo chmod u+s /bin/dmesg
 

 


journal이란?

journal은 리눅스의 로그 관리 시스템으로, systemd의  systemd-journald가 모든 로그를 수집 및 저장한다. 단순한 커널 로그만 제공하는 dmesg와는 달리, 시스템 서비스와 사용자 애플리케이션 로그까지 포함하여  로그를 제공한다.

 

journal의 로그 종류

  1. 커널 로그: dmesg의 내용을 포함한다.
  2. 시스템 서비스 로그: systemd가 관리하는 각종 서비스의 실행 상태 및 오류 메시지.
  3. 애플리케이션 로그: 사용자 애플리케이션에서 생성한 로그.

 

로그 저장 위치

  • /var/log/journal 디렉터리에 로그 파일이 저장된다.
    (저널 기능이 활성화되지 않은 경우, 기본적으로 /run/log/journal 디렉터리에 저장되며 재부팅 시 삭제된다.)

 

journalctl 명령어로 로그 확인하기

journal은 journalctl 명령어를 통해 다양한 방식으로 필터링 및 확인할 수 있다.

 

journalctl -f # 실시간 로그
journalctl -u sshd # 특정 service 로그 필터
journalctl --since "1 hour ago" # 시간 기준 필터
journalctl --since "2024-11-20 10:00:00" --until "2024-11-20 12:00:00"
journalctl -p err  # 심각성으로 필터

 

dmesg와 journal의 비교

로그 범위 커널 레벨 (하드웨어, 장치 드라이버, 커널 경고 등) 커널, 시스템 서비스, 사용자 애플리케이션까지 포함
지속성 메모리(RAM)에 저장되며, 재부팅 시 로그가 사라짐 /var/log/journal에 저장되어 재부팅 후에도 유지
기타 간단하고 빠르게 커널 로그를 확인할 수 있음 강력한 필터링 기능과 검색 옵션을 제공

 

 


 

결론

dmesg는 간단한 커널 로그 확인에 적합하고, journal은 좀 더 폭넓은 로그 관리를 위한 도구다. 좀 더 쉽게 정리하면 커널이나 device driver 레벨에서는 dmesg 로 확인하고 systemctl 등의 서비스 로그는 journalctl 로 확인하면 된다 (일반적으로는).

 
 

'시스템 프로그래밍' 카테고리의 다른 글

커널 모듈(Kernel Module)  (1) 2024.11.27
SELinux: 리눅스 보안 툴 2  (0) 2024.11.22
AppArmor, 리눅스 보안 툴  (0) 2024.11.20
GStreamer 란?  (1) 2024.11.19
왜 자꾸 sudo apt update 를 쳐줘야 할까?  (0) 2024.11.16