엔지니어에게 로그는 **’서버가 보내는 구조 신호’**와 같습니다. 9편에서 우리가 원하는 파일을 찾아냈다면, 이제는 그 파일 안에서 실시간으로 쏟아지는 메시지를 읽고 해석할 차례입니다.
수백 메가바이트가 넘는 거대 로그 파일 앞에서 당황하지 않고, 지금 당장 벌어지는 에러만 콕 집어내는 실시간 로그 모니터링 기술을 알아보겠습니다.
1. 실시간 감시의 정석: tail -f
tail은 원래 파일의 뒷부분만 보여주는 명령어입니다. 하지만 여기에 -f (follow) 옵션을 붙이면 서버의 현재 상황을 생중계로 볼 수 있는 강력한 모니터링 도구가 됩니다.
- 내가 실무에서 자주 사용하는 옵션:
tail -f access.log: 파일의 끝에 새로운 내용이 추가될 때마다 실시간으로 화면에 출력합니다.tail -100f access.log: 최근 로그 100줄을 먼저 보여준 뒤 실시간 추적을 시작합니다. (과거 상황과 현재 상황을 연결해서 볼 때 좋습니다.)tail -f access.log | grep --line-buffered "ERROR": 쏟아지는 로그 중 ‘ERROR’가 포함된 줄만 실시간으로 필터링해서 봅니다.
2. 거대 로그 파일의 안전한 쉼터: less
수백 MB, 혹은 GB 단위의 로그 파일을 vi로 열었다가 서버가 멈추는(Freezing) 참사를 겪어본 적 있으신가요? 실무 엔지니어는 절대 큰 로그 파일을 vi나 cat으로 열지 않습니다. 이때 정답은 less입니다.
- 왜
less인가?- 파일을 한꺼번에 메모리에 올리지 않고, 화면에 보이는 만큼만 읽어오기 때문에 아무리 큰 파일도 시스템 부하 없이 즉시 열립니다.
less안에서 사용하는 치트키:Shift + G: 파일의 맨 끝(가장 최근 로그)으로 이동g: 파일의 맨 처음으로 이동/검색어: 아래 방향으로 검색 (n누르면 다음 결과)F:tail -f처럼 실시간 모니터링 모드로 전환 (Ctrl + C로 해제)
3. 압축된 과거 로그 뒤지기: zgrep
리눅스 서버는 용량 관리를 위해 오래된 로그를 .gz 형태로 압축해서 보관합니다. 이걸 일일이 압축 풀고 확인하는 건 너무 비효율적이죠. 이때 **zgrep**을 쓰면 압축을 풀지 않고도 내부를 검색할 수 있습니다.
- 실무 예시
# 압축된 과거 로그 파일들 중에서 특정 IP 주소(192.168.0.1)를 포함한 기록 찾기 zgrep "192.168.0.1" access.log.2024-01-10.gz
4. [실습] 무한 루프로 가짜 로그 생성하고 추적하기
실습을 위해 1초마다 현재 시간을 찍는 가짜 로그 파일을 만들어보고, 이를 추적해 봅시다.
# 1. 1초마다 로그 메시지를 남기는 무한 루프 실행 (백그라운드)
while true; do echo "$(date) [INFO] System is running" >> practice.log; sleep 1; echo "$(date) [WARN] Something happened" >> practice.log; sleep 1; done &
# 2. 실시간 모니터링 시작
tail -f practice.log
# 3. 그중 'WARN' 메시지만 필터링해서 보기
tail -f practice.log | grep "WARN"
# 4. 실습 종료 (백그라운드 프로세스 종료)
kill $!

5. 실무 종합 세트: “로그 분석은 속도전입니다”
실제 장애 상황에서는 아래와 같은 흐름으로 대응합니다.
find로 문제가 발생한 시간대의 로그 파일을 찾는다.tail -f와grep을 조합해 실시간으로 유입되는 에러 패턴을 파악한다.- 상황이 종료되면
less를 통해 전체적인 맥락을 복기한다.
💡 엔지니어의 참견
“예전의 저는 로그를 볼 때 무조건
vi부터 켰습니다. 하지만 수 기가짜리 로그 파일 앞에서 서버가 비명을 지르는 걸 본 뒤로는less와tail을 가장 먼저 찾게 되었죠.지난 9편에서 배운
xargs가 명령어를 이어주는 배달 기사였다면, 오늘 배운tail -f와grep의 조합은 서비스 장애 시 범인을 잡는 가장 강력한 CCTV와 같습니다. 단순히 텍스트가 올라가는 걸 구경하는 게 아니라, 필터링을 통해 노이즈를 제거하고 핵심을 보는 눈을 기르는 것이 진짜 실무자의 자세라고 생각합니다.”
“이 글의 영문 버전은 [이곳]에서 확인하실 수 있습니다.”