← 아티클 목록

journalctl 사용법 — systemd 로그 조회·필터링·관리

2027-08-30#linux#systemd#로그

systemd 환경에서 로그는 더 이상 /var/log/*.log 파일에만 있지 않습니다. journald가 모든 서비스 출력을 바이너리 저널에 모아두고, 그걸 읽는 도구가 journalctl입니다. 파일을 tail 하던 습관 대신, 서비스·우선순위·시간으로 좁혀 읽는 법을 익히면 장애 추적이 훨씬 빨라집니다.

1단계 — 어느 서비스 로그인가 (-u)

특정 서비스만 보려면 -u로 유닛을 지정합니다. 그냥 journalctl만 치면 전체 로그가 쏟아지니, 거의 항상 -u부터 시작합니다.

서버 터미널
journalctl -u nginx.service          # nginx 로그만
journalctl -u nginx -u php-fpm       # 여러 서비스 동시

방금 일어난 일을 보려면 최신부터 거꾸로 보거나 실시간으로 따라갑니다.

서버 터미널
journalctl -u nginx -e               # 맨 끝(최신)으로 이동
journalctl -u nginx -f               # tail -f 처럼 실시간 추적

2단계 — 심각도로 거르기 (-p)

에러만 빠르게 보고 싶을 때 -p로 우선순위를 거릅니다. 값은 emerg(0)부터 debug(7)까지이고, 지정한 레벨 이상(더 심각한 쪽)이 함께 나옵니다.

서버 터미널
journalctl -u myapp -p err           # err 이상(err·crit·alert·emerg)
journalctl -p warning..err           # 범위 지정도 가능

서비스가 죽었는데 원인이 안 보이면 -p err 로 좁힌 뒤, 그 시점 앞뒤를 다시 전체로 보는 식으로 접근합니다.

3단계 — 시간으로 좁히기 (--since / --until)

장애는 보통 "몇 시쯤"이 정해져 있습니다. 시간 범위로 자르면 노이즈가 사라집니다.

서버 터미널
journalctl -u myapp --since "10 min ago"
journalctl -u myapp --since "2027-08-30 09:00" --until "09:30"
journalctl -u myapp --since today

부팅 단위로도 끊을 수 있습니다. 재부팅 후 문제라면 이번 부팅만 봅니다.

서버 터미널
journalctl -b            # 이번 부팅
journalctl -b -1         # 직전 부팅

용량 관리 — 저널이 디스크를 먹을 때

저널은 무한히 쌓이지 않지만, 설정에 따라 /var/log/journal이 커질 수 있습니다. 현재 사용량을 보고 줄입니다.

서버 터미널
journalctl --disk-usage              # 현재 저널 크기
sudo journalctl --vacuum-size=200M   # 200M 넘는 과거분 삭제
sudo journalctl --vacuum-time=7d     # 7일 넘은 분 삭제

영구 보존이 필요하면 /etc/systemd/journald.confStorage=persistentSystemMaxUse=를 함께 조정합니다.

자주 쓰는 조합 체크리스트

서버 터미널
journalctl -u <서비스> -e            # 최신 로그부터
journalctl -u <서비스> -f            # 실시간 추적
journalctl -u <서비스> -p err        # 에러만
journalctl -u <서비스> --since "1 hour ago"   # 최근 1시간
journalctl --disk-usage              # 저널 용량 점검

journalctl로 서비스 로그를 좁혀 읽고 systemd 유닛을 직접 다뤄보는 실습은 리눅스 트랙에서 회원가입 없이 무료로 익힐 수 있습니다.