Linux 로그 경로 정리 · 32/50 · Part 4. journald / rsyslog / auditd
선행 학습 → 31. systemd-journald 이해 · 기초 48. Linux 로그와 journalctl
이번 글 → journalctl 기본 사용법
이어서 → 33. journalctl 시간·서비스·우선순위 필터링
기초 48편에서 journalctl 의 기본 사용법을 소개했습니다. 이번 글은 같은 옵션을 "분석 질문 → 옵션" 으로 재정리합니다. 옵션을 외우는 대신 "무엇을 알고 싶은가"에서 출발합니다.
핵심 요약
- 범위 3축: 부팅(
-b) · 서비스(-u) · 시간(--since/--until) + 심각도(-p)- 출력 형식: 사람용
short-iso, 증거용verbose, 도구용json- 분석 결과는 항상
--no-pager로 파일에 저장해 재현 가능하게 한다.
| 분석 질문 | 옵션 | 예 |
|---|---|---|
| 이번 부팅 이후 무슨 일이? | -b | journalctl -b |
| 직전 부팅 마지막 순간은? | -b -1 -n 50 | 재부팅 직전 로그 |
| SSH에서 무슨 일이? | -u sshd (Ubuntu: -u ssh) | 서비스 단위 |
| 오늘 발생한 경고 이상은? | --since today -p warning | 심각도 |
| 사고 시간대만 | --since "2026-09-20 02:10" --until "2026-09-20 02:35" | 시간창 |
| 최근 N줄 / 최신순 | -n 20 / -r | |
| 실시간 관찰 | -f | 재현 테스트 |
| 커널만 | -k | dmesg 대체 |
출력 형식(-o) | 용도 |
|---|---|
short (기본) | 전통 syslog 모양 |
short-iso / short-iso-precise | 연도·TZ 포함 — 보고서·타임라인용 |
verbose | 모든 필드 — 증거 캡처용 |
json / json-pretty | jq 로 가공, SIEM 투입 |
cat | 메시지만 |

journal files (/var/log/journal 또는 /run/log/journal)
│
journalctl ── 필터(-b / -u / --since / -p / 필드=값) ── 형식(-o) ── 출력(--no-pager > 파일)
│
└─ 분석 흐름: 넓게(-b, 시간창) → 좁게(-u, -p) → 깊게(-o verbose, 필드)
journalctl 은 기본적으로 /var/log/journal (없으면 /run/log/journal) 전체를 읽는다.
-D <dir> : 다른 디렉터리의 저널 읽기 (수집한 저널 사본 분석)
--file <f> : 특정 저널 파일만 읽기
포렌식 팁: 수집한 저널 사본은 journalctl -D /evidence/case-0920/journal/ 로 분석합니다. 원본 서버의 저널을 직접 건드리지 않습니다.
# 부팅 범위
journalctl --list-boots | tail -3
journalctl -b -o short-iso --no-pager | head -5
journalctl -b -1 -n 30 --no-pager 2>/dev/null # 직전 부팅 마지막 30줄 (영구 저널일 때)
# 서비스 범위
journalctl -u sshd --since today -o short-iso --no-pager | tail -10
# 시간창 (사고 시간대)
journalctl --since "2026-09-20 02:10:00" --until "2026-09-20 02:35:00" -o short-iso --no-pager
# 심각도
journalctl -p err -b --no-pager | tail
journalctl -p 0..3 --since "-7d" --no-pager | tail # emerg~err
# 형식
journalctl -u sshd -n 1 -o verbose --no-pager
journalctl -u sshd -n 3 -o json --no-pager | jq -r '[.__REALTIME_TIMESTAMP, ._PID, .MESSAGE] | @tsv'
# 저장 (분석 재현성)
journalctl -u sshd --since today -o short-iso --no-pager > /root/ir-case/sshd_today.txt

위 이미지는 Rocky Linux 9.8 실습 환경에서 journalctl 기본 옵션을 실제로 실행한 결과입니다.
아래는 형식 차이를 보여주는 예시 출력입니다.
[예시 · -o short] Sep 20 02:14:52 web01 sshd[4101]: Accepted password for deploy from 203.0.113.45 port 51188 ssh2
[예시 · -o short-iso] 2026-09-20T02:14:52+0900 web01 sshd[4101]: Accepted password for deploy from 203.0.113.45 port 51188 ssh2
[예시 · -o json(일부)] {"__REALTIME_TIMESTAMP":"1789838092000000","_PID":"4101","_SYSTEMD_UNIT":"sshd.service","MESSAGE":"Accepted password ..."}
| 형식 | 시각 표현 | 보고서 적합성 |
|---|---|---|
| short | Sep 20 02:14:52 | 낮음 (연도·TZ 없음) |
| short-iso | 2026-09-20T02:14:52+0900 | 높음 |
| json | epoch μs (UTC) | 도구 처리용 — 변환 필요 |
| 정상 | 의심 |
|---|---|
--list-boots 가 운영 기간과 일치 | 부팅 목록 앞부분이 최근에서 시작 (vacuum/삭제) |
-u sshd 로그와 /var/log/secure 일치 | 저널에는 있는데 파일에 없음 (파일 변조) |
-p err 드묾 | 사고 시간대 로깅 서비스 오류 |
Alert 시각 T 수신
↓ journalctl --since "T-30m" --until "T+30m" -o short-iso (넓게)
↓ journalctl -u <관련 서비스> 같은 시간창 (좁게)
↓ journalctl _PID=<의심 PID> -o verbose (깊게, 33편)
↓ 결과 파일 저장 → 해시 기록 → 티켓 첨부
[ ] -b / -u / --since / -p 의 분석 질문 매핑
[ ] 직전 부팅 마지막 로그 조회
[ ] 사고 시간창 조회
[ ] short-iso / verbose / json 출력 비교
[ ] -D 로 수집 저널 사본 분석 방법 이해
[ ] 결과를 파일로 저장해 재현성 확보
short-iso 를 쓴다.verbose 는 증거 캡처, json 은 자동화에 쓴다.-D 로 분석해 원본을 보호한다.| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 31. systemd-journald 이해 |
| ▶ 다음 글 | 33. journalctl 시간·서비스·우선순위 필터링 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |