在 linux 中监控 nginx 缓存失效后的回源请求流量,核心做法是配置 nginx 的 log_format 以记录缓存状态变量 $upstream_cache_status,并通过日志分析工具(如 awk、grep 或 elk)筛选出状态为 miss 的请求。当缓存未命中时,nginx 会向后端服务器发起回源请求,此时 $upstream_cache_status 的值通常为 miss。通过统计这些 miss 记录的频率和来源 ip,即可量化回源流量。

Nginx 如何配置日志格式以捕获缓存状态
要获取缓存状态,必须在 Nginx 配置文件(通常是 nginx.conf 或站点配置)中定义包含 $upstream_cache_status 变量的日志格式。默认日志格式不包含此字段,因此需要自定义。配置完成后,Nginx 会在每次处理请求时,根据缓存是否命中、是否过期或是否被主动清除来更新该变量的值。对于回源请求,该值为 MISS;若命中则为 HIT;若因强制刷新等策略导致失效后重新获取,也为 MISS。正确配置日志格式是监控的基础。

server {
listen 80;
server_name example.com;
# 定义包含缓存状态的日志格式
log_format cache_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'cache_status=$upstream_cache_status';
access_log /var/log/nginx/cache_access.log cache_log;
location / {
proxy_pass http://backend;
# 启用缓存
proxy_cache my_cache;
# 设置缓存键
proxy_cache_key $scheme$request_method$host$request_uri;
}
}
上述配置将日志输出到 /var/log/nginx/cache_access.log,每行末尾附加 cache_status=MISS 或 cache_status=HIT。重启 Nginx 后,新的访问日志将包含所需信息。可通过 tail -f /var/log/nginx/cache_access.log 实时观察。
如何使用命令行工具统计回源流量
配置好日志后,可使用 Linux 命令行工具对日志文件进行统计分析。最常用的方法是结合 grep 和 awk 提取状态为 MISS 的行,并进一步统计请求数量、带宽或来源 IP。例如,统计过去一小时内所有回源请求的数量,可以使用 awk 解析时间戳和状态字段。这种方法无需额外安装软件,适合快速排查和实时监控。

MISS











