기본 문법
journalctl [옵션] [매칭조건...]
journalctl은 systemd의 로그 수집 데몬인 systemd-journald가 저장한 저널(journal)을 읽어 출력하는 명령어입니다. 커널 메시지, 부팅 과정 기록, 각 서비스 유닛의 표준 출력과 오류, syslog로 전달된 메시지가 하나의 저널에 구조화된 형태로 쌓이며, journalctl은 이를 유닛·시간·우선순위 등의 조건으로 걸러서 보여 줍니다.
서비스가 기동에 실패했을 때 원인을 확인하는 데 쓰입니다. systemctl status는 최근 로그 몇 줄만 보여 주므로, 기록 전체를 추적하려면 journalctl -u 유닛명으로 해당 유닛의 로그를 확인합니다. -b로 이번 부팅분만 보거나, -p err로 오류 이상만 추리거나, --since/--until로 장애 발생 시각 전후만 잘라 보는 식으로 범위를 좁힙니다.
리눅스마스터·RHCSA·LPIC 등 자격 시험에서도 로그 관리 영역에서 다뤄지며, rsyslog와의 차이, 영구 저장 설정, -u/-b/-p/-f 옵션의 의미가 출제 범위에 포함됩니다. 실습 #216은 systemctl --failed → systemctl status → journalctl -u 순서로 이어지는 장애 초동 대응 흐름을 다룹니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
-u 유닛명 | 지정한 systemd 유닛의 로그만 출력 | journalctl -u httpd.service |
-b | 현재 부팅 이후의 로그만 출력 (-b -1은 직전 부팅) | journalctl -b |
-f | 새로 기록되는 로그를 실시간으로 이어서 출력 | journalctl -u sshd.service -f |
-n [줄수] | 가장 최근 로그를 지정한 줄 수만 출력 (줄 수를 생략하면 10줄) | journalctl -u httpd.service -n 20 |
-p 우선순위 | 지정한 우선순위 이상(더 심각한) 메시지만 출력 | journalctl -p err -b |
--since / --until | 시작·종료 시각으로 기간 지정 | journalctl --since "2026-09-16 09:00" --until "2026-09-16 10:00" |
-k | 커널 메시지(dmesg에 해당)만 출력 | journalctl -k -b |
--no-pager | 페이저(less)를 거치지 않고 표준 출력으로 바로 출력 | journalctl -u httpd.service --no-pager |
-o 형식 | 출력 형식 지정 (short, verbose, json, cat 등) | journalctl -u httpd.service -o verbose |
--disk-usage | 저널 파일이 차지하는 디스크 용량 표시 | journalctl --disk-usage |
실무 예시
최근 시스템 로그 10줄 보기
$ journalctl -n 10 --no-pager
-- Logs begin at Tue 2026-09-16 08:12:03 KST, end at Tue 2026-09-16 10:41:55 KST. --
Sep 16 10:40:01 rocky8 systemd[1]: Starting system activity accounting tool...
Sep 16 10:40:01 rocky8 systemd[1]: sysstat-collect.service: Succeeded.
Sep 16 10:41:01 rocky8 CROND[3120]: (root) CMD (run-parts /etc/cron.hourly)
Sep 16 10:41:55 rocky8 sshd[3145]: Accepted password for root from 192.168.0.10 port 51422 ssh2
저널에 가장 최근 기록된 10줄을 페이저 없이 출력합니다. 시스템 전반의 최신 상황을 확인할 때 사용합니다. 실제 출력 줄 수와 내용은 시스템 상태에 따라 다릅니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
특정 서비스 로그만 조회
$ journalctl -u httpd.service --no-pager -n 15
-- Logs begin at Tue 2026-09-16 08:12:03 KST, end at Tue 2026-09-16 10:45:10 KST. --
Sep 16 10:44:58 rocky8 systemd[1]: Starting The Apache HTTP Server...
Sep 16 10:44:58 rocky8 httpd[3201]: AH00526: Syntax error on line 12 of /etc/httpd/conf/httpd.conf:
Sep 16 10:44:58 rocky8 systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
Sep 16 10:44:58 rocky8 systemd[1]: Failed to start The Apache HTTP Server.
httpd 서비스 유닛이 남긴 로그만 골라 최근 15줄을 봅니다. 해당 유닛이 설치·실행된 적이 없으면 로그가 비어 있고, 이 경우에도 종료 코드는 0입니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
이번 부팅의 오류 메시지만 추리기
$ journalctl -b -p err --no-pager
-- Logs begin at Tue 2026-09-16 08:12:03 KST, end at Tue 2026-09-16 10:45:10 KST. --
Sep 16 08:12:09 rocky8 kernel: ACPI Error: No handler for Region [SYSI]
Sep 16 10:44:58 rocky8 httpd[3201]: AH00526: Syntax error on line 12 of /etc/httpd/conf/httpd.conf:
Sep 16 10:44:58 rocky8 systemd[1]: Failed to start The Apache HTTP Server.
현재 부팅 이후 기록된 err 이상(err, crit, alert, emerg) 메시지만 출력합니다. 오류가 없으면 헤더 줄만 표시됩니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
시간 범위를 지정해 장애 구간 확인
$ journalctl -u httpd.service --since "2026-09-16 10:40" --until "2026-09-16 10:50" --no-pager
-- Logs begin at Tue 2026-09-16 08:12:03 KST, end at Tue 2026-09-16 10:50:00 KST. --
Sep 16 10:44:58 rocky8 systemd[1]: Starting The Apache HTTP Server...
Sep 16 10:44:58 rocky8 httpd[3201]: AH00526: Syntax error on line 12 of /etc/httpd/conf/httpd.conf:
Sep 16 10:44:58 rocky8 systemd[1]: httpd.service: Failed with result 'exit-code'.
장애가 발생한 시각 전후 10분 구간의 httpd 로그만 잘라서 봅니다. 시각 문자열은 시스템의 로컬 시간대를 기준으로 해석됩니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
조사 결과를 보고서 파일로 저장
준비: mkdir -p /tmp/demo
$ journalctl -u httpd.service -n 20 --no-pager > /tmp/demo/incident_report.txt; wc -l /tmp/demo/incident_report.txt
21 /tmp/demo/incident_report.txt
저널 출력을 파일로 넘겨 기록으로 남깁니다. 리다이렉션할 때 --no-pager를 붙이면 페이저가 개입하지 않습니다. 저장된 줄 수는 로그 헤더 한 줄과 실제 로그 줄 수를 합한 값이므로, 로그가 20줄보다 적으면 21보다 작게 나옵니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
주의할 점
- 일반 사용자에게는 자신의 로그만 보입니다. 시스템 전체 로그를 보려면 root이거나 systemd-journal 그룹에 속해야 합니다.
- 저널이 /run/log/journal에 저장되는 구성에서는 재부팅 시 로그가 사라집니다. /var/log/journal 디렉터리가 있으면 영구 보존되며, 보존 설정은 /etc/systemd/journald.conf의 Storage 항목으로 확인·변경할 수 있습니다(변경 전 원본 백업 권장).
- -u 뒤에는 유닛 이름을 정확히 써야 합니다. httpd처럼 확장자를 생략하면 .service로 보정되지만, 프로세스 이름과 유닛 이름이 다르면 결과가 비어 있습니다.
- 출력을 파일이나 파이프로 넘길 때 --no-pager 또는 -n을 지정하지 않으면 화면에서 멈춘 것처럼 보일 수 있습니다.
- 저널 용량을 줄일 때는 --vacuum-size/--vacuum-time 같은 journalctl 옵션을 사용하고, /var/log/journal 이하를 rm으로 직접 삭제하지 않는 것이 안전합니다.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
