journalctl로 날짜·서비스별 로그 빠르게 필터링하는 실전 기술

Views: 0

journalctl의 기본 개념

리눅스 시스템에서 systemd가 관리하는 로그는 모두 journal이라는 통합 저장소에 기록된다. journalctl 명령은 이 로그를 조회, 필터링, 검색할 수 있게 해주는 도구로, 텍스트 파일 기반의 /var/log보다 훨씬 유연하다.
journalctl을 이용하면 커널 로그, 서비스 로그, 부팅 로그 등을 한 곳에서 다룰 수 있으며, 실시간 모니터링까지 가능하다. 이는 관리자에게 시스템 상태를 빠르게 파악할 수 있는 강력한 수단을 제공한다.

기본 사용법

전체 로그를 조회하려면 다음 명령을 실행한다.

journalctl

로그는 기본적으로 오래된 순서부터 출력된다. 만약 가장 최근 로그를 보고 싶다면 -r 옵션을 사용한다.

journalctl -r

이 명령은 최신 로그부터 역순으로 보여주어 문제 발생 시점을 빠르게 확인할 때 유용하다.

날짜별 로그 필터링

시스템 장애나 이벤트가 발생한 특정 시점을 추적할 때 날짜별 필터링은 매우 중요하다.

특정 기간 로그 조회

journalctl --since "2025-10-25" --until "2025-10-30"

이 명령은 지정한 기간 사이의 로그만 보여준다. --since--until은 날짜뿐 아니라 시간 단위도 지정할 수 있다.
예를 들어, 지난 2시간 동안의 로그를 확인하려면 다음처럼 입력한다.

journalctl --since "2 hours ago"

부팅별 로그 구분

부팅마다 로그를 구분해볼 수도 있다.

journalctl -b

현재 부팅 로그만 출력하며, 이전 부팅의 로그를 보고 싶다면 -b -1처럼 지정하면 된다.

journalctl -b -1

서버가 여러 번 재시작된 환경에서는 부팅 단위로 로그를 확인하는 것이 문제 추적에 매우 효율적이다.

서비스별 로그 필터링

서비스 단위로 로그를 조회하면 특정 애플리케이션이나 데몬의 문제를 정확히 파악할 수 있다.

특정 서비스 로그 조회

journalctl -u nginx.service

이 명령은 nginx 서비스의 모든 로그를 출력한다.
서비스명이 확실하지 않다면 /etc/systemd/system 혹은 systemctl list-units --type=service 명령으로 확인할 수 있다.

특정 시간대 + 서비스 로그 결합

journalctl -u ssh.service --since "2025-10-29 00:00" --until "2025-10-29 12:00"

이 조합은 해당 시간대에 발생한 ssh 서비스 관련 로그만 필터링한다.
서비스 로그를 시간 단위로 좁혀보면 장애 발생 시점을 정밀하게 추적할 수 있다.

실시간 로그 모니터링

로그가 계속 추가되는 상황에서는 실시간으로 확인할 필요가 있다.

journalctl -u nginx.service -f

이 명령은 nginx 로그를 실시간으로 출력하며, 서비스 운영 중 오류나 경고를 즉시 파악할 수 있다.
특히 tail -f보다 안정적으로 출력이 유지되며, systemd 관리 하의 모든 로그를 동일한 인터페이스로 볼 수 있다.

출력 형식과 필터링 심화

로그 수준별 필터링

journalctl은 로그 레벨(priority)로도 필터링이 가능하다.

journalctl -p 3 -b

-p 3err 수준 이하의 로그만 출력한다. (0=emerg, 1=alert, 2=crit, 3=err, 4=warning, 5=notice, 6=info, 7=debug)
이를 활용하면 불필요한 정보 없이 핵심 오류 로그만 추출할 수 있다.

특정 문자열 검색

로그 내용 중 특정 단어가 포함된 행만 보고 싶을 때는 grep을 함께 사용한다.

journalctl -u ssh.service | grep "Failed password"

로그 양이 많은 서버 환경에서는 이 조합으로 인증 실패나 네트워크 문제를 빠르게 찾을 수 있다.

출력 형식 지정

로그의 구조를 JSON 형태로 보고 싶다면 다음 명령을 사용할 수 있다.

journalctl -u nginx.service -o json-pretty

json, json-pretty, cat, short, verbose 등 다양한 출력 형식이 있으며, 자동화 스크립트나 로그 분석 도구와 연동할 때 특히 유용하다.

시스템 부팅 시간과 연계 분석

systemd-analyzejournalctl을 함께 사용하면 부팅 과정에서 어떤 서비스가 지연을 유발했는지 정확히 파악할 수 있다.
예를 들어, 부팅이 느렸던 구간의 로그를 확인하려면 다음 명령을 실행한다.

journalctl -b -u systemd-networkd.service

이를 통해 네트워크 초기화에 지연이 발생했는지, 특정 서비스가 대기 상태였는지를 즉시 분석할 수 있다.

실무 활용 팁

  1. 장애 발생 시간대 파악 후 기간 지정
    • --since, --until로 정확한 범위를 좁혀 로그 양을 줄인다.
  2. 특정 서비스만 조회
    • -u 서비스명 옵션으로 관련 로그만 집중 분석한다.
  3. 실시간 감시와 병행
    • -f를 추가해 문제 발생 시 즉시 대응한다.
  4. 필요 시 JSON 출력으로 자동화 연결
    • 스크립트나 로그 분석 시스템에서 -o json으로 데이터 가공이 용이하다.

마무리

journalctl은 단순한 로그 뷰어가 아니라, 리눅스 시스템의 모든 이벤트를 정교하게 탐색할 수 있는 강력한 분석 도구다. 날짜, 서비스, 우선순위, 부팅 단위 등 다양한 조건을 조합해 로그를 조회하면 장애 원인 분석 속도를 크게 높일 수 있다. 실무에서는 이 도구를 적극적으로 활용해, 로그를 단순히 보는 수준을 넘어 체계적으로 관리하고 진단하는 습관을 들이는 것이 중요하다.