← 블로그 목록
작성일: 2026-05-22 로그 분석Nginx입문

웹 서버 로그 분석 입문: 처음 로그를 열었을 때 봐야 할 것들

서버에 문제가 생겼을 때 가장 먼저 찾게 되는 것이 로그 파일입니다. 하지만 수십만 줄에 달하는 액세스 로그를 처음 열었을 때 어디서부터 시작해야 할지 막막한 경우가 많습니다. 이 글은 로그 분석을 처음 시작하는 분들을 위해 무엇을, 어떤 순서로 봐야 하는지 정리한 입문 가이드입니다.


로그 파일은 어디에 있나요?


Nginx 로그 한 줄 읽기

`` 203.0.113.42 - - [10/May/2024:03:21:05 +0000] "GET /index.html HTTP/1.1" 200 1234 "-" "Mozilla/5.0" `


HTTP 상태 코드 빠른 해석

웹 서버기본 로그 경로
----------------------
Nginx/var/log/nginx/access.log
Apache/var/log/apache2/access.log (Ubuntu)
Apache/var/log/httpd/access_log (CentOS)
필드의미
----------------
$remote_addr203.0.113.42요청한 클라이언트 IP
$time_local10/May/2024:03:21:05요청 수신 시각
$requestGET /index.html HTTP/1.1HTTP 메서드 + 경로 + 버전
$status200응답 상태 코드
$body_bytes_sent1234응답 본문 크기(바이트)
$http_user_agentMozilla/5.0브라우저/클라이언트 식별 문자열
코드 범위의미예시
----------------------
2xx성공200 OK, 201 Created
3xx리다이렉트301 Moved, 302 Found
4xx클라이언트 오류404 Not Found, 403 Forbidden
5xx서버 오류500 Internal Error, 503 Unavailable
5xx가 갑자기 증가하면 서버 장애, 4xx가 특정 IP에서 급증하면 스캐너나 공격 가능성이 높습니다.


로그를 처음 열었을 때 5분 안에 파악하기

1. 전체 요청 수 확인

`bash wc -l /var/log/nginx/access.log `

2. 상태 코드 분포 확인

`bash awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn `

출력 예시:

` 98432 200 3211 404 892 301 412 403 87 500 `

3. 가장 많이 접근한 IP Top 20

`bash awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 `

4. 가장 많이 요청된 경로 Top 20

`bash awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 `

5. 5xx 에러가 발생한 시간대

`bash grep ' 5[0-9][0-9] ' /var/log/nginx/access.log \ | awk '{print $4}' | cut -d: -f1-3 | sort | uniq -c `


이상 징후를 빠르게 찾는 패턴

갑자기 늘어난 트래픽

`bash awk '{print $4}' /var/log/nginx/access.log | cut -d: -f1-3 | sort | uniq -c `

한 IP에서 비정상적으로 많은 요청

`bash grep '10/May/2024:03:21' /var/log/nginx/access.log \ | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 `

존재하지 않는 경로 집중 탐색 (404 스캔)

`bash grep ' 404 ' /var/log/nginx/access.log \ | awk '{print $1}' | sort | uniq -c | sort -rn | head -10 `


주의사항

IP는 프록시/CDN일 수 있습니다

Cloudflare 등 CDN을 사용하면 모든 요청 IP가 CDN 서버 IP로 기록됩니다. 실제 클라이언트 IP는 X-Forwarded-For 헤더에 있으며, 로그에 포함하려면 Nginx 설정을 수정해야 합니다.

`nginx log_format main '$http_x_forwarded_for - $remote_user [$time_local] ...'; `

디스크 용량 확인

`bash df -h /var/log ``

디스크가 꽉 차면 Nginx가 로그 쓰기를 멈춥니다.


커맨드라인 없이 분석하기

터미널이 익숙하지 않다면 LogTrace를 사용하면 됩니다. 로그 파일을 업로드하면 위의 모든 분석을 자동으로 수행하고 결과를 시각화합니다.

  • 상태 코드 분포 차트
  • 의심 IP 자동 분류 및 요청 횟수
  • 시간대별 요청 추이
  • User-Agent 분류 (브라우저 / 봇 / 스캐너)
  • 공격 패턴 자동 탐지

정리

로그 분석의 시작은 상태 코드 분포 → 비정상 IP → 비정상 경로 순서로 보는 것입니다. 수십만 줄의 로그도 결국 이 세 가지 기준으로 걸러내면 이상 징후를 빠르게 파악할 수 있습니다.