Nginx 本身不提供全局流量监控,但可通过 stub_status 模块暴露运行指标、统一 access_log 配置采集全站日志,并结合 Prometheus/Grafana 或 GoAccess 等外部工具实现可观测性。

在 Nginx 中,nginx.conf 本身不直接提供“全局流量监控”功能,但可以通过内置模块(如 ngx_http_stub_status_module)和日志机制,配合外部工具(如 Prometheus、Grafana、GoAccess),实现对全站请求量、响应状态、带宽等关键指标的可观测性。核心思路是:暴露基础运行指标 + 标准化访问日志 + 集成分析工具。
启用 stub_status 模块获取实时连接与请求统计
该模块默认编译进大多数 Nginx 发行版,可输出当前活跃连接数、已接受/处理/请求总数等轻量级运行时指标。
- 确认模块已启用:
nginx -V 2>&1 | grep -o with-http_stub_status-module,若无输出需重新编译或换发行版(如 nginx-full) - 在
nginx.conf的http或server块中添加:
location /nginx-status {
stub_status on;
access_log off;
allow 127.0.0.1; # 仅允许本地或可信 IP 访问
deny all;
}重启后访问 http://your-domain/nginx-status 可得类似输出:
Active connections: 12<br> server accepts handled requests<br> 15248 15248 28656<br> Reading: 0 Writing: 3 Waiting: 9
统一配置 access_log 实现全站流量日志采集
所有 server 和 location 块若未显式关闭日志,都会继承 http 级别的 access_log 指令——这是实现“全局”日志采集的关键。
- 在
http块顶部定义主日志格式与路径:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';
<p>access_log /var/log/nginx/access.log main;- 如需排除健康检查或静态资源日志,可在对应
location中设access_log off; - 建议开启日志缓冲和异步写入提升性能:
access_log /path/log main buffer=64k flush=1s;
结合 log_format 扩展字段支持深度分析
标准日志已包含基础流量维度(IP、状态码、大小、耗时),但可通过变量增强监控粒度:
- 标记上游服务:
$upstream_addr查看真实后端地址 - 区分缓存行为:
$upstream_cache_status(如 HIT/MISS/EXPIRED) - 记录请求体大小:
$request_length辅助识别大上传 - 添加自定义 Header(如 trace-id):
$http_x_request_id支持链路追踪
示例增强格式:
log_format extended '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'$request_time $upstream_response_time '
'$upstream_cache_status "$http_user_agent" '
'$http_x_request_id;对接外部监控系统完成可视化与告警
Nginx 自身不存储历史数据或绘图,需将日志或 status 接口接入专业工具:
-
Prometheus + nginx-vts-exporter:通过 exporter 抓取 stub_status 并转为 Prometheus 指标(如
nginx_connections_active),适合 SRE 场景 - ELK / Loki + Grafana:用 Filebeat 或 Promtail 收集 access.log,按状态码、URL、地域聚合,构建 QPS、错误率、Top URL 看板
-
GoAccess(命令行):单机快速分析日志:
goaccess /var/log/nginx/access.log -c,适合临时排查
注意:生产环境避免直接暴露 /nginx-status 给公网;日志路径需确保 Nginx 进程有写权限;高频日志建议启用 gzip 压缩归档。


















