서버에 문제가 생겼을 때 가장 먼저 찾게 되는 것이 로그 파일입니다. 하지만 수십만 줄에 달하는 액세스 로그를 처음 열었을 때 어디서부터 시작해야 할지 막막한 경우가 많습니다. 이 글은 로그 분석을 처음 시작하는 분들을 위해 무엇을, 어떤 순서로 봐야 하는지 정리한 입문 가이드입니다.
| 웹 서버 | 기본 로그 경로 | |
|---|---|---|
| -------- | -------------- | |
| Nginx | /var/log/nginx/access.log | |
| Apache | /var/log/apache2/access.log (Ubuntu) | |
| Apache | /var/log/httpd/access_log (CentOS) | |
| 필드 | 값 | 의미 |
| ------ | ---- | ------ |
$remote_addr | 203.0.113.42 | 요청한 클라이언트 IP |
$time_local | 10/May/2024:03:21:05 | 요청 수신 시각 |
$request | GET /index.html HTTP/1.1 | HTTP 메서드 + 경로 + 버전 |
$status | 200 | 응답 상태 코드 |
$body_bytes_sent | 1234 | 응답 본문 크기(바이트) |
$http_user_agent | Mozilla/5.0 | 브라우저/클라이언트 식별 문자열 |
| 코드 범위 | 의미 | 예시 |
| ---------- | ------ | ------ |
| 2xx | 성공 | 200 OK, 201 Created |
| 3xx | 리다이렉트 | 301 Moved, 302 Found |
| 4xx | 클라이언트 오류 | 404 Not Found, 403 Forbidden |
| 5xx | 서버 오류 | 500 Internal Error, 503 Unavailable |
`bash wc -l /var/log/nginx/access.log `
`bash awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn `
출력 예시:
` 98432 200 3211 404 892 301 412 403 87 500 `
`bash awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 `
`bash awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 `
`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 `
`bash grep '10/May/2024:03:21' /var/log/nginx/access.log \ | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 `
`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 → 비정상 경로 순서로 보는 것입니다. 수십만 줄의 로그도 결국 이 세 가지 기준으로 걸러내면 이상 징후를 빠르게 파악할 수 있습니다.