개요
시스템의 상태를 진단하고 문제를 해결하는 데 가장 먼저 확인하는 것이 "로그(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 기반 시스템의 표준 로그 분석 도구입니다.
로그에는 다양한 메타데이터가 포함되어 있어 필터링과 분석이 편리합니다.
실시간 모니터링부터 특정 기반, 서비스, 우선순위까지 정밀한 로그 조회가 가능합니다.
로그를 영구 저장하도록 설정하면, 재부팅 후에도 문제 추적이 쉬워집니다.
'linux' 카테고리의 다른 글
| crontab 실습 - 자동화 예제로 익히기 (1) | 2025.05.20 |
|---|---|
| crontab으로 작업 자동화 하기 - 개념과 기본 문법 (0) | 2025.05.20 |
| systemd와 systemctl을 활용한 서비스 관리 (0) | 2025.05.14 |
| 리눅스에서 자주 사용하는 명령어 & 문법 정리 -2 (2) | 2025.05.08 |
| 리눅스에서 자주 사용하는 명령어 & 문법 정리 -1 (0) | 2025.05.08 |