[Linux] journalctl로 저널 데이터베이스를 조회하기
journalctl는 systemd journal database(저널 데이터베이스)에 질의를 하는 명령어입니다.
먼저 저널 데이터베이스가 무엇인지 알아보겠습니다.
- 목적:
– systemd의 일환으로 동작하는 로깅 시스템의 일부로서, 로그 데이터를 구조화하고 저장하는 데이터베이스입니다. - 특징:
– 로그 메시지를 스키마에 따라 구조화하여 저장합니다.
– 각 로그 메시지에는 타임스탬프, 로그 레벨, 프로세스 정보 등의 메타데이터가 포함됩니다.
– 이벤트에 대한 추가 정보 및 메타데이터가 저장되기 때문에 로깅 및 검색이 효율적으로 이루어집니다.
– 휘발성 데이터는 메모리에만 저장되며, /run/log/journal/ 디렉터리로 참조합니다.(journald.conf의 Storage=volatile)
– 영구 데이터는 /var/log/journal/ 디렉터리에 위치하며, 각 로그는 파일로 저장됩니다.(journald.conf의 Storage=persistent)
– 특정 시간 범위, 부팅 세션, 서비스 등 다양한 옵션을 통해 로그를 필터링할 수 있습니다.
journalctl 명령어의 사용법에 대해 알아보겠습니다.
journalctl [OPTIONS…] [MATCHES…] 형식으로 사용하며, 주요 옵션으로는
-a, --all : 모든 필드를 출력
-b [boot_id] : 지정한 boot ID의 저널 메세지 출력, 지정하지 않거나 "0"이면 현재 boot의 저널 메시지 출력
--list-boots : boot ID 출력
-k, --dmesg : 커널 메세지를 출력(dmesg 명령어 사용법 참고)
--system : 시스템 저널 출력
--user : 현재 사용자의 사용자 저널 메시지 출력
-n [숫자] : 가장 최근의 저널 메시지를 지정된 숫자만큼 출력(defaul 10)
-u, --unit=UNIT|PATTERN : 지정한 service unit의 저널 메시지 출력
-g, --grep=PATTERN : 매칭되는 패턴을 가진 저널 메시지 출력
-f, --follow : 새로운 저널을 계속 출력(tail -f
와 유사한 기능)
-p, --priority= : 지정된 우선순위보다 높거나 우선순위 범위의 커널 메시지 출력(0:emergy ~ 7:debug)
-r, --reverse : 가장 최근에 발생한 저널 메시지를 첫 줄부터 출력
-S, --since=DATE : 지정된 날짜 이후의 저널 메시지 출력(YYYY-MM-DD HH:MM:SS)
-U, --until=DATE : 지정된 날짜 이전의 저널 메시지 출력(YYYY-MM-DD HH:MM:SS)
주로 사용하는 방법은,
- 특정 서비스 unit의 저널 메시지를 계속 모니터링 할 경우,
[root@centos8 ~]# journalctl -f -u chronyd -- Logs begin at Wed 2023-11-22 00:29:48 KST. -- Nov 25 01:55:56 centos8 chronyd[98739]: Using right/UTC timezone to obtain leap second data Nov 25 01:55:56 centos8 systemd[1]: Started NTP client/server. Nov 25 01:56:01 centos8 chronyd[98739]: Selected source 106.247.248.106 (2.centos.pool.ntp.org) Nov 25 01:56:01 centos8 chronyd[98739]: System clock wrong by 6354004.032021 seconds Feb 06 14:56:05 centos8 chronyd[98739]: System clock was stepped by 6354004.032021 seconds Feb 06 14:56:05 centos8 chronyd[98739]: System clock TAI offset set to 37 seconds
- 어제와 오늘 발생한 저널 메시지 중 warning 레벨 이상만 출력할 경우,
(systemd.time 메뉴얼 페이지를 보면 다양하게 시간 및 날짜를 지정하는 방법을 확인할 수 있습니다.)[root@centos8 ~]# journalctl -p warning --since yesterday --until today
- 2시간 전부터 발생한 저널 메시지를 출력할 경우,
[root@centos8 ~]# journalctl --since "2 hours ago"