← 블로그 목록
작성일: 2026-06-05 실시간tailmonitoring

실시간 로그 모니터링: tail -f와 grep을 활용한 현장 대응

서비스 장애나 공격이 발생할 때, 과거 로그 분석보다 실시간 모니터링이 더 중요합니다. tail, grep, awk를 조합하여 실시간으로 이상 징후를 포착하는 방법을 알아봅니다.


tail -f 기본

tail -f /var/log/nginx/access.log

새 라인이 추가될 때마다 실시간 출력

여러 파일 동시 모니터링

tail -f /var/log/nginx/access.log /var/log/nginx/error.log

실시간 필터링

특정 IP만 추적

tail -f /var/log/nginx/access.log | grep '192.0.2.100'

5xx 에러만 표시

tail -f /var/log/nginx/access.log | grep ' 5[0-9][0-9] '

POST 요청만 추적

tail -f /var/log/nginx/access.log | grep 'POST'

awk로 실시간 변환

IP와 요청 경로만 출력

tail -f /var/log/nginx/access.log | awk '{print $1, $7}'

응답시간 1초 이상만 표시

tail -f /var/log/nginx/access.log | awk '$NF > 1 {print}'

실시간 통계

초당 요청 수(RPS)

tail -f /var/log/nginx/access.log | awk '{count++; if(NR % 100 == 0) print count " requests in last few seconds"; count=0}'

실시간 상태 코드 집계

tail -f /var/log/nginx/access.log | awk '{codes[$9]++; for(c in codes) print c, codes[c]}'

공격 패턴 실시간 탐지

SQLi 시도 알림

tail -f /var/log/nginx/access.log | grep -iE '(union|select|insert|drop)' --color

--color: 매칭 부분 하이라이트

브루트포스 탐지

tail -f /var/log/nginx/access.log | grep -E '(wp-login|xmlrpc)' --line-buffered | awk '{print $1}' | sort | uniq -c | sort -rn

stdbuf: 버퍼링 제거

기본적으로 파이프는 버퍼링되어 실시간성이 떨어집니다.

tail -f /var/log/nginx/access.log | stdbuf -oL grep '192.0.2.100'

stdbuf -oL: 라인 버퍼링으로 즉시 출력


multitail: 고급 모니터링 도구

여러 로그를 분할 화면으로:

sudo apt install multitail
multitail /var/log/nginx/access.log /var/log/nginx/error.log

watch: 주기적 갱신

5초마다 에러 수 집계

watch -n 5 "grep -c ' 5[0-9][0-9] ' /var/log/nginx/access.log"

최근 10초간 요청 수

watch -n 1 "tail -100 /var/log/nginx/access.log | wc -l"

알림 자동화

5xx 에러 발생 시 Slack 알림

tail -f /var/log/nginx/error.log | while read line; do
  if echo "$line" | grep -q '\[error\]'; then
    curl -X POST https://hooks.slack.com/services/YOUR/WEBHOOK/URL \
      -d "{\"text\":\"Nginx Error: $line\"}"
  fi
done

특정 IP 접속 시 메일 발송

tail -f /var/log/nginx/access.log | grep '192.0.2.100' | while read line; do
  echo "$line" | mail -s "Suspicious IP detected" admin@example.com
done

GoAccess: 실시간 웹 대시보드

sudo apt install goaccess

실시간 HTML 대시보드

goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html

브라우저에서 http://yourserver/report.html 접속 → 실시간 통계


tmux: 여러 모니터링 세션

tmux new -s monitoring

Ctrl+B, % : 세로 분할 Ctrl+B, " : 가로 분할

분할된 패널마다:

# 패널 1
tail -f /var/log/nginx/access.log

# 패널 2 tail -f /var/log/nginx/error.log | grep '\[error\]'

# 패널 3 watch -n 5 "netstat -an | grep :80 | wc -l"


journalctl: systemd 로그 실시간

journalctl -u nginx -f

-f: tail -f와 동일


정리

실시간 로그 모니터링은 tail -f + grep + awk 조합이 기본입니다. 공격 패턴을 실시간으로 필터링하고, stdbuf로 버퍼링을 제거하며, GoAccess로 웹 대시보드를 만들 수 있습니다. 중요한 이벤트는 Slack/메일로 자동 알림하세요.