4. 容量水位巡检指标:CPU、内存、连接数、QPS、延迟等关键水位指标定义与采集

在镜像供应链安全容量水位巡检中,Istio 服务网格的稳定性直接依赖于数据面(Envoy Sidecar)和控制面(istiod)的资源健康度。本章定义并规范采集以下五大关键水位指标,作为故障排查与容量规划的基础数据源。

4.1 指标分类与定义

容量水位指标分为 系统资源类 和 业务性能类 两大维度。下表列出每个指标的标准名称、单位、采集对象及典型阈值参考:

指标类别 指标名称 单位 采集对象 警告阈值 危险阈值
系统资源 CPU 使用率 % (mCPU) Sidecar / istiod > 80% > 95%
内存使用率 % (MiB) Sidecar / istiod > 75% > 90%
连接与吞吐 活跃连接数 个 Sidecar 监听器 > 2000 > 5000
QPS (每秒请求数) req/s Sidecar / 工作负载 基线 + 30% 基线 + 60%
性能延迟 P99 延迟 ms Sidecar 出/入站 > 200ms > 500ms
水位基线原则: 阈值应基于业务低峰期连续 7 天的 P50 值建立动态基线,避免使用固定硬编码值。例如 QPS 警告阈值 = 基线 P50 × 1.3。

4.2 采集架构与数据流

Istio 内置基于 Prometheus 的遥测体系。下图展示从 Sidecar 指标暴露到 Prometheus 抓取、再到告警与可视化的完整数据流:

容量水位指标采集架构 容量水位指标采集架构 Envoy Sidecar istiod 控制面 Prometheus Grafana 仪表盘 Alertmanager 采集说明: Sidecar 通过 /stats/prometheus 暴露指标;istiod 通过自身 metrics 端口暴露。Prometheus 使用 kubernetes-pods 自动发现抓取。

4.3 关键指标 PromQL 采集语句

以下为每个核心指标的 PromQL 查询示例,可直接用于 Grafana 面板或告警规则:

# 1. Sidecar CPU 使用率 (mCPU)
sum(rate(container_cpu_usage_seconds_total{container="istio-proxy"}[1m])) by (pod, namespace) * 1000

# 2. Sidecar 内存使用率 (MiB)
sum(container_memory_working_set_bytes{container="istio-proxy"}) by (pod, namespace) / 1024 / 1024

# 3. 活跃连接数 (Envoy 下行连接)
envoy_server_live

# 4. 入站 QPS (请求速率)
sum(rate(istio_requests_total{reporter="destination"}[1m])) by (destination_service, destination_workload)

# 5. P99 延迟 (毫秒)
histogram_quantile(0.99, sum(rate(istio_request_duration_milliseconds_bucket{reporter="destination"}[1m])) by (le, destination_service))
采集避坑: 确保 Prometheus 的 scrape_interval 不大于 30s,否则延迟分位数计算会失真。同时注意 istio_requests_total 的 reporter 标签:source 为客户端视角,destination 为服务端视角,巡检时应以 destination 为准。

4.4 水位指标与故障模式的关联

单一指标超限往往不是孤立事件。下表列出常见指标异常组合及其对应的 Istio 故障模式:

异常组合 可能故障模式 排查方向
CPU 高 + 延迟高 Sidecar 线程阻塞 / 配置热加载 检查 Envoy 线程模型、xDS 推送频率
内存高 + 连接数高 连接泄漏 / 上游端点膨胀 检查 CDS/EDS 端点数量、空闲连接超时
QPS 突降 + 延迟归零 上游服务熔断 / 路由丢失 检查 VirtualService 状态、熔断配置
P99 抖动 + CPU 正常 后端服务慢 / 重试风暴 检查目标服务延迟、重试策略

4.5 巡检数据采集清单

为保障巡检可复现,建议每次巡检记录以下元数据:

  • 时间窗口: 采集开始时间、结束时间、时间粒度(如 1m、5m)。
  • 范围: 目标命名空间、工作负载类型(Deployment / DaemonSet)。
  • 指标快照: 上述 5 个核心指标的当前值、P50/P95/P99 分位数。
  • 基线偏差: 与过去 7 天同一时段基线的偏离百分比。
  • 异常事件: 巡检期间是否触发告警、是否有 Pod 重启或 OOMKill。
实践建议: 将上述采集清单写入巡检脚本,输出为 JSON 格式,便于后续接入自动化故障分析引擎。示例输出结构:
{ "timestamp": "2025-03-21T10:00:00Z", "namespace": "production", "workload": "reviews-v1", "cpu_p50": 45.2, "mem_mib": 128.7, "qps": 320, "p99_ms": 180 }

4.6 可视化水位仪表盘设计

为快速定位容量瓶颈,建议在 Grafana 中构建如下布局的巡检视图:

水位仪表盘布局示意 Grafana 水位仪表盘布局(单工作负载视图) CPU 使用率 (mCPU) 时间序列折线图 + 基线虚线 当前: 450m | 基线: 320m | 偏差: +40% 内存使用率 (MiB) 时间序列折线图 + 基线虚线 当前: 256Mi | 基线: 180Mi | 偏差: +42% QPS (请求/秒) 时间序列折线图 + 基线虚线 当前: 1200 | 基线: 900 | 偏差: +33% P99 延迟 (ms) 时间序列折线图 + 基线虚线 当前: 210ms | 基线: 150ms | 偏差: +40% 每个面板同时显示当前值、7天基线、偏差百分比,并支持下钻到 Pod 级别。

通过上述指标定义、采集语句、故障关联及仪表盘设计,巡检人员可以快速建立容量水位感知能力,为后续的 Istio 故障排查提供量化依据。