统计 Nginx 流量通常可以从 访问日志、状态模块、实时流量、系统层面 等多个角度来做。下面按常用程度给你一个完整说明。
Nginx 默认日志在:
access_log /var/log/nginx/access.log;
常见日志格式:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
其中:
$body_bytes_sent:返回给客户端的响应体大小(字节)awk '{sum+=$10} END {print sum}' /var/log/nginx/access.log
$10对应$body_bytes_sent,如你日志格式不同需调整
转换为 MB:
awk '{sum+=$10} END {print sum/1024/1024 " MB"}' /var/log/nginx/access.log
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f1 | uniq -c
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f1,2 | uniq -c
awk '{url=$7; size=$10; sum[url]+=size} END {for (u in sum) print sum[u], u}' \
/var/log/nginx/access.log | sort -nr | head
awk '{ip=$1; size=$10; sum[ip]+=size} END {for (i in sum) print sum[i], i}' \
/var/log/nginx/access.log | sort -nr | head
nginx-module-vts(推荐,专业 ✅)vhost_traffic_status_zone;
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format json;
}
访问:
http://your_ip/status
返回:
✅ 适合生产环境、监控、告警
tail -f /var/log/nginx/access.log
pv -a /var/log/nginx/access.log
iftop -i eth0
nload
sar -n DEV 1 10
常见方案:
nginx-vts-exporter
↓
Prometheus
↓
Grafana
可统计:
| 需求 | 方法 |
|---|---|
| 总流量 | access_log + awk |
| 按天/小时 | 日志时间字段 |
| 谁在刷流量 | 按 IP 统计 |
| 实时流量 | iftop / nginx status |
| 生产监控 | nginx-vts + Prometheus |
✅ 临时统计 → access_log
✅ 实时排查 → iftop / tail
✅ 生产环境 → nginx-vts + Grafana
如果你愿意,可以告诉我:
我可以给你一套完全可复制的方案。