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 采集延迟:端到端时延分解
采集延迟并非单一数值,而是由多个子阶段串联而成。压测时必须分别测量每个阶段的耗时,才能精准定位瓶颈。
- DNS 解析延迟 —— 目标地址解析时间,通常 < 5ms。
- TCP 连接建立延迟 —— 三次握手耗时,受网络质量影响。
- HTTP 请求/响应延迟 —— 服务端处理 /metrics 端点的时间。
- 样本解析与标签处理延迟 —— Prometheus 解析 text format 并构建样本的时间。
- 样本写入 WAL 与 TSDB 延迟 —— 持久化写入时间。
关键指标: 使用
prometheus_scrape_duration_seconds 和 prometheus_tsdb_head_series_total 配合 rate() 函数,可以实时计算采集延迟的 P50/P90/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 网络带宽:被忽视的隐性瓶颈
网络带宽消耗主要来自两个方向:
- 下行带宽 —— 从 targets 拉取 /metrics 数据。
- 上行带宽 —— 远程写入到 Thanos / Cortex / Mimir 等长期存储。
测量指标:
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 延迟与丢弃率的拐点位置,该拐点即为采集作业的最大稳定容量。