우분투 실전 명령어 | journalctl 로그 조회 실전(서비스 단위/시간 범위)

언제 쓰는가

서비스가 갑자기 죽거나, 재부팅 이후 이상 동작이 생겼을 때 가장 먼저 보는 게 journalctl입니다. 파일 로그를 뒤지기 전에 systemd 저널에서 시간대와 서비스 단위로 좁히면 원인을 훨씬 빨리 찾을 수 있습니다. 특히 배포 직후 에러 확인이나 간헐 장애 추적에 자주 씁니다.

바로 쓰는 명령어

# 1) 최근 부팅 기준 전체 에러/경고 빠르게 확인
journalctl -b -p warning

# 2) 특정 서비스 로그만 확인
journalctl -u nginx -n 200 --no-pager

# 3) 오늘 18:00~19:00 구간만 조회
journalctl --since "today 18:00" --until "today 19:00" --no-pager

# 4) 실시간 추적
journalctl -u ssh -f
# 자주 쓰는 조합: 최근 부팅 + 특정 서비스 + 에러 등급만
journalctl -b -u docker -p err --no-pager

# UTC 대신 로컬 시간으로 보기
journalctl -u cron -o short-iso --no-pager

핵심 옵션/패턴

  • -u <service>: 서비스 단위 필터. 장애 분석 시작점으로 가장 안전합니다.
  • -b: 현재 부팅 로그만 조회. 재부팅 이전 로그와 섞이는 실수를 줄입니다.
  • -p <level>: 심각도 필터(err, warning, info 등).
  • --since / --until: 시간 범위 고정. “언제부터 깨졌는지” 확인할 때 필수입니다.
  • -f: 실시간 추적. 재현 테스트하면서 바로 로그를 볼 때 편합니다.
  • --no-pager: 자동 페이지 진입 방지. 스크립트나 원격 터미널에서 특히 유용합니다.

자주 하는 실수

  • 서비스 이름을 잘못 넣는 경우: nginx.service 대신 nginx처럼 짧은 이름이 되는 경우가 많습니다. 먼저 systemctl list-units --type=service | grep -i nginx로 정확한 유닛명을 확인하세요.
  • 시간대를 착각하는 경우: 서버 UTC, 운영자 로컬 시간(KST)이 달라서 구간을 잘못 잡는 일이 잦습니다. 필요하면 timedatectl로 현재 타임존부터 확인하세요.
  • -f만 켜고 과거 원인을 놓치는 경우: 실시간 로그만 보면 이미 지나간 에러를 못 봅니다. 먼저 -n 또는 --since로 과거 구간 확인 후 -f로 넘어가세요.

검증 방법

# 1) 서비스명 확인
systemctl list-units --type=service --all | grep -i nginx

# 2) 에러 로그가 실제로 잡히는지 확인
journalctl -u nginx -p err -n 20 --no-pager

# 3) 시간 필터가 의도대로 적용됐는지 확인
journalctl -u nginx --since "1 hour ago" --until "now" --no-pager

실행 결과 예시

$ journalctl -u nginx -p err -n 5 --no-pager
Feb 18 18:21:09 web-01 nginx[1921]: 2026/02/18 18:21:09 [error] 1921#1921: *883 connect() failed (111: Connection refused) while connecting to upstream
Feb 18 18:21:09 web-01 nginx[1921]: 2026/02/18 18:21:09 [error] 1921#1921: *883 upstream prematurely closed connection
Feb 18 18:21:10 web-01 systemd[1]: nginx.service: Failed with result 'exit-code'.
Feb 18 18:21:10 web-01 systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Feb 18 18:21:12 web-01 systemd[1]: nginx.service: Scheduled restart job, restart counter is at 1.
$ journalctl --since "today 18:00" --until "today 18:10" -u ssh --no-pager
Feb 18 18:02:14 web-01 sshd[3551]: Accepted publickey for ubuntu from 10.0.2.14 port 51722 ssh2
Feb 18 18:02:14 web-01 sshd[3551]: pam_unix(sshd:session): session opened for user ubuntu(uid=1000)
Feb 18 18:07:39 web-01 sshd[3720]: Received disconnect from 10.0.2.14 port 51722:11: disconnected by user
Feb 18 18:07:39 web-01 sshd[3551]: pam_unix(sshd:session): session closed for user ubuntu

출처

  • Ubuntu Manpage
  • systemd 공식 문서