4. 辅助节点关键指标:CPU、内存、磁盘IO、网络带宽、TSDB写入速率、查询延迟等核心指标
在滚动升级过程中,辅助节点(Sidecar/Remote Write Receiver)承担着数据缓冲、写入转发和查询卸载的关键职责。其资源消耗模型与主节点存在显著差异:写入路径密集、查询路径轻量、状态同步频繁。以下逐一拆解各核心指标的监控意义与基线构建方法。
4.1 指标全景与监控维度
下表汇总了辅助节点六大核心指标的监控对象、采集频率及典型阈值参考范围。所有指标均需通过 Prometheus 自身 /metrics 端点暴露,并配合 recording rules 生成 1m/5m/15m 滑动窗口基线。
| 指标类别 | Prometheus 指标名(示例) | 采集频率 | 滚动升级阈值参考 | 说明 |
|---|---|---|---|---|
| CPU | process_cpu_seconds_total |
15s | ≤ 80% 单核(升级期 ≤ 120%) | 关注用户态 vs 系统态比例 |
| 内存 | process_resident_memory_bytes |
15s | ≤ 70% 物理内存(升级期 ≤ 85%) | 重点监控 RSS 与 Go GC 抖动 |
| 磁盘 IO | node_disk_io_time_seconds_total |
30s | await ≤ 10ms,%util ≤ 60% | WAL 写入与 TSDB compaction 是主要压力源 |
| 网络带宽 | node_network_receive_bytes_total |
30s | 入向 ≤ 500 Mbps(万兆环境) | Remote Write 接收与 gRPC 同步流量 |
| TSDB 写入速率 | prometheus_tsdb_head_samples_appended_total |
15s | ≤ 基线 1.5x(升级期 ≤ 3x) | 反映数据回放压力 |
| 查询延迟 | prometheus_engine_query_duration_seconds |
30s | P99 ≤ 1s(升级期 ≤ 3s) | 仅监控辅助节点本地查询 |
4.2 CPU:用户态 vs 系统态分解
辅助节点的 CPU 消耗主要来自三个路径:
- 写入路径(用户态):样本解析、标签索引、WAL 序列化。占比通常 50%-60%。
- 压缩路径(用户态):TSDB block compaction、head chunk 合并。占比 20%-30%。
- 系统态:磁盘 I/O 等待、网络中断处理。占比 10%-20%。
滚动升级期间,由于存量数据回放,CPU 用户态占比可能飙升至 80% 以上。建议设置 recording rule 计算 CPU 使用率变化率:
# 计算 5 分钟内 CPU 使用率的平均变化率
rate(process_cpu_seconds_total[5m]) / 1
# 告警规则:变化率超过基线 2 倍
- alert: SidecarCPUUsageSpike
expr: rate(process_cpu_seconds_total[5m]) / 1 > 1.6
for: 2m
labels:
severity: warning
annotations:
summary: "辅助节点 CPU 使用率异常升高"
4.3 内存:RSS 与 GC 压力模型
Prometheus 辅助节点(Go 语言实现)的内存模型具有典型的 锯齿形特征:GC 触发后 RSS 下降,随后缓慢爬升。滚动升级期间,由于数据回放导致样本写入速率激增,Go 堆内存分配频率加快,GC 周期缩短,可能引发 GC 风暴。
关键监控点:
go_memstats_heap_inuse_bytes:堆内存使用量,反映活跃对象大小。go_memstats_gc_cpu_fraction:GC 占用的 CPU 比例,超过 25% 视为异常。process_resident_memory_bytes:RSS,与操作系统实际占用一致。
4.4 磁盘 IO:WAL 写入与 Compaction 的冲突
辅助节点的磁盘 IO 压力主要来自两个并发操作:
- WAL 写入:每个样本写入都会追加到 WAL 文件,顺序写为主,但 fsync 频率影响延迟。
- Compaction:后台合并 block 时产生大量随机读写,与 WAL 写入争抢磁盘队列。
滚动升级期间,数据回放会同时放大 WAL 写入速率和 Compaction 频率,导致磁盘 await 和 %util 同步上升。建议使用以下指标组合判断磁盘瓶颈:
# 磁盘平均 I/O 等待时间(毫秒)
rate(node_disk_io_time_seconds_total[1m]) * 1000 / rate(node_disk_reads_completed_total[1m] + node_disk_writes_completed_total[1m])
# 磁盘利用率(%util)
rate(node_disk_io_time_seconds_total[1m]) * 100
4.5 网络带宽:Remote Write 与 gRPC 同步
辅助节点的网络流量分为两个方向:
- 入向:接收主节点推送的 Remote Write 请求(HTTP/2 + Snappy 压缩)。
- 出向:gRPC 健康检查、元数据同步、查询转发。
滚动升级期间,入向带宽可能因数据回放而翻倍。建议在交换机或节点层面设置 入向带宽告警阈值:
# 入向带宽使用率(假设万兆网卡)
rate(node_network_receive_bytes_total{device="eth0"}[1m]) * 8 / 10^10 * 100
# 告警规则:入向带宽超过 60%
- alert: SidecarNetworkInboundHigh
expr: rate(node_network_receive_bytes_total{device="eth0"}[1m]) * 8 / 10^10 * 100 > 60
for: 3m
labels:
severity: warning
4.6 TSDB 写入速率:数据回放压力标尺
prometheus_tsdb_head_samples_appended_total 是衡量辅助节点写入压力的最直接指标。滚动升级期间,该指标会出现 双峰特征:
- 第一峰:升级启动时,存量数据批量回放,写入速率瞬间达到基线 2-3 倍。
- 第二峰:升级完成后,增量数据与回放数据叠加,持续 5-10 分钟后回落。
基线构建方法:
- 采集非升级窗口的
rate(prometheus_tsdb_head_samples_appended_total[5m])作为基线。 - 计算 P99 分位数作为 安全阈值。
- 滚动升级期间,若写入速率超过安全阈值 2 倍且持续 5 分钟,触发自动降级(暂停数据回放)。
4.7 查询延迟:本地查询 vs 转发查询
辅助节点的查询延迟应拆分为两个维度:
| 查询类型 | 指标 | 滚动升级容忍阈值 | 说明 |
|---|---|---|---|
| 本地查询 | prometheus_engine_query_duration_seconds |
P99 ≤ 3s | 直接查询本地 TSDB,受 compaction 影响 |
| 转发查询 | grpc_server_handling_seconds |
P99 ≤ 5s | 转发到主节点或下游存储,受网络延迟影响 |
滚动升级期间,由于 CPU 和磁盘 IO 争抢,本地查询延迟可能升高。建议在升级前预先 降低查询并发数(通过 --query.max-concurrency 参数),避免查询堆积。
4.8 基线构建流程总结
综合以上六大指标,辅助节点滚动升级的容量基线构建应遵循以下步骤:
- 数据采集:在非升级窗口连续采集 7 天以上指标数据,覆盖业务高峰和低谷。
- 分位数计算:对每个指标计算 P50、P95、P99 分位数,作为正常基线。
- 压力测试:在测试环境模拟数据回放,记录各指标峰值,确定 安全余量系数(建议 1.5-2.0)。
- 告警阈值设定:以 P99 基线 × 安全余量系数作为滚动升级期间的动态阈值。
- 自动降级策略:当任一指标超过动态阈值且持续 5 分钟,自动暂停升级并回滚。
prometheus_tsdb_head_samples_appended_total 的速率变化率,作为写入路径的“早期预警信号”。