우분투 실전 명령어 | journalctl 서비스 로그 분석
언제 쓰는가
서비스가 갑자기 죽거나, 재시작은 되는데 요청이 느려질 때 가장 먼저 보는 게 journalctl이다. 특히 systemd로 올라가는 서비스는 애플리케이션 로그, 재시작 이력, 에러 스택이 한곳에 모여 있어서 원인 추적이 빠르다.
바로 쓰는 명령어
# 특정 서비스 최근 로그를 실시간으로 보기
journalctl -u nginx -n 100 -f
# 오늘 부팅 이후 에러 레벨만 시간순으로 확인
journalctl -p err..alert -b --no-pager
# 장애 발생 시간대만 잘라서 확인
journalctl -u myapp --since "2026-02-18 21:30:00" --until "2026-02-18 22:10:00" -o short-iso
핵심 옵션/패턴
- -u
: 특정 systemd 유닛 로그만 필터링한다 - -f: tail -f처럼 새 로그를 계속 따라간다
- -n 200: 마지막 200줄처럼 최근 구간만 빠르게 본다
- -b: 현재 부팅 세션 기준으로 제한한다. 재부팅 전 로그와 섞이지 않아 분석이 쉬워진다
- -p err..alert: 에러 이상 심각도만 골라서 노이즈를 줄인다
- --since, --until: 장애 시간대를 정확히 자를 때 필수다
- -o short-iso: 타임스탬프를 ISO 형태로 맞춰 다른 로그와 대조하기 좋다
현업에서는 아래 순서가 가장 안전하다.
- -u + -n으로 최근 에러를 먼저 본다
- 시간대가 잡히면 --since/--until로 범위를 고정한다
- 필요할 때만 -f로 실시간 추적한다
명령 출력 예시
Feb 18 21:42:11 ip-10-0-1-23 myapp[18421]: ERROR db timeout after 3000ms
Feb 18 21:42:11 ip-10-0-1-23 systemd[1]: myapp.service: Main process exited, code=exited, status=1/FAILURE
Feb 18 21:42:11 ip-10-0-1-23 systemd[1]: myapp.service: Failed with result 'exit-code'.
Feb 18 21:42:14 ip-10-0-1-23 systemd[1]: myapp.service: Scheduled restart job, restart counter is at 3.
2026-02-18T21:30:08+0900 myapp[18302]: WARN cache miss ratio high
2026-02-18T21:34:55+0900 myapp[18302]: ERROR upstream connect timeout
2026-02-18T21:35:01+0900 myapp[18302]: INFO retry success
자주 하는 실수
- 실수 1: journalctl -f만 오래 켜두고 과거 맥락을 안 본다. 먼저 -n으로 직전 로그를 확인해야 원인 흐름이 보인다
- 실수 2: 재부팅 이후 장애인데 -b를 빼서 이전 부팅 로그와 섞는다. 증상이 왜곡될 수 있다
- 실수 3: 타임존을 확인하지 않고 --since 시간을 넣는다. 운영 서버와 로컬 시간대가 다르면 전혀 다른 구간을 보게 된다
- 실수 4: --no-pager 없이 긴 출력을 복사하다가 중간이 잘린다. 보고서에 붙일 땐 --no-pager를 같이 쓰는 게 안전하다
검증 방법
# 서비스 상태와 최근 종료 원인 확인
systemctl status myapp --no-pager
# 최근 10분 에러 건수 빠르게 확인
journalctl -u myapp --since "10 minutes ago" -p err..alert --no-pager | wc -l
# 재부팅 경계 포함해서 부팅별 에러 비교
journalctl -u myapp -b -1 -p err..alert --no-pager
journalctl -u myapp -b 0 -p err..alert --no-pager
검증 기준은 단순하다. 에러 건수가 줄고, systemctl status에서 재시작 루프가 사라지면 1차 조치가 먹힌 것이다.
운영 팁
장애 대응 중에는 journalctl 출력 시간을 short-iso로 통일해 두면 Nginx access 로그, 애플리케이션 로그, 모니터링 알람 타임라인을 한 번에 맞출 수 있다. 그리고 복구 후에는 같은 조건으로 10분, 30분, 1시간 구간을 다시 조회해 재발 여부를 꼭 확인하는 게 좋다.
출처
- Ubuntu Server Guide
- systemd man pages
- DigitalOcean Community