4. 关键性能指标:采集延迟、样本丢弃率、内存占用、CPU使用率、网络带宽

在 Prometheus 采集作业的性能基准测试与压测中,必须围绕五个核心维度建立量化评估体系。这五项指标直接决定了采集作业的稳定性、资源效率与数据完整性。以下逐一拆解其定义、测量方法与典型阈值。

4.1 指标全景与测量维度

指标名称 定义 测量单位 压测关注点
采集延迟 从发起 scrape 请求到样本数据完全写入 TSDB 的时间差 毫秒 (ms) P99 延迟是否随目标数线性增长
样本丢弃率 因超时、队列满、写入失败等原因丢弃的样本占总采集量的比例 百分比 (%) 压力拐点出现时的丢弃率突变
内存占用 Prometheus 进程常驻内存 (RSS) 与堆内存使用量 MB / GB 内存泄漏趋势与 GC 压力
CPU 使用率 采集、压缩、存储、查询等所有 goroutine 的 CPU 时间占比 核心数 / 百分比 CPU 是否成为瓶颈,是否存在锁竞争
网络带宽 采集作业与 targets 之间、以及远程写入时的吞吐量 Mbps / MBps 带宽是否被大量重复指标浪费
压测基线建议: 在基准测试阶段,先固定目标数(如 1000 个 target),逐步增加样本量(10万 → 50万 → 100万 样本/轮),记录上述五项指标的基线值。压测阶段再按 1.5x、2x、3x 倍数递增,寻找性能拐点。

4.2 采集延迟:端到端时延分解

采集延迟并非单一数值,而是由多个子阶段串联而成。压测时必须分别测量每个阶段的耗时,才能精准定位瓶颈。

  1. DNS 解析延迟 —— 目标地址解析时间,通常 < 5ms。
  2. TCP 连接建立延迟 —— 三次握手耗时,受网络质量影响。
  3. HTTP 请求/响应延迟 —— 服务端处理 /metrics 端点的时间。
  4. 样本解析与标签处理延迟 —— Prometheus 解析 text format 并构建样本的时间。
  5. 样本写入 WAL 与 TSDB 延迟 —— 持久化写入时间。
关键指标: 使用 prometheus_scrape_duration_seconds 和 prometheus_tsdb_head_series_total 配合 rate() 函数,可以实时计算采集延迟的 P50/P90/P99。压测报告中必须包含延迟分布直方图。
采集延迟端到端分解流程图 DNS 解析 TCP 连接 HTTP 请求 样本解析 WAL 写入 延迟累积公式 总延迟 = DNS + TCP + HTTP + 样本解析 + WAL 写入 Prometheus 指标 prometheus_scrape_duration_seconds rate() 计算 P99

4.3 样本丢弃率:数据完整性的红线

样本丢弃率是压测中最重要的止损指标。当系统过载时,Prometheus 会优先丢弃样本以保护自身稳定性。丢弃率超过 0.1% 即视为压测失败。

  • 丢弃原因分类:
    • scrape_timeout —— 采集超时,目标响应过慢。
    • sample_limit —— 单次采集样本数超过配置上限。
    • queue_full —— 远程写入队列已满,丢弃样本。
    • wal_corruption —— WAL 写入失败导致样本丢失。
  • 测量方法: 使用 prometheus_target_scrapes_sample_out_of_order_total 和 prometheus_remote_storage_samples_dropped_total 计算丢弃率。
  • 计算公式: 丢弃率 = (丢弃样本数 / 总采集样本数) × 100%
压测红线: 当样本丢弃率 > 0.5% 时,必须立即停止压测并检查配置。持续丢弃会导致监控数据断层,影响告警准确性与历史趋势分析。建议在压测脚本中设置自动熔断机制。

4.4 内存占用:GC 压力与 RSS 增长趋势

Prometheus 的内存占用主要由以下部分组成:

内存区域 说明 压测关注点
堆内存 (Heap) 存储样本、标签、索引等活跃对象 GC 频率与 STW 时间
WAL 缓冲区 未刷盘的预写日志缓存 写入速度是否匹配采集速度
内存映射 (mmap) TSDB 块的内存映射文件 mmap 区域是否持续增长
缓存 (Cache) 查询缓存、指标元数据缓存 缓存命中率与内存消耗平衡

压测方法: 使用 process_resident_memory_bytes 和 go_memstats_heap_inuse_bytes 监控内存趋势。在 30 分钟持续压测中,若 RSS 增长超过 20% 且未收敛,则存在内存泄漏风险。

4.5 CPU 使用率:核心瓶颈识别

CPU 使用率应分解到具体模块,而非只看整体百分比。压测时使用 process_cpu_seconds_total 配合 rate() 计算每秒 CPU 时间消耗。

  • 采集模块 CPU —— 解析 /metrics 端点、构建样本。
  • 存储模块 CPU —— 压缩、索引、WAL 写入。
  • 查询模块 CPU —— 处理 PromQL 查询请求。
  • 远程写入 CPU —— 序列化、压缩、发送数据。
典型瓶颈: 当 CPU 使用率 > 80% 且采集延迟开始非线性增长时,说明 CPU 已成为瓶颈。此时应优先优化样本解析效率或增加采集并发度。

4.6 网络带宽:被忽视的隐性瓶颈

网络带宽消耗主要来自两个方向:

  1. 下行带宽 —— 从 targets 拉取 /metrics 数据。
  2. 上行带宽 —— 远程写入到 Thanos / Cortex / Mimir 等长期存储。

测量指标:

  • node_network_receive_bytes_total —— 下行流量。
  • node_network_transmit_bytes_total —— 上行流量。
  • prometheus_remote_storage_sent_bytes_total —— 远程写入发送字节数。
网络带宽流向与测量点 Targets /metrics 端点 Prometheus 采集作业 scrape + 远程写入 远程存储 Thanos / Cortex 下行带宽 (Mbps) 上行带宽 (Mbps) node_network_receive_bytes_total node_network_transmit_bytes_total prometheus_remote_storage_sent_bytes_total

4.7 五项指标联动分析:性能拐点判定

在压测过程中,单一指标超标往往不是孤立事件。以下表格总结了常见的联动异常模式:

异常模式 采集延迟 样本丢弃率 内存占用 CPU 使用率 网络带宽 根因推测
CPU 瓶颈 ↑ 非线性增长 ↑ 缓慢上升 → 稳定 ↑ > 85% → 正常 样本解析或压缩算法过载
内存泄漏 → 正常 → 正常 ↑ 持续增长 ↑ GC 频繁 → 正常 WAL 或索引未释放
网络瓶颈 ↑ 抖动 ↑ 突发丢弃 → 正常 → 正常 ↑ 接近上限 远程写入带宽不足
目标端过载 ↑ 大幅波动 ↑ 超时丢弃 → 正常 → 正常 → 正常 target 响应变慢
压测报告输出建议: 每轮压测结束后,生成包含五项指标的趋势图(时间序列折线图)与分布统计表。重点关注 P99 延迟与丢弃率的拐点位置,该拐点即为采集作业的最大稳定容量。