linux

nginx日志监控:如何实时发现异常流量

小樊
37
2025-11-05 13:36:35
栏目: 编程语言

1. 定义异常流量核心指标

实时发现异常流量的前提是明确关键判断维度,常见的异常指标包括:

2. 实时日志分析与异常检测方法

(1)Shell脚本实时扫描(轻量级方案)

通过grepawk等命令快速提取日志中的关键信息,判断是否超过阈值。例如:

LOG_FILE="/var/log/nginx/access.log"
TIME_WINDOW=$(date --date='1 minute ago' "+%d/%b/%Y:%H:%M")
THRESHOLD=200
grep "$TIME_WINDOW" $LOG_FILE | awk '{print $1}' | sort | uniq -c | sort -nr | while read COUNT IP; do
    if [ $COUNT -gt $THRESHOLD ]; then
        echo "$(date) - 异常IP: $IP (请求数: $COUNT)" >> /var/log/nginx/ban.log
        # 可扩展:调用iptables封禁IP或发送告警
    fi
done

优化方向:添加白名单(避免误封CDN、办公IP)、自动解封机制(如封禁1小时后自动移除)。

(2)专业日志分析工具(可视化+智能检测)

3. 结合Nginx内置模块限制异常流量

通过Nginx的限流模块提前拦截异常请求,避免影响正常服务:

http {
    # 定义限流共享内存区
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

    server {
        location / {
            # 限流配置:峰值20r/s,允许突发5个请求
            limit_req zone=req_limit burst=20 nodelay;
            limit_req_log_level warn;
            # 并发连接数限制
            limit_conn conn_limit 5;
        }
    }
}

4. 自动化告警与响应

当检测到异常流量时,及时通知运维人员并采取措施:

5. 关键注意事项

0
看了该问题的人还看了