1. 课程导论与目标:为什么需要Prometheus驱动的容量压测?

1.1 传统容量压测的三大痛点

在微服务与云原生架构下,传统的“脚本录制 + 固定场景 + 离线分析”压测模式正面临严峻挑战。以下三个问题在SRE日常巡检中反复出现:

痛点 典型表现 后果
数据孤岛 压测结果与生产监控数据分离,无法关联真实流量特征 压测场景失真,容量评估偏差大
脚本僵化 巡检脚本依赖硬编码阈值,无法随业务动态调整 误报/漏报频发,运维人员疲于应对告警
编排低效 压测、巡检、报告生成各环节手动衔接,缺乏自动化闭环 巡检周期长,无法快速响应容量风险
核心矛盾: 生产环境的流量模式是动态的、多维度的,而传统压测脚本是静态的、单维度的。Prometheus作为云原生监控的事实标准,天然具备采集、存储、查询多维时序数据的能力,是连接“真实流量”与“压测场景”的最佳桥梁。

1.2 Prometheus驱动的容量压测:数据闭环

本课程提出的方案,核心是将Prometheus时序数据作为压测场景的“数据驱动源”,实现从生产监控到压测执行再到容量评估的自动化闭环。下图展示了这一架构的核心流程:

Prometheus数据驱动容量压测闭环架构 生产集群 Prometheus 压测引擎 巡检脚本 容量评估 告警/工单 数据流方向:生产指标 → Prometheus查询 → 动态生成压测参数 → 执行压测 → 结果回写 → 容量评估 → 触发告警或自动扩缩容
关键洞察: 图中的“Prometheus”节点不仅是数据源,更是“场景生成器”。通过PromQL查询生产流量的P99、QPS、错误率等时序指标,可以实时计算出压测脚本所需的并发数、请求分布、思考时间等参数,实现“用生产数据驱动压测”。

1.3 课程整体架构与学习路径

本课程共30章,分为四个阶段,从基础概念到高级编排,层层递进。下表展示了完整的课程模块与对应章节:

阶段 模块名称 涵盖章节 核心产出
第一阶段 基础与数据驱动原理 第1-8章 理解Prometheus数据模型、PromQL查询与压测场景映射关系
第二阶段 巡检脚本编排与优化 第9-18章 掌握Python编排框架、动态参数注入、阈值自适应算法
第三阶段 自动化闭环与SRE实践 第19-26章 实现压测-巡检-告警-扩缩容全链路自动化
第四阶段 高级场景与性能调优 第27-30章 大规模集群压测、混沌工程集成、脚本性能优化

学习路径建议:SRE工程师应重点掌握第一阶段和第三阶段;性能测试专家可侧重第二阶段和第四阶段;Python开发者可关注脚本编排与优化部分。每章均包含可运行的代码示例与PromQL查询片段。

1.4 你将获得的核心能力

  • 数据驱动思维: 学会用Prometheus时序数据替代硬编码参数,让压测场景“活”起来。
  • 脚本编排能力: 掌握Python + Prometheus API的脚本框架,实现巡检任务的自动化编排与动态调度。
  • 容量评估模型: 基于Prometheus历史趋势数据,建立服务容量预测与风险预警模型。
  • 闭环自动化: 将压测、巡检、告警、扩缩容整合为一条自动化流水线,减少人工介入。
前置要求: 建议学员具备基础的Prometheus查询(PromQL)经验,了解Python编程基础,并对SRE容量规划有基本认知。本课程不涉及Prometheus安装部署,但会提供必要的查询示例。

1.5 一个典型的巡检脚本编排示例

在进入后续章节前,先看一个简化的“数据驱动”巡检脚本片段,感受Prometheus数据如何驱动压测参数:

import requests
import json

# 1. 从Prometheus查询生产环境当前QPS
prometheus_url = "http://prometheus:9090/api/v1/query"
query = 'sum(rate(http_requests_total[5m]))'
response = requests.get(prometheus_url, params={'query': query})
current_qps = response.json()['data']['result'][0]['value'][1]

# 2. 根据QPS动态计算压测并发数(目标:1.5倍生产峰值)
target_concurrency = int(float(current_qps) * 1.5)

# 3. 生成压测配置
config = {
    "target_url": "http://service-b:8080/api",
    "concurrency": target_concurrency,
    "duration_sec": 120,
    "ramp_up_sec": 30
}

# 4. 触发压测任务(示例:调用压测引擎API)
requests.post("http://load-test-engine:5000/start", json=config)
print(f"已启动压测:并发 {target_concurrency},持续 120s")
代码要点: 第1步从Prometheus获取实时QPS;第2步将QPS映射为压测并发数;第3-4步动态生成并提交压测任务。整个过程中,压测参数完全由生产数据驱动,无需人工调整脚本。