← 전체 글로 돌아가기

서버 운영

도메인 로그가 갑자기 많아졌을 때 원인 찾기

운영 중에 액세스 로그가 갑자기 급증하면 먼저 정상인지 이상인지 판단하는 방법.

서버를 운영하다 보면 어느 날 갑자기 로그가 폭증하는 일이 생긴다. 이게 정상적인 트래픽 증가인지, 아니면 문제인지 빠르게 판단해야 한다.

먼저 로그 크기를 확인한다

ls -lh /var/log/nginx/access.log

하루에 몇 GB가 쌓이는지 본다. 통상적으로 기대하는 크기보다 크다면 문제일 수 있다.

로그에서 요청 패턴을 본다

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

이 명령으로 가장 많은 요청을 보낸 IP를 본다. 특정 IP에서 비정상적으로 많은 요청이 들어오나?

어떤 경로로 요청이 들어오는지 본다

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

$7은 요청 경로다. 특정 경로로만 요청이 집중됐나?

응답 코드를 본다

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

$9는 HTTP 응답 코드다. 404나 500 에러가 많지는 않나?

User-Agent를 확인한다

tail -10000 /var/log/nginx/access.log | grep -oP 'User-Agent: \K[^"]+' | sort | uniq -c | sort -rn | head -10

봇이나 크롤러에서 요청이 들어오는 건 아닌지 본다.

DDoS인지 판단한다

특정 IP에서 초당 수백 개의 요청이 들어온다면 DDoS 공격일 수 있다.

grep '특정IP' /var/log/nginx/access.log | wc -l

한 시간에 그 IP가 몇 번 요청했는지 본다.

특정 경로로의 스캔인지 확인한다

보안 취약점을 찾는 자동 스캔이 있을 수 있다.

tail -10000 /var/log/nginx/access.log | grep -E '(admin|wp-admin|shell.php|config.php)'

이런 경로로의 요청이 있다면 자동 스캔일 가능성이 높다.

웹 크롤러를 차단한다

Google, Bing, ChatGPT 크롤러 같은 봇이 갑자기 많이 들어올 수 있다. robots.txt를 확인한다.

User-agent: *
Disallow: /admin
Disallow: /private

Crawl-delay를 추가해서 크롤러 속도를 제한할 수도 있다.

트래픽 급증이 정상이면 prepare한다

정말로 트래픽이 증가했다면, 서버 리소스를 모니터링한다.

watch -n 1 'top -b -n 1 | head -20'

CPU, 메모리, 디스크 I/O를 본다. 한계에 가까우면 서버를 늘려야 한다.

로그 로테이션을 확인한다

logrotate 설정이 제대로 되어있는지 확인한다.

cat /etc/logrotate.d/nginx

로그가 너무 자주 로테이트되거나 안 되고 있지는 않은지 본다.

결론

로그 급증은 정상적인 트래픽 증가, 자동 스캔, 또는 DDoS 중 하나다. IP, 경로, 응답 코드를 순서대로 확인하면 원인을 빠르게 찾을 수 있다.