构建nginx缓存与后端存储链路监控需打通缓存行为、存储状态、上游健康三段数据,聚焦命中率、失效类型、回源压力、上游响应、磁盘io等核心指标,结合nginx-vts-exporter采集、日志/响应头增强可观测性,并建立协同告警规则。

构建 Nginx 缓存与后端存储的链路监控,核心是打通“缓存行为—存储状态—上游健康”三段数据,让缓存是否生效、为何失效、是否拖累后端,一目了然。不能只看 Nginx 是否返回 200,而要确认它返回的是新鲜内容、过期内容,还是被迫回源后才拿到的内容。
抓准关键监控维度
链路监控不是堆指标,而是聚焦影响用户体验和系统稳定性的几个硬核信号:
- 缓存有效性指标:命中率(hit ratio)、失效类型分布(expired / stale / updating / miss)、bypass 次数(如被 $arg_nocache 或 X-No-Cache 绕过)
- 回源行为指标:proxy_cache_lock 触发频次(反映穿透压力)、proxy_cache_use_stale 生效次数(如 timeout 或 error 场景下是否成功降级)
- 后端联动指标:上游响应时间(upstream_response_time)、失败重试次数(proxy_next_upstream 对应的 error/timeout/502-504)、健康检查剔除节点数
- 存储层可观测性:缓存目录磁盘使用率、inode 使用率、cache manager 进程运行状态(避免清理卡住)、SSD IO 延迟(尤其在 proxy_cache_path 挂载 NVMe 盘时)
用 nginx-vts-exporter 实现标准化采集
推荐采用 nginx-vts-exporter 作为数据管道,它能将 Nginx VTS 模块的原生 JSON 状态(/status/format/json)实时转为 Prometheus 格式,天然支持缓存维度拆解:
- 缓存命中类指标如
nginx_cache_hits_total{zone="my_cache"}、nginx_cache_misses_total可直接聚合计算 hit ratio - 上游指标如
nginx_upstream_response_time_seconds{upstream="backend_api"}与缓存 miss 时间对齐,可判断“是缓存没建好,还是后端本身就慢” - 配合 Grafana 面板,按分钟级绘制「miss rate + upstream 5xx rate + cache size trend」三线图,异常点一眼定位
补全日志与响应头中的上下文
指标只能告诉你“发生了什么”,日志和响应头才能解释“为什么”:
- 在 access_log 中加入缓存状态字段:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$upstream_addr" "$upstream_response_time" "$cache_status"';,其中$cache_status会输出 HIT / MISS / EXPIRED / STALE / BYPASS 等值 - 对关键接口,在响应头中透出调试信息:
add_header X-Cache "$cache_status"; add_header X-Cache-Age "$upstream_http_age";,前端或测试工具可直接读取,辅助问题复现 - error_log 中开启
debug级别(仅限排查期),可看到 cache key 计算过程、lock wait、manager 清理动作等细节
建立缓存-后端协同告警规则
告警要反映真实业务风险,而非孤立阈值:
- 缓存命中率连续 5 分钟低于 85%,且同期 upstream 5xx 错误率 > 0.5% → 判定为“缓存未兜住,后端已承压”,触发 P1 告警
- proxy_cache_lock 触发率每秒超 10 次,持续 3 分钟 → 存在缓存击穿风险,需检查 key 设计或是否缺失 lock
- cache manager process status 异常(如长时间不更新
cache manager process is not running)→ 磁盘可能满或进程僵死,立即告警并自动清理脚本介入











