适用场景:基于 Nginx 访问日志排查站点访问 IP、URL 流量、爬虫消耗流量,结合系统工具定位实时网络占用,适配宝塔 Linux 环境。 ✅ 说明:以下所有命令均为本人实际线上验证调试得出,可直接复制使用 前置前提:Nginx 默认日志格式,
$1=客户端IP、$7=请求URL、$10=$body_bytes_sent(响应体字节数);若自定义日志格式,字段序号需要对应调整。
Nginx 层面排查(日志离线分析)
1. 统计访问 IP TOP20(访问频次)
统计访问量最高的前 20 个 IP,快速识别高频访问、异常 IP、爬虫来源
awk '{print $1}' /www/wwwlogs/www.qhftdx.cn.log | sort | uniq -c | sort -nr | head -20
2. 按 URL 汇总出站流量
统计每个接口 / 页面消耗的服务器出站流量,最后输出全站总出站流量
awk '{sum [$7] += $10; total += $10} END {for (url in sum) print sprintf ("%.2f MB", sum [url]/1024/1024), url; print "==== 总出站:",sprintf ("%.2f MB",total/1024/1024)}' /www/wwwlogs/[www.qhftdx.cn](https://www.qhftdx.cn).log | sort -nr
3. 统计百度蜘蛛消耗流量
筛选百度爬虫请求,统计爬虫占用的出站流量,可用于评估 SEO 爬虫带宽开销
# 优化版(固定2位小数,同时统计请求次数)
grep -i "baiduspider" /www/wwwlogs/www.qhftdx.cn.log | awk '{sum += $10;cnt++} END{printf "百度蜘蛛请求数:%d 次,总流量:%.2f MB\n", cnt, sum/1024/1024}'
拓展爬虫关键字:
Sogouspider、360Spider、ToutiaoSpider、Googlebot
操作系统层面排查(实时网络 & 连接)
适用场景:日志统计和实际带宽监控数据差异大时,实时抓网卡流量、TCP 连接 说明:
eth0为网卡名称,执行前请先确认本机真实网卡(ip a查看)
1. nethogs 按进程实时流量监控
直观看到每个进程占用的实时网络流量,适合定位哪个程序跑满带宽
# 安装
yum install -y nethogs
# 实时监控指定网卡
nethogs eth0
注意:经常出现
unknown TCP连接,属于正常现象,可配合 TCP 连接命令进一步溯源
2. 查看已建立 TCP 长连接
ESTABLISHED 代表 TCP 三次握手完成、双向数据通信中的有效连接,常用于排查连接堆积、恶意并发、长连接泄漏、nginx/php-fpm/mysql 连接爆满等问题。
# netstat 查看所有已建立TCP连接,展示进程PID和程序名(需要root执行)
netstat -antp | grep ESTABLISHED
字段说明:
tcp:协议类型- 接收队列、发送队列:非 0 代表有数据堆积阻塞
- 本地地址:端口:本机监听端口
- 外部地址:端口:客户端远端 IP 端口
ESTABLISHED:连接状态PID/Program name:对应进程 ID 和程序名,普通用户会显示-
# 统计当前ESTABLISHED总连接数量
netstat -ant | grep -c ESTABLISHED
# 统计每个进程的ESTABLISHED连接数,从高到低排序,快速定位连接大户
netstat -antp | grep ESTABLISHED | awk '{print $NF}' | sort | uniq -c | sort -nr
# 只统计nginx进程的已建立连接
netstat -antp | grep ESTABLISHED | grep nginx
新版 Linux(CentOS8+/Ubuntu)推荐 ss 工具,性能远高于 netstat,大并发服务器优先使用
# ss查看已建立TCP连接
ss -ant | grep ESTAB
# ss统计ESTAB连接总数
ss -ant | grep -c ESTAB
# ss统计各进程连接数
ss -antp | grep ESTAB | awk '{print $NF}' | sort | uniq -c | sort -nr
常见异常:大量 CLOSE_WAIT/TIME_WAIT 不属于 ESTABLISHED,一般是程序没正常释放连接,需要单独排查。
3. iftop 网卡实时流量监控
监控网卡进出流量,展示 IP 之间的流量交互,-P 参数显示端口号
# 安装
yum install -y iftop
# 实时监控指定网卡,展示端口
iftop -i eth0 -P
补充排查小贴士
- 日志字段校验:不确定字段是否匹配时,先执行
head -5 /www/wwwlogs/www.qhftdx.cn.log预览原始日志 - 权限说明:
netstat -antp查看进程名需要 root 权限,普通用户 PID 会显示- - 区分概念:
$body_bytes_sent只统计 HTTP 响应体,不包含 HTTP 头部,不等于完整 TCP 流量 - 实时 vs 离线:Nginx 日志属于离线统计(历史数据),nethogs/iftop 是实时当前流量
拓展可选命令
# 统计404请求流量
awk '$9==404 {sum[$7] += $10; cnt++} END{printf "404请求数:%d,总流量:%.2f MB\n",cnt,sum/1024/1024}' /www/wwwlogs/www.qhftdx.cn.log