Published on

journalctl boot log로 부팅 로그 확인하는 방법

Authors
  • avatar
    Name
    Indo Yoon
    Twitter

부팅 로그를 볼 때는 journalctl --list-boots로 부팅 회차 목록을 먼저 확인하고, -b 옵션에 인덱스나 부팅 ID를 붙여 원하는 회차만 조회하는 순서가 가장 안전해요. 현재 부팅은 journalctl -b, 직전 부팅은 journalctl -b -1처럼 지정하면 바로 좁혀 볼 수 있어요. 이 글은 그 조합을 상황별로 정리하고, 목록이 비어 보이거나 이전 로그가 사라졌을 때 확인할 설정까지 함께 다뤄요.

한눈에 보기

journalctl은 systemd가 관리하는 저널(journal)에서 로그를 읽어 오는 명령이에요. 부팅 단위 조회의 핵심은 --list-boots, -b, --boot 세 가지이고, 여기에 서비스·커널·우선순위 필터를 조합하면 원하는 구간만 남길 수 있어요.

  • --list-boots는 저장된 저널에 존재하는 부팅 회차를 나열해요.
  • 인덱스 0은 현재 부팅, 음수 인덱스는 과거 부팅을 가리켜요.
  • --boot=<부팅 ID>를 쓰면 인덱스가 밀려도 같은 회차를 정확히 지정할 수 있어요.
  • -u는 유닛, -k는 커널 메시지, -p는 우선순위로 범위를 좁혀요.
  • 저널이 휘발성으로 운영되면 과거 부팅 기록 자체가 남지 않을 수 있어요.

부팅 로그를 읽는 일은 장애 직후 원인을 되짚는 작업이라, 조회 명령보다 "어느 회차를 보고 있는지"를 확정하는 습관이 더 중요해요. 인덱스는 편하지만 저장 정책에 따라 달라질 수 있으니, 기록을 남길 때는 부팅 ID를 함께 적어 두는 편이 좋아요.

부팅 로그 확인 명령 비교 표

목적명령설명
부팅 목록 확인journalctl --list-boots저장된 부팅 회차와 인덱스, 부팅 ID를 보여줘요
현재 부팅 전체journalctl -b인덱스 0과 같은 의미예요
직전 부팅journalctl -b -1바로 앞 회차의 로그를 조회해요
특정 회차 지정journalctl --boot=<부팅 ID>인덱스가 바뀌어도 동일 회차를 가리켜요
커널 메시지만journalctl -b -k부팅 중 커널이 남긴 메시지를 모아요
유닛 한정journalctl -b -u sshd특정 서비스 로그만 남겨요
오류 이상만journalctl -b -p err지정한 우선순위와 그보다 심각한 로그를 보여줘요
실시간 추적journalctl -b -f새로 쌓이는 로그를 따라가며 출력해요
시간대 지정journalctl -b --since "2026-11-01 09:00"특정 시각 이후로 잘라서 봐요
출력 형식 변경journalctl -b -o short-iso시간 형식이나 JSON 출력을 선택해요

표의 명령은 모두 같은 저널을 읽지만, 목적에 따라 붙이는 옵션이 달라요. 먼저 회차를 확정하고, 그다음 유닛과 우선순위로 좁히는 순서로 쓰면 결과를 해석하기 쉬워요.

단계별로 부팅 로그 확인하기

1) 부팅 목록부터 확인해요

가장 먼저 실행할 명령은 journalctl --list-boots예요. 출력에는 인덱스, 부팅 ID, 첫 기록 시각, 마지막 기록 시각이 함께 나오기 때문에 어느 회차가 문제 구간인지 빠르게 판단할 수 있어요.

목록이 한 줄만 보이거나 아예 비어 있다면 저널 저장 방식이 휘발성으로 설정되어 있을 가능성이 커요. 이 경우 재부팅 이전 기록은 조회할 수 없으므로, 원인 분석은 현재 부팅 로그와 별도로 남겨 둔 로그를 함께 봐야 해요.

2) 현재 부팅 로그를 봐요

journalctl -b는 현재 부팅의 로그를 처음부터 보여줘요. journalctl -b 0과 같은 의미이고, 인덱스를 생략한 journalctl과도 결과가 비슷하지만 부팅 경계를 명시한다는 점이 달라요.

양이 많을 때는 journalctl -b -n 200 --no-pager처럼 최근 줄 수를 제한하고 페이저를 끄면 스크립트나 원격 세션에서 다루기 편해요.

3) 직전 부팅 로그를 확인해요

재부팅 직후 장애를 되짚을 때는 journalctl -b -1을 써요. 인덱스는 현재 부팅이 0, 바로 이전이 -1, 그 이전이 -2처럼 거슬러 올라가요. 반대로 첫 부팅을 기준으로 세는 양수 인덱스도 지원해요.

부팅이 여러 번 반복된 상황이라면 목록에서 마지막 기록 시각을 보고 원하는 회차를 고르는 편이 안전해요. 인덱스만 보고 판단하면 저장된 저널 범위가 바뀌었을 때 엉뚱한 회차를 볼 수 있어요.

4) 부팅 ID로 정확히 지정해요

journalctl --boot=<부팅 ID>는 목록에 표시된 부팅 ID를 그대로 넣어 조회해요. ID 전체를 입력해도 되고, 다른 회차와 겹치지 않는 앞부분만 넣어도 동작해요. 인덱스가 재계산되는 상황에서도 같은 회차를 가리킬 수 있다는 점이 장점이에요.

장애 티켓이나 인수인계 문서에는 "인덱스 -1"보다 부팅 ID를 적어 두는 편이 나중에 검증하기 쉬워요.

5) 서비스와 커널, 우선순위로 좁혀요

부팅 로그 전체는 양이 많기 때문에 목적에 맞는 필터를 함께 붙여요.

  • 특정 서비스: journalctl -b -u sshd --no-pager
  • 커널 메시지: journalctl -b -k -p warning
  • 특정 문자열: journalctl -b -g "failed"
  • 시간 구간: journalctl -b --since "2026-11-01 09:00" --until "2026-11-01 10:00"
  • 형식 지정: journalctl -b -o json-pretty 또는 journalctl -b -o short-iso

-p는 지정한 우선순위와 그보다 심각한 단계까지 함께 보여줘요. 그래서 -p err를 쓰면 오류와 그 상위 단계가 같이 나오고, 그보다 낮은 단계는 제외돼요.

상황별 선택 가이드

재부팅 후 서비스가 올라오지 않았을 때는 직전 회차에서 해당 유닛만 보는 것이 빠릅니다. journalctl -b -1 -u <유닛 이름> --no-pager로 실패 지점과 종료 코드를 확인하고, 필요하면 같은 회차에서 -p warning을 붙여 주변 경고를 함께 봐요.

커널이나 드라이버 의심 상황은 journalctl -b -1 -k로 커널 메시지만 분리해서 봐요. 부팅 초반의 장치 인식이나 파일 시스템 관련 메시지는 서비스 로그에 섞여 있으면 놓치기 쉬워요.

부팅 시간대를 좁혀야 할 때는 --since와 --until을 함께 써요. 부팅 회차 지정과 시간 지정을 동시에 쓰면 해당 회차 안에서 시간 범위로 한 번 더 잘리므로, 재부팅 시각을 대략 알고 있을 때 유용해요.

자동화나 수집 파이프라인에서는 --no-pager와 -o json 계열 출력을 조합해요. 사람이 읽는 화면과 기계가 처리하는 출력은 형식이 다르므로, 스크립트에서는 페이저가 개입하지 않도록 명시하는 편이 안전해요.

실시간으로 원인을 따라갈 때는 -f를 붙여요. 다만 부팅 회차를 지정한 상태에서 추적하면 그 회차의 로그만 대상이 되므로, 현재 상황을 보려면 journalctl -f처럼 회차 지정 없이 쓰는 편이 맞아요.

주의할 점

저널 저장 방식이 휘발성이면 과거 부팅 로그가 남지 않아요. 영구 보존은 /var/log/journal 디렉터리를 두고 journald.conf의 Storage 설정을 영구 저장으로 맞추는 방식으로 구성해요. 설정을 바꾼 뒤에는 journald를 다시 시작해야 반영돼요.

인덱스는 "저장된 저널 안에서의 순서"예요. 오래된 로그를 정리하면 인덱스가 밀릴 수 있으므로, 특정 회차를 다시 찾아야 하는 기록에는 부팅 ID를 남기는 편이 좋아요.

-p는 해당 단계만 보여주는 필터가 아니라 그 이상 심각도를 포함해요. 원하는 결과가 나오지 않으면 우선순위 기준을 한 단계 넓혀서 확인해 보세요.

시간 표시는 시스템 시간대 설정을 따르고, --utc를 붙이면 UTC로 출력돼요. 서버마다 시간대가 다르면 같은 사건이 다른 시각으로 보일 수 있으니, 여러 서버 로그를 비교할 때는 기준을 맞춰 두는 편이 좋아요.

저널 조회에는 권한이 필요해요. 일반 사용자 계정으로는 일부 로그만 보일 수 있으므로, 운영 환경에서는 systemd-journal 그룹에 속한 계정이나 권한 상승을 사용해요.

--vacuum-size나 --vacuum-time 같은 정리 옵션은 조회가 아니라 삭제 동작이에요. 부팅 로그를 분석하는 중에는 실행하지 말고, 보존 정책을 정리할 때만 별도로 사용해요.

자주 묻는 질문

journalctl -b만 실행하면 어떤 부팅 로그가 보이나요?

현재 부팅 회차의 로그 전체가 보여요. 인덱스 0을 지정한 것과 같은 결과이고, 부팅 이후 쌓인 커널과 서비스 로그가 시간순으로 출력돼요. 이전 회차까지 비교하려면 --list-boots로 목록을 확인한 뒤 -b -1처럼 인덱스를 붙여요.

이전 부팅 로그가 목록에 보이지 않는 이유는 무엇인가요?

저널이 휘발성으로 운영되면 재부팅 시점에 이전 기록이 사라져요. 영구 저장 구성이 되어 있더라도 보존 기간이나 용량 정책에 따라 오래된 회차가 정리될 수 있어요. 이 경우 저장 설정과 정리 정책을 먼저 확인해 보세요.

부팅 로그에서 특정 서비스 실패만 보고 싶어요.

-u 옵션에 유닛 이름을 넣고, 필요하면 우선순위 필터를 함께 붙여요. 예를 들어 journalctl -b -u sshd -p warning처럼 쓰면 해당 유닛의 경고 이상 로그만 남아요. 직전 회차를 보고 싶다면 -b -1을 함께 지정해요.

부팅 ID는 어디서 확인하나요?

journalctl --list-boots 출력의 부팅 ID 열에서 확인할 수 있어요. 이 값을 --boot=에 넣으면 인덱스가 바뀌어도 같은 회차를 조회할 수 있어요. 문서나 티켓에 기록을 남길 때는 인덱스보다 이 값을 함께 적는 편이 안전해요.

로그 시간이 예상과 다르게 보여요.

시스템 시간대 설정과 --utc 옵션 사용 여부를 확인해 보세요. 서버 간 시간대가 다르면 같은 사건이 다른 시각으로 출력될 수 있어요. 여러 서버를 비교할 때는 출력 형식을 통일하고 기준 시간대를 맞춰 두는 편이 좋아요.

출처

부팅 로그를 다루는 일은 결국 "어느 회차의 어떤 유닛이 언제 실패했는가"를 좁혀 가는 과정이에요. 함께 보면 좋은 운영 글로는 systemd 유닛 재시작 절차를 정리한 systemd 서비스 재시작 방법과 로그 보존 정책을 다룬 logrotate 설정 가이드를 권해요. 장애 회고를 남길 때는 조회 명령과 함께 부팅 ID, 유닛 이름, 확인한 시간 구간을 같이 적어 두면 다음 대응이 훨씬 빨라져요.