Profile picture

[Linux] journalctl 사용법 익히기

JaehyoJJAng2023년 07월 03일

머리말

  • systemd의 서비스 로그를 확인할 수 있다.
  • systemd-journald.service에 의해서 systemd의 정보들을 분석한다.

저널 보기

옵션

옵션 설명
-a 표시할 수 없는 문자가 있거나 매우 긴 경우에도 모든 Log 내용을 출력
-b 마지막 부팅 후의 Log만 출력
-r 최신항목이 먼저 표시되도록 역순으로 출력
-c 커서가 지정한 저널의 위치부터 Log 표시를 시작
-f 가장 최근 Log만 표시하고 새롭게 추가되는 Log는 계속 출력
-k 커널 메시지만 출력 (dmesg랑 같음)
-q 일반 사용자로 실행될 때 접근할 수 없는 시스템 저널에 관한 경고메시지를 표시하지 않음
-u unit으로 systemctl list-units에서 출력되는 첫번째 항목
-p 메시지의 우선순위로 log level을 의미
emerg=0, alert=1, crit=2, err=3, warning=4, notice=5, info=6, debug=7
-o Log 출력 형식을 설정
short : 기본값으로 syslog파일의 형식과 동일하다. 한 행에 하나의 Log만 출력
short-iso : short와 비슷하지만 ISO 8601의 시간 형식으로 출력
short-precise : short와 비슷하지만 마이크로 초 단위로 시간 출력
short-monotonic : short와 비슷하지만 단조로운 시간 형식으로 출력
verbose : 전체 Log를 모두 자세하게 출력
export : Log내용을 내보낸다. (백업 및 전송에 적합한 바이너리 스트림으로 직렬화)
json : 한줄에 하나씩 JSON 데이터 구조로 형식화
json-pretty : JSON 데이터 구조로 형식화 하지만 여러줄로 형식을 지정하여 사람이 읽을 수 있게 한다.
json-see : JSON 데이터 구조로 형식화 하지만 Server-Sent Events에 적합한 형식으로 한다.
cat : 매우 간결한 출력을 생성하며 메타 데이터가 없고 Log만 표시하며 시간은 표시하지 않음
-l 출력되는 Log의 필드를 줄일때 사용, 기본값은 전체 필드를 표시하여 사용자가 해당 필드를 붙이거나 자를 수 있도록 한다.
_UID= 33 33번 UID를 가진 프로세스에 대한 Log를 출력
--disk-usage 저널 파일의 디스크 사용량을 표시 (압춘된 모든 더널 파일과 사용중인 저널 파일의 합계를 표시)

설정파일

$ cat /etc/systemd/journald.conf
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=    -> journal log 파일의 최대 Size를 지정
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1month  -> journal log 파일의 최대보관일수를 지정
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

기본 보기

옵션 없이 journalctl 을 실행하면 systemd의 로그를 확인할 수 있음

$ journalctl

image


최근 메시지만 보기

-n 옵션을 사용하면 최근 10개 메시지만 표시할 수 있음

$ journalctl -n

-n 뒤에 숫자를 명시하면 해당 숫자만큼의 최근 로그 메시지를 표시함.

$ journalctl -n 7

message catalog

-x 옵션을 추가하면 message catalog 에서 해당 저널에 대한 상세 설명을 추가해서 보여줌

$ journalctl -xn

image


마지막 라인 표시

-n 옵션을 사용하지 않을 경우 처음 저널부터 표시함. -e(pager end) 옵션을 주면 pager를 사용해 마지막 에러 메시지 라인부터 볼 수 있음

$ journalctl -x -e

그 반대로 밑에서부터 위로 로그를 확인하는 방법도 있다.

$ journalctl -r -b

짤린 페이지 개행

가끔 터미널의 컬럼 길이가 작을 경우 pager가 개행을 하지 않아 메시지가 잘려서 표시될 수 있다. 이런 경우 --no-pager 옵션을 사용하면 pager를 사용하지 않으므로 짤리는 페이지 없이 저널을 볼 수 있다.

$ journalctl -xn --no-pager | less

변경사항 계속 보기

tail -f 옵션처럼 -f를 사용하면 마지막 로그 내용을 출력한 후 이후에 변경되는 로그 파일의 내용을 실시간으로 출력해줌

$ journalctl -f

마지막 부팅 후 로그보기

$ journalctl -b

특정 서비스 데몬 로그보기

$ journalctl -u sshd 

필터링

특정 PID 저널보기

_PID={PID} 옵션을 사용하면 특정 PID 관련한 저널만 볼 수 있다. 아래는 pid가 1000인 프로세스가 생성한 최근 10개의 저널을 보여 준다.

$ journalctl -n _PID=1000

우선 순위로 필터링

-p 옵션을 사용하면 저널의 우선 순위 (emerg, alert, crit, err, warning, notice, info, debug)에 따라 저널을 필터링해서 볼 수 있다.


우선 순위가 높을수록 숫자가 낮으므로 (emerg=0, debug=7) 지정한 레벨 이상의 로그만 출력하며 다음 예제는 crit 이상인 레벨을 표시하므로 emerg, alert 저널도 같이 표시된다.

$ journalctl -p crit

Error 로그 자세히

$ journalctl -p err -o verbose

Error 로그 부팅 시간순으로

$ journalctl -p err -b

이 옵션은 로그를 현재 부팅 중 또는 가장 최근에 완료된 부팅에 해당하는 로그 엔트리만 표시합니다. 이를 통해 특정 부팅에서 발생한 로그만 볼 수 있습니다. 예를 들어, -b -1 옵션은 가장 최근에 완료된 부팅의 로그를 표시합니다. -b -2는 그 이전에 완료된 부팅의 로그를 표시하며, 이와 같은 방식으로 특정 부팅에 대한 로그를 확인할 수 있습니다.


날짜/시간으로 필터링

--since--until 옵션을 사용하면 특정 기간내의 저널만 뽑아서 볼 수 있다.


아래 예제는 23년 10월 9일 이후에 생성된 저널만 표시한다.

$ journalctl --since 2023-10-9

10월 9일 ~ 10월 10일에 생성된 저널만 보고 싶을 경우 --until 옵션을 추가하면 되는데 주의할 점은 until은 ~ 전까지 이므로 09-11로 지정해야 10일까지의 저널 로그가 보이게 된다.

$ journalctl --since 2023-10-9 --until 2023-10-11

날짜는 yesterday, today, tomorrow 같은 단어를 주어도 되며 아래 예제는 어제와 오늘 생성된 저널을 표시하는 예제이다.

$ journalctl --since yesterday --until tomorrow

저널이 많을 경우 시간이나 분으로 필터링도 가능하다. 아래 예제는 최근 2시간 전에 생성된 저널중 10분이전까지의 저널만 표시한다.

$ journalctl --since "-2hour" --until "10min"

Loading script...