← 전체 목록
서버백업운영

Nginx access.log 분석으로 서버 트래픽 이상 징후를 빠르게 탐지합니다

ℹ️ 본 글은 정보 제공 목적이며, 광고·제휴 링크가 포함될 수 있습니다.

서버 트래픽 이상 징후 탐지 방법을 익히게 된 건 새벽 3시에 서버 CPU가 80%를 넘는다는 알림이 울렸고, access.log를 보니 동일 IP에서 1분에 500건 이상 요청이 들어오고 있었을 때입니다. 패턴을 보니 /wp-login.php/wp-admin/에 집중된 로그인 시도였습니다. fail2ban으로 해당 IP를 차단하고 5분 만에 정상화됐습니다.

실시간 트래픽 확인

# 실시간 접속 로그 확인
sudo tail -f /var/log/nginx/access.log

# 현재 초당 요청 수
sudo tail -f /var/log/nginx/access.log | pv -l -r > /dev/null

# 최근 1분간 요청 수
sudo awk '{print $4}' /var/log/nginx/access.log | grep "$(date +'%d/%b/%Y:%H:%M')" | wc -l

비정상 IP 탐지

# 요청이 많은 IP 상위 20개
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

# 특정 URL에 집중된 요청
sudo grep "wp-login.php" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

# 404 에러가 많은 IP (스캐너 징후)
sudo awk '$9==404 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# User-Agent 분석 (봇 식별)
sudo awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

비정상 IP 즉시 차단

# UFW로 단일 IP 차단
sudo ufw deny from 1.2.3.4 to any

# IP 대역 차단
sudo ufw deny from 1.2.3.0/24 to any

# fail2ban으로 자동 차단 (임시)
sudo fail2ban-client set nginx-http-auth banip 1.2.3.4

# 차단 목록 확인
sudo ufw status numbered
sudo fail2ban-client status nginx-http-auth

이상 트래픽은 패턴이 명확합니다: 동일 IP의 반복 요청, 짧은 시간 내 대량 404, 비정상 User-Agent(Python-requests, curl, 빈 문자열 등). access.log를 주 1회라도 훑어보는 습관이 이상 징후를 초기에 잡아냅니다.

편집 정책

AI가 초안을 생성하고, 의료기관 인프라 운영자가 1차 데이터 기반으로 최종 검수·승인합니다.

작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)