일반 시스템 로그에는 여러 소스에서 생성된 일상적인 알림, 경고 및 오류가 함께 들어 있습니다. 조사하기 좋은 출발점이지만 파일 이름과 내용은 라우팅 정책에 따라 정해지며 모든 리눅스 시스템에 보편적으로 보장되지는 않습니다.
로깅 · 레슨 3
일반 로깅
일반적인 리눅스 시스템 로그를 찾고, 필터링하고, 추적하며, 서로 연관 짓는 방법을 알아봅니다.
관련 소스 찾기
배포판과 설정에 따라 일반 메시지는 /var/log/syslog, /var/log/messages, systemd 저널 또는 둘 이상의 대상에 나타날 수 있습니다. 먼저 호스트와 사고 발생 시간대를 파악한 다음 사용 가능한 소스를 조사합니다.
$ ls -lh /var/log
$ journalctl --since '2026-08-31 09:00' --until '2026-08-31 09:15'
애플리케이션 로그는 자체 하위 디렉터리나 외부 서비스에 있을 수 있습니다. 인증, 감사, 패키지, 데이터베이스 및 웹 서버 레코드는 일반 로그 흐름에서 의도적으로 분리될 수 있습니다.
모든 리눅스 호스트에 /var/log/messages가 있다고 가정하면 안 되는 이유는 무엇입니까?
텍스트 로그 조사하기
제어된 탐색에는 less를, 최신 레코드에는 tail을 사용합니다.
$ sudo less /var/log/syslog
$ sudo tail -n 100 /var/log/messages
제한된 재현 작업 중에는 tail -F FILE로 새로 추가되는 줄을 추적합니다. -F는 단순한 스냅샷과 달리 로테이션 중 파일이 교체되면 다시 시도합니다. Ctrl-C로 추적을 중지하고 광범위한 권한이 있는 세션을 계속 열어 두지 마십시오.
통제된 재현 작업 중 tail -F는 무엇에 유용합니까?
맥락을 잃지 않고 필터링하기
처음부터 제한 없는 실시간 스트림을 파이프로 넘기지 말고 범위가 제한된 파일이나 저널 시간대를 검색합니다.
$ grep -n -C 3 'connection refused' /var/log/example.log
$ journalctl -u example.service --since '10 minutes ago' --grep='connection refused'
대소문자, 표현, 속도 제한 및 현지화 때문에 문자 그대로의 검색은 불완전할 수 있습니다. 성공한 이벤트와 실패한 이벤트를 모두 기록하고, 원인이 눈에 보이는 오류보다 앞서 발생할 수 있으므로 주변 줄도 보존합니다.
일치하는 오류 주변의 줄을 함께 봐야 하는 이유는 무엇입니까?
로테이션 및 보관된 로그 포함하기
사고가 로그 로테이션 경계에 걸쳐 있을 수 있습니다. 활성 파일, 번호가 붙은 아카이브 및 압축 파일에는 같은 사건 순서의 서로 다른 부분이 담길 수 있습니다. zgrep과 zless 같은 도구는 gzip으로 압축된 아카이브를 읽습니다.
$ sudo zgrep -n 'connection refused' /var/log/example.log*.gz
접미사만 보지 말고 실제 타임스탬프를 기준으로 결과를 정렬하십시오. 로그에는 개인 데이터나 자격 증명이 포함될 수 있으므로 증거를 복사하기 전에 메타데이터를 보존하고 접근을 제한합니다.
사고가 로그 로테이션에 걸쳐 있을 때 무엇을 확인해야 합니까?
레슨 완료
일반 로깅 완료
이제 파일, 저널 및 로테이션 경계 전체에서 일반 로그를 조사할 수 있습니다.
보편적인 파일 이름을 가정하지 말고 대상을 찾습니다.
제한된 시간대를 읽고 재현 작업 중에만 추적합니다.
일치하는 레코드 주변의 시간적 맥락을 보존합니다.
로테이션된 아카이브를 포함하고 민감한 증거를 보호합니다.