서비스 장애나 공격이 발생할 때, 과거 로그 분석보다 실시간 모니터링이 더 중요합니다. tail, grep, awk를 조합하여 실시간으로 이상 징후를 포착하는 방법을 알아봅니다.
``bash tail -f /var/log/nginx/access.log `
새 라인이 추가될 때마다 실시간 출력
`bash tail -f /var/log/nginx/access.log /var/log/nginx/error.log `
`bash tail -f /var/log/nginx/access.log | grep '192.0.2.100' `
`bash tail -f /var/log/nginx/access.log | grep ' 5[0-9][0-9] ' `
`bash tail -f /var/log/nginx/access.log | grep 'POST' `
`bash tail -f /var/log/nginx/access.log | awk '{print $1, $7}' `
`bash tail -f /var/log/nginx/access.log | awk '$NF > 1 {print}' `
`bash tail -f /var/log/nginx/access.log | awk '{count++; if(NR % 100 == 0) print count " requests in last few seconds"; count=0}' `
`bash tail -f /var/log/nginx/access.log | awk '{codes[$9]++; for(c in codes) print c, codes[c]}' `
`bash tail -f /var/log/nginx/access.log | grep -iE '(union|select|insert|drop)' --color `
--color: 매칭 부분 하이라이트
`bash tail -f /var/log/nginx/access.log | grep -E '(wp-login|xmlrpc)' --line-buffered | awk '{print $1}' | sort | uniq -c | sort -rn `
기본적으로 파이프는 버퍼링되어 실시간성이 떨어집니다.
`bash tail -f /var/log/nginx/access.log | stdbuf -oL grep '192.0.2.100' `
stdbuf -oL: 라인 버퍼링으로 즉시 출력
여러 로그를 분할 화면으로:
`bash sudo apt install multitail multitail /var/log/nginx/access.log /var/log/nginx/error.log `
`bash watch -n 5 "grep -c ' 5[0-9][0-9] ' /var/log/nginx/access.log" `
`bash watch -n 1 "tail -100 /var/log/nginx/access.log | wc -l" `
`bash 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 `
`bash tail -f /var/log/nginx/access.log | grep '192.0.2.100' | while read line; do echo "$line" | mail -s "Suspicious IP detected" [email protected] done `
`bash sudo apt install goaccess `
`bash goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html `
브라우저에서 http://yourserver/report.html 접속 → 실시간 통계
`bash tmux new -s monitoring `
Ctrl+B, % : 세로 분할 Ctrl+B, " : 가로 분할
분할된 패널마다:
`bash 패널 1
tail -f /var/log/nginx/access.log
journalctl: systemd 로그 실시간
`bash journalctl -u nginx -f `
-f: tail -f와 동일
정리
실시간 로그 모니터링은
tail -f + grep + awk` 조합이 기본입니다. 공격 패턴을 실시간으로 필터링하고, stdbuf로 버퍼링을 제거하며, GoAccess로 웹 대시보드를 만들 수 있습니다. 중요한 이벤트는 Slack/메일로 자동 알림하세요.