4. 容量规划核心指标:CPU、内存、连接数、请求吞吐量、延迟百分位
Envoy Sidecar 升级过程中,容量规划的核心目标是确保新版本代理在承载生产流量时,资源消耗与服务质量均不劣化。本节定义五个必须监控与校准的核心指标,并给出每个指标的基线校准方法。
4.1 指标全景与优先级
五个指标构成容量规划的“五维模型”,缺一不可。下表列出各指标在升级场景中的关注点与优先级:
| 指标 | 升级关注点 | 优先级 | 典型异常信号 |
|---|---|---|---|
| CPU | 线程模型变化、TLS 握手开销、Lua/Wasm 过滤 | P0 | 用户态 CPU 飙升,worker 线程饥饿 |
| 内存 | 连接池膨胀、缓存命中率、堆外内存泄漏 | P0 | RSS 持续增长,OOMKilled 重启 |
| 连接数 | FD 耗尽、upstream 连接池上限、空闲连接回收 | P1 | 文件描述符耗尽,upstream_rq_pending_failure |
| 请求吞吐量 | QPS/RPS 拐点、请求合并效率、限流触发频率 | P1 | 吞吐量下降超过 5%,p99 延迟同步上升 |
| 延迟百分位 | p50/p99/p999 尾部延迟、请求排队时间 | P0 | p99 延迟翻倍,p999 出现毛刺 |
基线校准原则:升级前至少采集 7 天生产基线数据,覆盖业务高峰与低谷。升级后以“同流量场景下,五项指标均不劣于基线 5%”为通过标准。
4.2 CPU 指标与校准方法
Envoy 是事件驱动模型,CPU 消耗主要来自 worker 线程处理 I/O 事件、TLS 加解密、HTTP 头部解析和过滤器链执行。升级后 CPU 基线校准需关注三个维度:
- 用户态 CPU 使用率:通过
process_cpu_seconds_total或容器 cgroup 的cpuacct.usage采集,对比升级前后相同 QPS 下的 CPU 时间。 - worker 线程饱和度:Envoy 的
server.worker_threads指标显示每个 worker 的事件循环延迟。若升级后 worker 循环延迟增加超过 10%,说明 CPU 成为瓶颈。 - TLS 握手开销:升级 TLS 库或密码套件后,需对比
ssl.handshake耗时。建议使用envoy_ssl_handshake_time直方图。
# 典型 CPU 基线采集命令(PromQL)
# 升级前基线
avg by (pod) (rate(process_cpu_seconds_total{job="envoy-sidecar"}[5m]))
# 升级后对比
avg by (pod) (rate(process_cpu_seconds_total{job="envoy-sidecar-new"}[5m]))
4.3 内存指标与校准方法
Envoy 内存消耗分为堆内存(heap)和堆外内存(off-heap)。升级后内存基线校准重点关注:
- RSS(驻留内存):容器级别
container_memory_rss或 Envoy 的envoy_server_memory_allocated。升级后 RSS 不应超过基线的 110%。 - 连接池内存:每个 upstream 连接池会占用固定大小的缓冲区。升级后若连接池数量或大小发生变化,需对比
envoy_cluster_membership_healthy与内存增长曲线。 - 缓存与过滤器内存:如使用 Redis 缓存过滤器或 Wasm 扩展,需单独监控
envoy_wasm_memory或自定义缓存指标。
常见陷阱:Envoy 1.24+ 引入了新的内存分配器(tcmalloc 优化),升级后 RSS 可能暂时下降,但若业务流量模式变化,内存可能反弹。建议升级后持续观察 48 小时,确认无内存泄漏。
4.4 连接数指标与校准方法
连接数直接影响文件描述符(FD)消耗和 upstream 连接池健康度。升级后需校准以下连接指标:
| 指标名称 | Envoy 统计项 | 基线校准方法 |
|---|---|---|
| 活跃下游连接 | listener.downstream_cx_active |
对比升级前后相同并发下的活跃连接数,偏差应 < 5% |
| 活跃上游连接 | cluster.upstream_cx_active |
检查连接池复用率,升级后不应出现连接数暴增 |
| 连接建立速率 | cluster.upstream_cx_total |
速率突增可能表示连接池配置失效或健康检查异常 |
| 空闲连接数 | cluster.upstream_cx_idle |
空闲连接过多会浪费 FD,需对比基线中的空闲比例 |
4.5 请求吞吐量与延迟百分位
吞吐量与延迟是容量规划的“结果指标”,直接反映用户体验。升级后必须同时校准这两个指标,避免“吞吐量达标但延迟劣化”的陷阱。
4.5.1 请求吞吐量(QPS/RPS)
Envoy 的 cluster.upstream_rq_total 和 listener.downstream_cx_destroy 可用于计算吞吐量。校准步骤:
- 在升级前记录生产流量的峰值 QPS(取 99 百分位)。
- 升级后,在灰度环境中逐步增加流量至基线峰值 QPS 的 80%、100%、120%。
- 观察
envoy_cluster_upstream_rq_completed速率是否线性增长。若在 100% 流量时出现拐点,说明新版本吞吐量上限下降。
4.5.2 延迟百分位(p50/p99/p999)
Envoy 内置直方图统计 envoy_cluster_upstream_rq_time,可直接输出 p50、p99、p999 延迟。升级后延迟基线校准需注意:
- p50 延迟:反映正常流量下的处理效率,升级后不应增加超过 2ms。
- p99 延迟:反映尾部延迟,升级后不应增加超过 10ms 或基线的 20%。
- p999 延迟:反映极端毛刺,升级后若出现超过 500ms 的毛刺,需立即回滚。
延迟-吞吐量联合分析:绘制“吞吐量 vs p99 延迟”散点图。若升级后曲线左移(相同吞吐量下延迟更高)或上移(延迟随吞吐量增长更快),说明容量规划基线已偏移,需调整资源分配或回滚版本。
4.6 基线校准流程总结
将五个指标整合为一个可执行的校准流程,确保升级过程可量化、可回滚:
- 采集基线:升级前 7 天,每 1 分钟采集一次五维指标,计算 p50/p95/p99 作为基线。
- 灰度验证:在 1% 流量下运行新版本 30 分钟,对比五维指标是否在基线 ±5% 内。
- 逐步放量:依次提升至 10%、50%、100% 流量,每阶段观察 15 分钟,记录指标变化。
- 异常判定:若任一指标超出基线阈值(CPU > 10%,内存 > 10%,连接数 > 5%,吞吐量下降 > 5%,p99 延迟增加 > 20%),立即回滚。
- 持续监控:全量升级后继续监控 48 小时,确认无延迟毛刺或内存泄漏。
自动化建议:将五维指标写入 Prometheus 告警规则,升级期间自动触发“容量基线偏离”告警,避免人工漏判。