리눅스·서버 학습

grep, awk로 서버 로그 빠르게 분석하기

nginx 접속 로그에서 많이 호출한 IP, 오류 비율, 느린 요청을 찾는 명령을 모았습니다.

장애 때는 무거운 도구를 켜기 전에 서버에서 바로 쓸 수 있는 명령이 빠릅니다. 아래는 nginx 기본 combined 로그 형식 기준입니다.

많이 요청한 IP 상위 10개

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

상태 코드별 개수

awk '{print $9}' access.log | sort | uniq -c | sort -rn

5xx 오류가 난 경로

awk '$9 ~ /^5/ {print $7}' access.log | sort | uniq -c | sort -rn | head

시간대별 요청 수

awk '{print substr($4, 2, 14)}' access.log | sort | uniq -c

결과가 시와 분까지 묶여 나오므로 언제 트래픽이 튀었는지 바로 보입니다.

grep 활용

# 대소문자 무시, 앞뒤 3줄 함께
grep -i -C3 "timeout" app.log

# 압축된 로그까지 검색
zgrep "error" /var/log/nginx/access.log.*.gz

# 실시간으로 오류만 보기
tail -f app.log | grep --line-buffered ERROR

정규식이 맞는지 먼저 확인

복잡한 패턴은 실제 로그 몇 줄로 먼저 시험하면 시간을 아낍니다. 다만 grep은 기본 정규식을 쓰므로 +, ?, |, 괄호를 쓰려면 grep -E가 필요합니다.

systemd 서비스 로그

journalctl -u nginx -p err --since today

정규식 테스트