3. 流量(Traffic)指标设计:QPS/RPS、并发连接数与服务网格流量指标

流量指标反映系统当前承载的请求压力,是容量规划、限流降级和异常检测的第一道防线。在容器化环境中,由于实例动态扩缩、服务网格引入额外代理层,流量指标的采集与解读比传统架构更复杂。本节聚焦三个核心维度:QPS/RPS、并发连接数以及Istio Envoy 流量指标。

3.1 QPS/RPS:请求吞吐量

QPS(Queries Per Second)与 RPS(Requests Per Second)在多数场景下可互换使用,均表示每秒到达系统的请求数量。在容器化架构中,QPS 指标需要按实例级和服务级分别监控。

维度 采集目标 典型 PromQL 示例 告警阈值参考
实例级 QPS 单个 Pod 入口流量 sum(rate(istio_requests_total{reporter="destination",destination_workload="reviews-v1"}[1m])) 超过 Pod 预留 CPU 对应基准 QPS 的 80%
服务级 QPS 整个 Service 聚合流量 sum(rate(istio_requests_total{reporter="destination",destination_service="reviews.default.svc.cluster.local"}[1m])) 超过服务整体容量上限的 70%
上游 QPS Ingress Gateway 入口 sum(rate(istio_requests_total{reporter="source",source_workload="istio-ingressgateway"}[1m])) 与下游服务 QPS 联动,偏差 > 20% 触发
实战要点:容器化环境下 QPS 指标必须区分 reporter="source"(客户端视角)与 reporter="destination"(服务端视角)。两者差值反映网络丢包或代理转发延迟,差值超过 5% 应触发排查。

3.2 并发连接数:连接池与线程模型

并发连接数指系统在同一时刻维持的活跃 TCP 连接数量。容器化环境中,每个 Pod 的 sidecar 代理(Envoy)会消耗额外的文件描述符和内存,因此并发连接数指标直接影响 Pod 资源配额。

  • Envoy 监听器级别:envoy_listener_downstream_cx_active — 当前活跃下游连接数
  • Envoy 集群级别:envoy_cluster_upstream_cx_active — 当前活跃上游连接数
  • Pod 级别:通过 cAdvisor 采集 container_network_tcp_usage_total 估算
连接数爆炸典型场景:当 HPA 触发扩容但新 Pod 尚未就绪时,旧 Pod 的连接数可能瞬时飙升 3-5 倍。建议设置 envoy_cluster_upstream_cx_active 的告警阈值为 Pod 最大连接数 × 0.75,并配合 envoy_cluster_upstream_rq_pending_active(待处理请求数)做二次确认。

3.3 服务网格流量指标:Istio Envoy 核心指标

Istio 通过 Envoy sidecar 注入到每个 Pod,自动生成丰富的流量指标。以下是容器化场景下必须关注的 Envoy 指标分类:

指标类别 指标名称 说明 容器化配置影响
请求总量 istio_requests_total 按 source/destination、response_code、protocol 细分 sidecar 资源占用与请求量线性相关
请求延迟 istio_request_duration_milliseconds P50/P90/P99 分位延迟,含 sidecar 处理时间 延迟突增可能因 sidecar 资源争抢
连接数 istio_tcp_connections_opened_total / _closed_total TCP 连接生命周期统计 连接频繁开闭增加 sidecar CPU 开销
重试与超时 istio_requests_total{response_flags="-"} 排除重试 区分原始请求与重试请求 重试风暴可能导致 sidecar 内存 OOM
容器化环境流量指标采集架构(Istio Envoy) 用户请求 Ingress Gateway istio-ingressgateway Service A Pod Envoy Sidecar App Container istio-proxy + 业务进程 Service B Pod Envoy Sidecar App Container istio-proxy + 业务进程 东西向流量(mTLS) Prometheus Envoy 暴露指标:istio_requests_total / istio_request_duration_milliseconds / envoy_cluster_upstream_cx_active 通过 :15090/stats/prometheus 端点由 Prometheus 定期拉取

3.4 流量指标在容器化参数配置中的实战映射

流量指标直接决定以下容器化参数的初始值与动态调整策略:

  • HPA 扩缩容阈值:基于 istio_requests_total 的 rate 值设定目标 QPS/Pod,例如 targetAverageValue: 200 表示每个 Pod 达到 200 QPS 时触发扩容。
  • Pod 资源 request/limit:根据 P99 并发连接数 × 单连接内存开销(Envoy 约 1-2 KB/连接)计算 sidecar 内存需求。
  • 连接池限制:Envoy 的 circuitBreakers 配置中 maxConnections 应参考历史峰值并发连接数的 1.5 倍。
  • 重试策略:当 istio_requests_total{response_code="503"} 占比超过 1% 时,应减少重试次数或启用快速失败。
避坑指南:不要直接使用 container_cpu_usage_seconds_total 推导 QPS 容量。容器化环境下 CPU 节流(throttling)会导致 QPS 与 CPU 使用率脱钩。应优先使用 Envoy 的请求指标作为扩缩容依据,CPU 指标仅作为辅助参考。

3.5 流量指标黄金信号仪表盘设计

以下为容器化环境流量指标的最小可行仪表盘(Grafana)面板清单:

面板名称 指标来源 聚合方式 可视化类型
全局 QPS 趋势 istio_requests_total sum by (destination_service) 时间序列折线图
服务间流量拓扑 istio_requests_total sum by (source_workload, destination_workload) 桑基图 / 力导向图
并发连接数热力图 envoy_cluster_upstream_cx_active avg by (pod) 热力图 / 状态面板
错误率与重试率 istio_requests_total{response_code=~"5.."} rate / sum by (destination_service) 堆叠面积图
P99 延迟与 QPS 联合视图 istio_request_duration_milliseconds + istio_requests_total histogram_quantile + rate 双轴图(柱状+折线)
流量指标黄金信号仪表盘布局 面板 1:全局 QPS 趋势 istio_requests_total 按 destination_service 聚合 折线图,时间范围 6h 面板 2:并发连接数热力图 envoy_cluster_upstream_cx_active 按 Pod 实例展示 热力图 / 状态面板 面板 3:错误率与重试率 istio_requests_total{code=~"5.."} 堆叠面积图 区分 5xx 与重试标记 面板 4:P99 延迟与 QPS 联合 histogram_quantile + rate 双轴图(柱状+折线) 左轴延迟 ms,右轴 QPS 以上四个面板构成流量指标黄金信号的最小可行仪表盘,覆盖吞吐量、并发、错误、延迟四个子维度

3.6 流量指标参数配置清单

以下为容器化环境下基于流量指标的参数配置速查表:

配置项 关联指标 推荐初始值 动态调整依据
HPA target QPS istio_requests_total rate 200 QPS / Pod P99 延迟超过 500ms 时降低目标值
Envoy 连接池 maxConnections envoy_cluster_upstream_cx_active 500 达到 80% 使用率时增加 50%
Pod sidecar 内存 limit envoy_cluster_upstream_cx_active × 2KB 256 MiB 连接数峰值 × 2KB + 20% 余量
重试次数上限 istio_requests_total{response_code="503"} 占比 2 次 占比 > 2% 时降为 1 次或关闭重试
熔断器 maxPendingRequests envoy_cluster_upstream_rq_pending_active 100 待处理请求数持续 > 80 时触发熔断
推荐实践:在容器化环境中,流量指标应作为第一优先级的 Golden Signal。建议在 Istio 安装时启用 --set meshConfig.enablePrometheusMerge=true,使 Prometheus 自动合并 sidecar 与业务应用的指标,避免指标采集遗漏。