3. 容量水位核心指标定义:CPU、内存、磁盘、网络IO、连接数、QPS、P99延迟、错误率
在集群升级过程中,服务目录平台(Service Catalog Platform)的容量水位巡检是保障业务连续性的关键防线。容量水位并非单一维度的“资源使用率”,而是由基础设施层、中间件层和业务层三层指标构成的立体监控体系。本章将逐一拆解8项核心指标的定义、采集粒度、阈值基线及异常判定逻辑。
巡检原则:所有指标必须同时关注“稳态值”与“变化率”。升级期间,即使值未超阈值,若指标在短时间内(如5分钟内)斜率陡增,也应视为潜在风险。
3.1 指标全景与分层映射
下表展示了8项核心指标在服务目录平台中的分层归属、典型采集工具及默认巡检周期。理解分层关系有助于在异常时快速定位故障域。
| 指标名称 | 所属层级 | 典型采集源 | 默认巡检周期 | 升级期间建议周期 |
|---|---|---|---|---|
| CPU 使用率 | 基础设施层 | node_exporter / cAdvisor | 60s | 15s |
| 内存使用率 | 基础设施层 | node_exporter / cAdvisor | 60s | 15s |
| 磁盘使用率 & IO | 基础设施层 | node_exporter / 云监控 | 60s | 30s |
| 网络 IO | 基础设施层 | node_exporter / 云监控 | 60s | 30s |
| 连接数 | 中间件层 | MySQL / Redis / Nginx status | 30s | 10s |
| QPS | 业务层 | API Gateway / 应用埋点 | 10s | 5s |
| P99 延迟 | 业务层 | APM (SkyWalking / Jaeger) | 10s | 5s |
| 错误率 | 业务层 | API Gateway / 应用日志 | 10s | 5s |
关键认知:升级期间,业务层指标(QPS、P99延迟、错误率)的优先级高于基础设施层指标。即使CPU/内存正常,只要P99延迟飙升或错误率>0,就必须暂停升级并回滚。
3.2 基础设施层指标详解
3.2.1 CPU 使用率
- 定义:CPU 处于非空闲状态的时间百分比。在 Kubernetes 环境中,需区分
node_cpu_seconds_total(节点级)与container_cpu_usage_seconds_total(容器级)。 - 阈值基线:日常稳态 < 70%;升级期间警戒线 < 85%;超过 90% 触发熔断。
- 异常模式:CPU 使用率突然从 40% 跳变至 80% 并持续抖动,通常表明有新的计算密集型进程(如数据迁移、镜像解压)在竞争资源。
3.2.2 内存使用率
- 定义:已用内存(含 Buffer/Cache)占总内存的百分比。重点关注
container_memory_working_set_bytes,该指标排除了缓存页,更能反映真实压力。 - 阈值基线:日常稳态 < 75%;升级期间警戒线 < 85%;超过 90% 可能触发 OOM Kill。
- 异常模式:内存使用率缓慢爬升且不回落(内存泄漏特征),或升级后瞬间飙升(新版本 JVM 堆配置不当)。
3.2.3 磁盘使用率 & IO
- 定义:磁盘使用率指已用空间占比;磁盘 IO 关注
iowait和disk_io_time_seconds_total。 - 阈值基线:磁盘使用率 < 80%(预留 20% 给日志和临时文件);iowait < 10%。
- 异常模式:升级过程中大量日志写入或镜像层解压导致 IO 打满,表现为 iowait 持续 > 30%,应用响应变慢。
3.2.4 网络 IO
- 定义:网络接口的入/出流量速率(bytes/sec)及丢包率。使用
node_network_receive_bytes_total和node_network_transmit_bytes_total的 rate 值。 - 阈值基线:带宽使用率 < 60%;丢包率 = 0。
- 异常模式:升级期间镜像拉取或数据同步导致带宽打满,引发其他服务的网络超时重传。
3.3 中间件层指标详解
3.3.1 连接数
- 定义:当前建立的 TCP 连接数或数据库连接池活跃连接数。对于 MySQL,关注
Threads_connected;对于 Redis,关注connected_clients。 - 阈值基线:连接数使用率(当前连接数/最大连接数)< 70%;升级期间 < 80%。
- 异常模式:升级过程中应用重启导致大量旧连接未释放(TIME_WAIT 堆积),或新版本连接池配置过大,瞬间打满数据库连接上限。
3.4 业务层指标详解
3.4.1 QPS(每秒查询数)
- 定义:服务目录平台每秒处理的请求数量。通常按 API 维度聚合,如
catalog_api_requests_total的 rate 值。 - 阈值基线:日常峰值 QPS 的 80% 作为警戒线;升级期间若 QPS 突然下降超过 50%,可能表明服务异常或流量被错误路由。
- 异常模式:QPS 陡降(服务不可用)或陡升(流量重试风暴)。
3.4.2 P99 延迟
- 定义:99% 的请求在多少毫秒内完成。这是衡量用户体验的核心指标,通常使用 APM 工具通过采样计算。
- 阈值基线:日常 P99 < 200ms;升级期间 < 500ms;超过 1s 视为严重事件。
- 异常模式:P99 延迟从 150ms 跳变至 800ms,即使平均值正常,也说明存在长尾请求,可能是数据库慢查询或网络抖动。
3.4.3 错误率
- 定义:返回 HTTP 5xx 或业务错误码的请求占总请求数的比例。使用
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))计算。 - 阈值基线:日常 < 0.1%;升级期间 < 0.5%;任何非零错误率持续超过 1 分钟即触发回滚。
- 异常模式:错误率从 0% 瞬间升至 5% 以上,通常由 API 版本不兼容、配置错误或依赖服务不可用导致。
3.5 指标关联分析与巡检策略
单一指标异常往往只是表象,真正的根因需要通过指标间的关联分析来定位。以下是几种常见的关联模式:
| 现象 | 可能关联指标 | 根因推测 | 建议动作 |
|---|---|---|---|
| P99 延迟升高 + 错误率不变 | CPU / 磁盘 IO / 连接数 | 资源竞争或慢查询 | 检查慢 SQL、扩容 CPU |
| 错误率升高 + QPS 下降 | 连接数 / 网络 IO | 服务不可用或连接池耗尽 | 检查服务健康、重启连接池 |
| CPU 飙升 + 内存平稳 | QPS / P99 | 计算密集型任务或死循环 | 抓取线程栈、分析热点 |
| 磁盘使用率缓慢增长 + IO 正常 | 日志量 / 数据量 | 日志轮转失效或数据积压 | 清理日志、检查定时任务 |
升级巡检铁律:在升级窗口内,必须同时观察“当前值”与“变化趋势”。例如,CPU 从 30% 升至 60% 可能仍在阈值内,但若 5 分钟内斜率 > 5%/min,则需提前介入。建议使用 PromQL 的
deriv() 函数计算变化率。
3.6 指标采集与告警配置示例
以下是一个基于 Prometheus + Alertmanager 的告警规则片段,覆盖了本章定义的 8 项核心指标。实际部署时需根据服务目录平台的规模调整阈值。
groups:
- name: catalog_capacity_alerts
rules:
# 基础设施层
- alert: HighCPUUsage
expr: (100 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 2m
labels: { severity: critical }
annotations: { summary: "CPU 使用率超过 85%" }
- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85
for: 2m
labels: { severity: critical }
annotations: { summary: "内存使用率超过 85%" }
- alert: HighDiskUsage
expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100 > 80
for: 5m
labels: { severity: warning }
annotations: { summary: "磁盘使用率超过 80%" }
- alert: HighDiskIO
expr: rate(node_disk_io_time_seconds_total[5m]) > 0.3
for: 2m
labels: { severity: warning }
annotations: { summary: "磁盘 IO 等待时间过高" }
- alert: HighNetworkDrop
expr: rate(node_network_receive_drop_total[5m]) > 0 or rate(node_network_transmit_drop_total[5m]) > 0
for: 1m
labels: { severity: critical }
annotations: { summary: "网络丢包率不为 0" }
# 中间件层
- alert: HighConnectionCount
expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections * 100 > 80
for: 1m
labels: { severity: critical }
annotations: { summary: "MySQL 连接数使用率超过 80%" }
# 业务层
- alert: HighP99Latency
expr: histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) > 0.5
for: 1m
labels: { severity: critical }
annotations: { summary: "P99 延迟超过 500ms" }
- alert: HighErrorRate
expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.005
for: 1m
labels: { severity: critical }
annotations: { summary: "错误率超过 0.5%" }
实践建议:升级期间,建议将 Alertmanager 的
repeat_interval 缩短至 5 分钟,并将告警通知渠道设置为即时通讯工具(如钉钉/飞书机器人),确保值班人员能在 1 分钟内响应。