3. 压力测试数据采集:系统性能指标、应用层指标与日志采集方法

压力测试的数据采集是特征工程的“原材料”环节。采集数据的质量、粒度和完整性直接决定后续特征构造与模型训练的上限。本章从系统层、应用层和日志层三个维度,系统讲解核心指标的定义、采集工具与工程化方法。

3.1 系统性能指标采集

系统层指标反映被测服务所在物理机或容器的资源饱和度,是定位性能瓶颈的底层依据。主要采集维度包括:

指标类别 关键指标 采集工具 典型阈值(预警线)
CPU user / sys / iowait / idle / steal top / mpstat / /proc/stat user + sys > 80% 或 iowait > 30%
内存 total / used / free / cached / swap used free / vmstat / /proc/meminfo 可用内存 < 10% 或 swap 持续增长
IO r/s / w/s / await / svctm / %util iostat / iotop / /proc/diskstats %util > 90% 或 await > 30ms
网络 rx_bytes / tx_bytes / drop / error / retrans sar -n DEV / iftop / netstat -s 丢包率 > 0.1% 或重传率 > 2%
特征工程提示: 系统指标采集频率建议设为 1s~5s 一次。对于 CPU iowait 和网络重传率这类“低频高信息量”指标,建议在特征构造时做滑动窗口聚合(如 30s 均值、峰值、变异系数),以捕捉资源争抢的时序模式。

3.2 应用层指标采集

应用层指标直接衡量被测系统对外提供服务的能力,是压力测试结果的核心判据。三大黄金指标:

  • TPS(Transactions Per Second):每秒完成的事务数,反映系统吞吐能力。采集时需区分“成功 TPS”与“总 TPS”。
  • 响应时间(Response Time):通常关注平均响应时间、P50、P90、P99 及最大响应时间。P99 对长尾延迟敏感,是特征工程中常用的“压力敏感特征”。
  • 错误率(Error Rate):包括 HTTP 5xx、超时、业务逻辑错误。错误率突增往往是系统进入过载区的先兆信号。
采集方式: 应用层指标通常由压测工具(如 JMeter、Locust、wrk)直接输出,也可通过 APM 探针(如 SkyWalking、Pinpoint)从服务端捕获。建议同时采集两端数据,互为校验。

3.3 日志数据采集方法

日志是特征工程中“非结构化数据”的主要来源。压力测试期间的日志采集需兼顾完整性与低侵入性。常用方法如下:

  1. 标准输出重定向:通过 shell 将应用 stdout/stderr 写入文件,配合 logrotate 轮转。
  2. 日志框架异步采集:使用 Log4j2 / Logback 的 AsyncAppender,或 Python logging 的 QueueHandler,避免日志 I/O 阻塞业务线程。
  3. Filebeat / Fluentd 轻量采集:以 agent 方式读取日志文件,压缩后发送到 Kafka 或 Elasticsearch,适合大规模压测集群。
  4. 结构化日志:强制使用 JSON 格式输出,包含 timestamp、level、traceId、duration、errorCode 等字段,便于后续特征提取。
# 结构化日志示例(JSON 格式)
{"timestamp":"2025-03-21T14:32:10.123Z","level":"ERROR","traceId":"a1b2c3d4","service":"order-svc","duration":1523,"errorCode":"TIMEOUT","message":"redis read timeout"}
避坑提醒: 压测期间日志级别不要使用 DEBUG,否则日志量可能暴涨 100 倍,导致磁盘 I/O 成为新瓶颈。建议压测时统一使用 WARN 或 ERROR 级别,仅在关键链路保留 INFO。

3.4 三层数据采集架构总览

下图展示了从系统层、应用层到日志层的完整数据采集链路,以及各层数据最终汇聚到特征存储的路径:

压力测试数据采集架构 系统层指标 CPU / 内存 / IO / 网络 采集工具:top / iostat / sar 频率:1s~5s 应用层指标 TPS / 响应时间 / 错误率 采集工具:JMeter / APM 探针 频率:每次请求 / 1s 聚合 日志数据 结构化 JSON 日志 采集工具:Filebeat / Fluentd 输出:Kafka / ES 数据汇聚与清洗层 时间对齐 · 异常过滤 · 缺失填充 · 单位统一 特征存储(TSDB / Feature Store) 说明:三层数据独立采集,在汇聚层按时间戳对齐后存入特征存储,供后续特征工程与模型训练使用

3.5 采集工程化要点

  • 时间戳对齐:系统层、应用层、日志层使用同一台 NTP 服务器,时间戳精度至少到毫秒级,否则特征拼接会出现偏移。
  • 采样窗口统一:所有指标在特征工程阶段统一重采样到相同时间窗口(如 5s、10s),避免因采集频率不同导致特征维度不一致。
  • 元数据标记:每条采集记录附带压测场景 ID、并发数、请求类型等标签,便于后续按场景切片分析。
  • 数据完整性校验:压测结束后,对比各层数据条数与预期请求数,差值超过 1% 则视为采集链路存在丢点,需排查 agent 或网络问题。
特征工程最佳实践: 将系统层 CPU iowait、网络重传率与应用层 P99 响应时间、错误率做“跨层交叉特征”,例如构造“iowait > 30% 且 P99 > 2000ms”的布尔特征,可显著提升过载预测模型的召回率。