4、缓存命中率指标:关键指标定义与采集方式

缓存命中率是衡量 Envoy 灾备缓存效果的核心观测指标。只有准确理解 Cache Hit Ratio、Byte Hit Ratio、Miss Rate 三者的定义与差异,并掌握 Stats 和 Access Logs 两种采集方式,才能在日常巡检中快速定位缓存失效根因,避免误判。

4.1 关键指标定义

Envoy 的缓存指标基于 HTTP 缓存过滤器(envoy.filters.http.cache)计算,以下三个指标构成缓存效率评估的黄金三角:

指标名称 英文全称 计算公式 核心含义
缓存命中率 Cache Hit Ratio Cache Hits / (Cache Hits + Cache Misses) 请求级别的命中比例,反映缓存对请求量的削减效果
字节命中率 Byte Hit Ratio Cache Bytes Served / Total Bytes Served 流量级别的命中比例,反映缓存对带宽的节省效果
缺失率 Miss Rate Cache Misses / (Cache Hits + Cache Misses) 请求未命中缓存的占比,与命中率互补(Miss Rate = 1 - Hit Ratio)
巡检要点: 灾备场景下,Byte Hit Ratio 比 Cache Hit Ratio 更具业务价值。因为灾备缓存的核心目标是减少从源站回源的流量消耗,而字节命中率直接度量了带宽节省效果。若 Byte Hit Ratio 低于 60%,即使 Cache Hit Ratio 很高,也需要检查缓存对象大小分布是否合理。
缓存命中率核心指标关系图 缓存命中率核心指标关系图 Cache Hit Ratio 请求命中率 Byte Hit Ratio 字节命中率 Miss Rate 缺失率 互补关系:Miss Rate = 1 - Cache Hit Ratio 灾备场景优先关注 Byte Hit Ratio,直接度量带宽节省效果 请求量削减效果 Cache Hit Ratio 衡量 带宽节省效果 Byte Hit Ratio 衡量 缓存失效比例 Miss Rate 衡量

4.2 指标采集方式

Envoy 提供两种互补的采集路径:Stats(统计计数器) 用于实时监控与告警,Access Logs(访问日志) 用于离线分析与根因定位。生产环境建议同时启用。

4.2.1 Stats 采集

Envoy 的 HTTP 缓存过滤器会暴露一组以 http.cache. 为前缀的统计计数器。通过 Admin 接口或 Prometheus 端点即可拉取。

# 通过 Admin 接口查看缓存统计
curl -s http://localhost:9901/stats | grep "http.cache"

# 输出示例
http.cache.cache_hit: 45231
http.cache.cache_miss: 12890
http.cache.cache_bypass: 3402
http.cache.cache_total: 61523
http.cache.bytes_served_from_cache: 2147483648
http.cache.bytes_served_total: 4294967296

基于上述计数器,可实时计算三个关键指标:

指标 计算方式 PromQL 示例
Cache Hit Ratio cache_hit / cache_total envoy_http_cache_cache_hit / envoy_http_cache_cache_total
Byte Hit Ratio bytes_served_from_cache / bytes_served_total envoy_http_cache_bytes_served_from_cache / envoy_http_cache_bytes_served_total
Miss Rate cache_miss / cache_total envoy_http_cache_cache_miss / envoy_http_cache_cache_total
Stats 采集优势: 毫秒级实时性,适合配置告警阈值(如 Byte Hit Ratio 低于 50% 触发 P1 告警)。但无法区分具体哪个 URI 或哪个上游导致的缓存未命中,需要 Access Logs 补充。

4.2.2 Access Logs 采集

在 Envoy 的访问日志格式中,通过 动态元数据 字段 %DYNAMIC_METADATA(envoy.filters.http.cache:cache_hit)% 可以获取每次请求的缓存命中状态。推荐使用 JSON 格式日志,便于结构化分析。

# 访问日志配置片段(JSON 格式)
access_log:
  - name: envoy.access_loggers.file
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
      path: /var/log/envoy/access.log
      log_format:
        json_format:
          request_time: "%START_TIME%"
          method: "%REQ(:METHOD)%"
          path: "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%"
          response_code: "%RESPONSE_CODE%"
          cache_hit: "%DYNAMIC_METADATA(envoy.filters.http.cache:cache_hit)%"
          cache_bytes: "%DYNAMIC_METADATA(envoy.filters.http.cache:cache_bytes)%"
          upstream_cluster: "%UPSTREAM_CLUSTER%"
          response_size: "%RESPONSE_DURATION%"

日志输出示例:

{"request_time":"2025-03-21T10:15:30.123Z","method":"GET","path":"/api/v1/products","response_code":200,"cache_hit":true,"cache_bytes":4096,"upstream_cluster":"product-svc","response_size":4096}
{"request_time":"2025-03-21T10:15:31.456Z","method":"GET","path":"/api/v1/orders","response_code":200,"cache_hit":false,"cache_bytes":0,"upstream_cluster":"order-svc","response_size":15360}

通过日志分析工具(如 ELK、Loki)可计算:

  • 按 URI 维度 统计 Cache Hit Ratio,定位哪些路径缓存效率低。
  • 按上游集群维度 统计 Byte Hit Ratio,识别回源流量最大的上游。
  • 按时间窗口 分析 Miss Rate 的波动趋势,判断是否与缓存过期策略有关。
Envoy 缓存指标采集架构 Envoy 缓存指标采集架构 Envoy Proxy HTTP Cache Filter Stats 计数器 实时 / 毫秒级 Prometheus / Admin 告警 & 仪表盘 Access Logs 离线 / 结构化 ELK / Loki 根因分析 & 报表 生产环境建议同时启用 Stats 用于实时告警,Access Logs 用于离线分析

4.3 采集方式对比与选型建议

对比维度 Stats 采集 Access Logs 采集
实时性 毫秒级,适合告警 秒级到分钟级(取决于日志采集管道)
维度粒度 全局聚合,无法区分 URI/上游 单请求级别,可按任意字段分组
存储开销 极低(计数器,约 100 字节/指标) 较高(每条日志约 200-500 字节)
典型用途 实时仪表盘、告警阈值 根因分析、容量规划、报表
灾备场景推荐 必须启用,配置 Byte Hit Ratio 告警 建议启用,用于分析回源流量构成
避坑提示: 不要只依赖 Stats 的 Cache Hit Ratio 做决策。某次灾备演练中,Cache Hit Ratio 高达 92%,但 Byte Hit Ratio 仅 35%,原因是大量小文件命中缓存,而大文件(图片、视频)全部未命中。只有结合 Access Logs 按响应大小分组分析,才能发现缓存策略的配置缺陷。

4.4 本章小结

  • 三个核心指标:Cache Hit Ratio(请求命中率)、Byte Hit Ratio(字节命中率)、Miss Rate(缺失率),灾备场景优先关注 Byte Hit Ratio。
  • 两种采集方式:Stats 提供实时聚合数据,适合告警;Access Logs 提供单请求维度数据,适合根因分析。
  • 生产最佳实践:同时启用两种方式,Stats 配置 Byte Hit Ratio 告警阈值(建议 60%),Access Logs 按 URI 和上游集群维度定期巡检。