개요

시스템의 상태를 진단하고 문제를 해결하는 데 가장 먼저 확인하는 것이 "로그(log)"입니다.

systemd 기반 리눅스 시스템에서는 journalctl 명령어를 통해 다양한 로그 정보를 효율적으로 조회할 수 있습니다.

이번 글에서는 journalctl의 기본 개념부터 실전 명령어까지 정리해보겠습니다.

 

리눅스 로그란?

로그(Log)의 정의

로그는 시스템, 서비스, 애플리케이션 등이 실행되는 동안 발생하는 이벤트 기록입니다.

시스템의 정상 동작 여부, 에러 발생 상황, 접속 이력, 자원 사용 상태 등을 추적할 수 있습니다.

 

로그가 왜 중요한가?

상황  로그를 보는 이유
시스템 다운  어떤 서비스에서 오류가 발생했는지 확인
보안 문제 누가, 언제, 어디서 접속했는지 추적
성능 저하 CPU나 메모리 과다 사용 원인 파악
서비스 장애 데몬(service)의 비정상 종료 확인

운영/관리/보안 모두에서 로그는 첫 번째 진단 도구 입니다.

 

로그 구조 개념

요소 설명
로그 소스 systemd 서비스, 커널, 사용자, syslog 등
저장 위치 기본적으로 /run/log/journal (RAM), /var/log/journal(디스크 영구저장)
로그 단위 각 로그는 시간, 유닛, 메시지, PID,UID 등 다양한 메타데이터를 가짐

 

리눅스 로그의 종류

로그 종류 설명 예시 파일
커널 로그 시스템 부팅, 하드웨어 상태 dmesg 또는 journalctl -k
시스템 로그 서비스 동작, 사용자 로그인 등 /var/log/syslog,
/var/log/messeges
인증 로그 로그인/로그아웃, sudo 사용 /var/log/auth.log
서비스 로그 nginx, sshd, cround 등 데몬의 상태 journalctl -u ssh.service
사용자 정의 로그 애플리케이션 로그  /var/log/myapp.log 등

요즘은 대부분이 systemd 환경이기 때문에 /var/log/*.log 대신 journalctl 명령어로 통합 조회합니다.

journalctl 기본 개념

- journalctl은 systemd에서 사용하는 로그 뷰어입니다.

- 시스템 서비스, 커널, 사용자 프로세스 등 다양한 로그가 journald에 통합 저장됩니다.

- 로그는 /var/log/journal/ (영구 저장) 또는 /run/log/journal/ (메모리 임시 저장)에 위치합니다.

 

로그 구조 

요소 설명
로그 소스 systemd 서비스, 커널, 사용자, syslog 등
저장 위치 기본적으로 /run/log/journal (RAM), /var/log/journal(디스크 영구저장)
로그 단위 각 로그는 시간, 유닛, 메시지, PID,UID 등 다양한 메타데이터를 가짐

 

 

journald 로그 항목 구조(Metadata 포함)

systemd는 로그를 이벤트 기반으로 수집하고, 각각의 로그 항목은 다양한 메타데이터를 포함합니다.

필드 설명
_PID 로그를 남긴 프로세스 ID
_UID 사용자 ID
_COMM 명령어 이름
_SYSTEMD _UNIT 관련된 systemd 서비스 이름
MESSAGE 실제 로그 메시지
PRIORITY 로그 심각도 (0=emerg, 7=debug)
_SOURCE _REALTIME _TIMESTAMP 실제 발생 시각
journalctl -o verbose -n 1	# 메타데이터 전체를 출력합니다.

 

 

실전 사용 예제

1. 전체 로그 보기

journalctl

 

2. 현재 부팅 이후의 로그

journalctl -b

 

3. 특정 서비스 로그 보기 (예 : ssh)

journalctl -u ssh.service

 

4. 실시간 로그 보기

journalctl -f

 

5. 에러 중심으로 보기

journalctl -xe

 

6. 날짜 기준으로 필터링

journalctl --since "2024-05-01"
journalctl --since yesterday --until today

 

로그 심각도 (Priority) 필터

숫자 레벨 이름 설명
0 emerg 시스템 사용 불가
1 alert 즉시 조치 필요
2 crit 심각한 문제
3 err 일반적인 에러
4 warning 경고
5 notice 중요 정보
6 info 일반 정보
7 debug 디버깅 정보
journalctl -p err..alert	# 에러부터 알림 수준까지 필터링 가능

 

로그 파일 영구 저장하려면???

 로그를 RAM이 아닌 디스크에 영구 저장하려면 아래 설정을 확인하세요 

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald

설정이 완료되면 재부팅해도 로그가 유지됩니다.

 

마무리..

journalctl은 systemd 기반 시스템의 표준 로그 분석 도구입니다.

로그에는 다양한 메타데이터가 포함되어 있어 필터링과 분석이 편리합니다.

실시간 모니터링부터 특정 기반, 서비스, 우선순위까지 정밀한 로그 조회가 가능합니다.

로그를 영구 저장하도록 설정하면, 재부팅 후에도 문제 추적이 쉬워집니다.

+ Recent posts