4. 辅助节点关键指标:CPU、内存、磁盘IO、网络带宽、TSDB写入速率、查询延迟等核心指标

在滚动升级过程中,辅助节点(Sidecar/Remote Write Receiver)承担着数据缓冲、写入转发和查询卸载的关键职责。其资源消耗模型与主节点存在显著差异:写入路径密集、查询路径轻量、状态同步频繁。以下逐一拆解各核心指标的监控意义与基线构建方法。

核心原则:辅助节点的容量基线应围绕“写入吞吐”和“数据追赶能力”构建,而非单纯追求资源利用率。滚动升级期间,节点需同时处理存量数据回放与增量数据写入,资源峰值通常出现在升级窗口的前 15 分钟。

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,与操作系统实际占用一致。
基线构建技巧:在非升级窗口采集连续 7 天的 RSS 数据,计算 P50/P95/P99 分位数。滚动升级期间,若 RSS 超过 P99 基线 1.5 倍且持续 5 分钟,应触发节流或暂停升级。

4.4 磁盘 IO:WAL 写入与 Compaction 的冲突

辅助节点的磁盘 IO 压力主要来自两个并发操作:

  1. WAL 写入:每个样本写入都会追加到 WAL 文件,顺序写为主,但 fsync 频率影响延迟。
  2. 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 分钟后回落。

基线构建方法:

  1. 采集非升级窗口的 rate(prometheus_tsdb_head_samples_appended_total[5m]) 作为基线。
  2. 计算 P99 分位数作为 安全阈值。
  3. 滚动升级期间,若写入速率超过安全阈值 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 参数),避免查询堆积。

辅助节点滚动升级资源压力模型 辅助节点滚动升级资源压力模型 辅助节点 Remote Write 接收 WAL 写入 / fsync TSDB 写入 / 索引 本地查询 转发查询 (gRPC) CPU 内存 磁盘 IO 网络带宽 滚动升级期间 写入路径压力放大 2-3x

4.8 基线构建流程总结

综合以上六大指标,辅助节点滚动升级的容量基线构建应遵循以下步骤:

  1. 数据采集:在非升级窗口连续采集 7 天以上指标数据,覆盖业务高峰和低谷。
  2. 分位数计算:对每个指标计算 P50、P95、P99 分位数,作为正常基线。
  3. 压力测试:在测试环境模拟数据回放,记录各指标峰值,确定 安全余量系数(建议 1.5-2.0)。
  4. 告警阈值设定:以 P99 基线 × 安全余量系数作为滚动升级期间的动态阈值。
  5. 自动降级策略:当任一指标超过动态阈值且持续 5 分钟,自动暂停升级并回滚。
常见陷阱:不要仅依赖 CPU 和内存判断辅助节点健康。磁盘 IO 等待和 GC 风暴可能在 CPU 使用率正常的情况下导致写入延迟飙升。务必同时监控 prometheus_tsdb_head_samples_appended_total 的速率变化率,作为写入路径的“早期预警信号”。