1. 课程导论与目标:为什么需要Prometheus驱动的容量压测?
1.1 传统容量压测的三大痛点
在微服务与云原生架构下,传统的“脚本录制 + 固定场景 + 离线分析”压测模式正面临严峻挑战。以下三个问题在SRE日常巡检中反复出现:
| 痛点 | 典型表现 | 后果 |
|---|---|---|
| 数据孤岛 | 压测结果与生产监控数据分离,无法关联真实流量特征 | 压测场景失真,容量评估偏差大 |
| 脚本僵化 | 巡检脚本依赖硬编码阈值,无法随业务动态调整 | 误报/漏报频发,运维人员疲于应对告警 |
| 编排低效 | 压测、巡检、报告生成各环节手动衔接,缺乏自动化闭环 | 巡检周期长,无法快速响应容量风险 |
核心矛盾: 生产环境的流量模式是动态的、多维度的,而传统压测脚本是静态的、单维度的。Prometheus作为云原生监控的事实标准,天然具备采集、存储、查询多维时序数据的能力,是连接“真实流量”与“压测场景”的最佳桥梁。
1.2 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步动态生成并提交压测任务。整个过程中,压测参数完全由生产数据驱动,无需人工调整脚本。