nginx 不提供 brotli 压缩丢包率和网络延迟指标,仅能监控压缩是否触发、生效及收益;核心指标为 $brotli_ratio,需结合 $request_time 与系统级网络指标(如 ss、mtr、prometheus)协同分析压缩效果与网络表现关系。

Nginx 本身不提供“Brotli 压缩丢包率”或“网络延迟”指标——丢包率属于 TCP/IP 层,需由系统或网络设备采集;网络延迟(如 RTT)也非 Nginx 能直接测量。Brotli 是内容编码层行为,它只负责压缩响应体,不参与传输过程。因此,全站启用 Brotli 后,真正可监控、且与压缩强相关的指标只有:压缩是否触发、是否生效、是否带来实际收益,而所谓“丢包率”“网络延迟”需从其他层面协同观测。
Brotli 压缩生效性监控(核心落地项)
这是唯一能由 Nginx 直接、可靠反映的压缩效果指标:
- 在
http块中定义带压缩比的日志格式(以ngx_brotli模块为例):log_format brotli '$remote_addr [$time_local] "$request" ' '$status $body_bytes_sent ' 'br_ratio=$brotli_ratio ' 'orig_size=$request_length ' 'sent_size=$bytes_sent ' 'ua="$http_user_agent"'; access_log /var/log/nginx/brotli.log brotli; -
$brotli_ratio:原始响应体大小 ÷ 压缩后响应体大小(>1 表示压缩成功;=1 表示未压缩;为空表示不满足条件或模块未启用) - 示例日志行:
10.0.1.5 [20/Aug/2026:13:15:22 +0000] "GET /static/main.css HTTP/1.1" 200 18432 br_ratio=4.1 orig_size=75568 sent_size=18432
- 快速统计压缩覆盖率(最近 10,000 条日志中生效比例):
awk '$12 > 1 {c++} END {print c/NR*100 "%"}' /var/log/nginx/brotli.log | tail -n 10000
网络层延迟与丢包率需外部协同采集
这些指标不在 Nginx 职责范围内,但可与 Brotli 启用状态交叉分析:
-
端到端延迟(用户感知):用
$request_time(单位:秒,含毫秒精度),它包含网络上传、Nginx 处理、文件读取/压缩、响应下发全过程。- 若开启 Brotli 后
$request_time显著上升,需排查是否因高压缩级别(如brotli_comp_level 11)导致 CPU 过载抖动; - 建议搭配
location ~* \.(js|css|woff2|svg)$单独记录,避免与动态接口混杂。
- 若开启 Brotli 后
-
TCP 层丢包与 RTT:依赖系统级工具,非 Nginx 提供:
- 用
ss -i查看 socket 的retrans,rto,rtt字段; - 用
tcpping或mtr定期探测客户端到 Nginx 入口的路径质量; - Prometheus 可通过
node_network_*指标采集网卡丢包(node_network_transmit_packets_dropped)和重传(node_network_transmit_retrans_segs)。
- 用
-
压缩与网络表现的关联判断逻辑:
- 若
$request_time高 +$brotli_ratio高 +node_network_transmit_retrans_segs上升 → 压缩后包变小但重传增多,可能因弱网下小包更易丢失,建议降低brotli_comp_level(如设为 4–6); - 若
$request_time高 +$brotli_ratio= 1 → 压缩未触发,检查brotli_types是否漏配 MIME 类型,或brotli_min_length是否过高(默认 20 字节,太小资源被跳过)。
- 若
全站启用后的关键验证动作
-
添加响应头辅助人工验证:
add_header X-Brotli-Status $brotli_ratio; add_header X-Content-Length $content_length;
用
curl -I https://yoursite.com/app.js直查,确认X-Brotli-Status: 3.8且Content-Encoding: br同时存在。 -
对比压缩前后真实字节节省:
- 记录
$body_bytes_sent(不含响应头)与原始文件大小(可通过stat -c "%s" /path/to/file.js获取); - 节省率 =
(原始大小 − body_bytes_sent) / 原始大小 × 100%,典型 JS/CSS 节省 60%–75% 属合理范围。
- 记录
不复杂但容易忽略。











