title: Debian 12 (bookworm): journalctl 실전 필터링으로 ‘원인 찾기’ 시간을 줄이는 운영 루틴(부팅/유닛/우선순위/타임라인)
body:
대상 OS: Debian 12 (bookworm)

`journalctl`은 systemd 저널에서 로그를 조회하는 강력한 도구입니다. 단순히 로그를 나열하는 것을 넘어, 특정 시간대, 특정 서비스, 특정 이벤트 등 다양한 조건으로 필터링하여 문제의 원인을 빠르고 정확하게 파악할 수 있습니다. 이 가이드에서는 Debian 12 (bookworm) 환경에서 `journalctl`을 활용하여 트러블슈팅 시간을 단축하는 실전 팁들을 소개합니다.

# 1. 기본 로그 확인 및 상태 파악

가장 기본적인 사용법은 `journalctl` 명령어를 그냥 실행하여 최근 로그부터 보는 것입니다.

# 최신 로그부터 보기 (기본값)
journalctl

# 이전 로그를 계속 따라가기 (tail -f와 유사)
journalctl -f

# 특정 서비스 (예: sshd) 로그만 보기
journalctl -u sshd

# 특정 시간대 로그 보기 (YYYY-MM-DD HH:MM:SS 형식)
journalctl --since "2026-02-26 23:00:00" --until "2026-02-27 01:00:00"

# 부팅 로그만 보기
journalctl -b

# 이전 부팅 로그 보기 (-1은 바로 이전 부팅)
journalctl -b -1

# 2. 필터링 조건 활용하기

`journalctl`은 다양한 필터 옵션을 제공하여 원하는 로그를 정밀하게 검색할 수 있습니다.

## 2.1. 서비스 및 부팅 관련 필터

- `-u <service_name>`: 특정 서비스의 로그만 표시
- `-b`: 현재 부팅 로그만 표시
- `-b -1`: 이전 부팅 로그 표시
- `-p <priority>`: 특정 우선순위(priority) 이상의 로그만 표시 (emerg, alert, crit, err, warning, notice, info, debug)
예: `journalctl -p err` (에러 이상만 표시)

## 2.2. 시간 기반 필터링

- `--since <time>`: 지정 시간 이후 모든 메시지
- `--until <time>`: 지정 시간 이전 모든 메시지
- `YYYY-MM-DD HH:MM:SS` 또는 `yesterday`, `today`, `now` 등 다양한 시간 표현 가능

# 특정 날짜의 모든 로그
journalctl --since "2026-02-27"

# 오늘 발생하는 에러 로그
journalctl -p err --since "today"

## 2.3. 키워드 검색

`grep`과 유사하게 특정 키워드로 로그를 필터링할 수 있습니다.

# syslog에서 'authentication failure' 키워드가 포함된 로그 검색
journalctl -k -g "authentication failure"

## 2.4. 특정 시스템 컴포넌트 필터링

`_SYSTEMD_UNIT`, `_COMM` (프로세스 이름), `_PID` 등의 Field 필터를 사용하여 더욱 세밀하게 조회할 수 있습니다.

# PID 1234번 프로세스의 로그 확인
journalctl _PID=1234

# systemd-unit 'networkd'의 모든 로그 (SSH 접속 관련)
journalctl _SYSTEMD_UNIT=systemd-networkd.service _COMM=sshd

# 특정 사용자(user ID)의 로그
journalctl _UID=1000

# 3. 로그 분석 시간 단축 팁

## 3.1. 시작 시점(boot) 기반 분석

시스템 재부팅 후 문제가 발생했는지, 아니면 특정 서비스 실행 이후 문제가 발생했는지 파악하는 것이 중요합니다. `journalctl -b`와 `-b -1` 옵션을 활용하여 비교 분석하면 문제 발생 시점을 특정하는 데 도움이 됩니다.

# 현재 부팅 로그에서 에러 메시지 검색
journalctl -b -p err

# 이전 부팅 로그에서 특정 서비스(예: netplan) 관련 에러 검색
journalctl -b -1 -u netplan -p err

## 3.2. 중요한 이벤트 및 우선순위 활용

` emergencia`, ` alert`, ` critical`, ` error` 등의 높은 우선순위 로그는 시스템에 즉각적인 문제가 발생했음을 나타냅니다. 반면, `warning`이나 `notice` 로그는 잠재적인 문제를 시사할 수 있으므로 주의 깊게 살펴봐야 합니다.

# 심각한 에러와 경고 로그만 모아서 보기
journalctl -p warning

## 3.3. 타임라인 시각화 (`--output=json` + `jq`)

`journalctl`은 JSON 형식으로 로그를 출력할 수 있으며, `jq`와 같은 외부 도구를 사용하면 로그 데이터를 파싱하고 원하는 정보를 추출하여 타임라인을 시각화하는 데 활용할 수 있습니다. (이 부분은 고급 활용법으로, 실시간 트러블슈팅보다는 분석에 적합합니다.)

# JSON 형식으로 로그 출력 (예: sshd 로그)
journalctl -u sshd -o json | jq '.[] | select(.MESSAGE | contains("Accepted password")) | "\(.TIMESTAMP) \(.MESSAGE)"'

# 4. 자주 발생하는 문제 시나리오별 `journalctl` 활용

## 4.1. 네트워크 문제

# networkd 서비스 로그에서 IP 할당 실패 또는 라우팅 오류 검색
journalctl -u systemd-networkd -p err
journalctl -u systemd-networkd -g "failed"

# systemd-resolved 로그에서 DNS 쿼리 실패 확인 (DoT, DNSSEC 관련 오류 포함)
journalctl -u systemd-resolved -p err

## 4.2. SSH 접속 문제

# sshd 서비스 로그에서 인증 실패 또는 접속 거부 확인
journalctl -u sshd -p err
journalctl -u sshd -g "authentication failure"
journalctl -u sshd -g "Connection closed"

# PAM 로그 확인 (sudo, SSH 등 인증 관련)
journalctl _SYSTEMD_UNIT=systemd-logind.service -g "session opened" # 새 세션 시작
journalctl _COMM=sshd # sshd 관련 로그

# 결론

`journalctl`의 다양한 필터링 옵션을 숙지하고 활용하면, 방대한 로그 데이터 속에서 문제의 단서를 빠르게 발견하여 트러블슈팅 시간을 획기적으로 줄일 수 있습니다. 위에서 소개한 예시들을 실제 환경에 적용해보면서 `journalctl`을 능숙하게 다루는 방법을 익히시길 바랍니다.