Aller au contenu principal

48. Locate and Analyze System Log Files


로깅 기본 사항​

Linux 커널과 다양한 애플리케이션이 생성하는 상태 메시지, 오류, 경고는 로그 파일에 저장됩니다. rsyslog(Rocket Fast System for Log Processing)가 주요 로깅 데몬으로, 기본적으로 /var/log에 파일을 저장합니다.

/var/log의 대부분의 로그 파일은 root 사용자로 제한됩니다. 비root 사용자는 su --login 또는 sudo --login으로 전환하여 제한된 로그를 확인합니다.

특정 로그 파일 찾기​

모든 로그 파일에서 SSH 로그 검색:

grep -r 'ssh' /var/log/
  • /var/log/auth.log: SSH 로그 및 인증 관련 이벤트
  • /var/log/syslog: 일반 시스템 메시지 및 서비스 작업

오래된 로그 파일은 .1 접미사 또는 .gz로 압축되어 있으며, 최신 항목은 압축되지 않은 파일에 있습니다.

--text 플래그 (-a) — 바이너리 파일 처리​

sudo grep -r 'reboot' /var/log/          # 바이너리 파일 건너뜀
sudo grep -r --text 'reboot' /var/log/ # 바이너리 파일도 텍스트로 처리

/var/log/에는 일반 텍스트 파일뿐만 아니라 바이너리 파일도 존재합니다:

파일형식
wtmp바이너리 — 로그인/재부팅 기록
btmp바이너리 — 실패한 로그인 기록
lastlog바이너리 — 사용자별 마지막 로그인

기본 grep은 바이너리 파일을 만나면 내용을 출력하지 않고 아래처럼 표시합니다:

Binary file /var/log/wtmp matches

--text(-a)를 추가하면 바이너리 파일을 텍스트처럼 읽어 실제 매칭된 줄을 출력합니다. 단, 바이너리 데이터가 섞여 출력이 깨져 보일 수 있습니다.

wtmp, btmp, lastlog는 바이너리 포맷이므로 grep --text보다 last, lastb, lastlog 명령어로 읽는 것이 더 정확합니다.

실시간 로그 모니터링​

tail 명령어에 -F 옵션으로 로그 파일 업데이트를 팔로우합니다:

tail -F /var/log/auth.log

grep과 결합하여 특정 항목 필터링:

tail -F /var/log/auth.log | grep "sudo"

팔로우 모드 종료: Ctrl+C

journalctl을 사용한 고급 로그 분석​

systemd 기반 Linux 시스템은 구조화된 로그 관리를 위해 journalctl을 사용합니다.

명령어설명
journalctl /usr/bin/sudo특정 명령어 로그 확인
journalctl -f실시간 로그 팔로우
journalctl -p err우선순위별 필터링 (emerg, alert, crit, err, warning, notice, info, debug)
journalctl -S 01:00 -U 02:00시간 범위로 필터링 (-S = since, -U = until)
journalctl -b 0현재 부팅 로그 확인
sudo journalctl --unit=ssh.service

시간 범위 필터링 (-S / -U)​

-S (--since)와 -U (--until) 플래그로 특정 시간 범위의 로그만 조회합니다.

형식예시
HH:MM01:00 — 오늘 오전 1시
YYYY-MM-DD2024-03-15 — 특정 날짜
YYYY-MM-DD HH:MM:SS"2024-03-15 08:00:00" — 날짜+시간
상대 표현"1 hour ago", "2 days ago", yesterday
# 오늘 01:00 ~ 02:00 사이 로그
journalctl -S 01:00 -U 02:00

# 특정 날짜 이후 전체 로그
journalctl -S 2024-03-15

# 1시간 전부터 지금까지
journalctl -S "1 hour ago"

# -p와 조합: 어제부터 지금까지 err 이상 로그
journalctl -S yesterday -p err
-U 생략 시 현재 시각까지 조회됩니다.

로그 우선순위 레벨 (Priority Levels)​

-p 옵션으로 지정하는 우선순위 레벨은 심각도 낮은 것도 포함합니다 — 즉, 지정한 레벨 이상(더 심각한) 의 로그를 모두 표시합니다.

레벨번호설명예시
info6🔵 정보 — 정상 동작 중 발생하는 일반적인 알림. 오류 아님서비스 시작/종료, 사용자 로그인 성공
warning4🟡 경고 — 즉각적인 오류는 아니지만 주의가 필요한 상황. 방치하면 문제가 될 수 있음디스크 사용량 높음, 설정 값 비권장 사용
err3🔴 오류 — 특정 작업이 실패했지만 시스템 전체는 계속 동작서비스 시작 실패, 파일 읽기 오류
crit2🚨 치명적 — 심각한 장애. 시스템 또는 주요 구성 요소가 위험한 상태커널 패닉 직전 상태, 하드웨어 오류
# info 이상 모든 로그 (info, notice, warning, err, crit, alert, emerg)
journalctl -p info

# warning 이상만 (warning, err, crit, alert, emerg)
journalctl -p warning

# 오류 이상만
journalctl -p err

# 치명적 오류 이상만
journalctl -p crit
전체 우선순위 순서 (낮은 번호 = 더 심각)

emerg(0) → alert(1) → crit(2) → err(3) → warning(4) → notice(5) → info(6) → debug(7)

영구 로깅 활성화:

sudo mkdir /var/log/journal/

사용자 로그인 기록 확인​

최근 로그인을 역순으로 표시:

last

각 사용자의 마지막 로그인 시간 요약 (원격 로그인의 경우 IP 주소 포함):

lastlog