第 1 章配套代码索引
这些代码分两类:可以直接抄进项目的埋点骨架,和用来验证「为什么不能这么做」的实验。 目标是让你能回答「这个接口的 P99 里,数据库占多少毫秒」这类问题。
一、文件清单
| 文件 | 对应小节 | 内容 | 类型 |
|---|---|---|---|
| 01-four-layers-of-metrics.md | 1.1 指标分四层 | 四层指标的埋点骨架(业务/延迟/资源/饱和度) | 可抄用 |
| 02-percentiles-and-aggregation.md | 1.2 百分位不可平均 | 直方图合并实验 + PromQL 正误写法 | 实验 |
| 03-measurement-points.md | 1.3 测量点 | 三个测量点的埋点 + 延迟分解 | 可抄用 |
| 04-writing-slo.md | 1.4 SLO 四要素 | 把 SLO 写成代码并做完整性校验 | 可抄用 |
| 05-latency-budget.md | 1.5 延迟预算 | 预算自洽性检查 + 超时链推导 | 可抄用 |
| 06-baseline-and-capacity-curve.md | 1.6 基线与容量曲线 | 阶梯加压脚本 + 拐点检测 + 容量推算 | 实验 |
| 07-experiment-metadata.md | 1.7 实验元数据 | 环境元数据自动采集脚本 | 可抄用 |
| 09-lab1.md | 1.9 Lab 1 | 两张表的填写模板 + 预算算术校验器 | 实验 |
1.8 节(案例解剖)没有配套代码——那一节是分析性的。
二、新增依赖
// build.gradle.kts
dependencies {
implementation("io.ktor:ktor-server-core:3.0.0")
implementation("io.ktor:ktor-server-netty:3.0.0")
implementation("io.ktor:ktor-server-metrics-micrometer:3.0.0")
implementation("io.micrometer:micrometer-registry-prometheus:1.13.0")
implementation("com.zaxxer:HikariCP:5.1.0")
// 协程计时与等待(03 节用到)
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
三、阅读顺序建议
- 先读 01,把四层指标的埋点抄进你的项目——这是本章唯一「必须做」的事,因为后面所有章节都依赖它。
- 再读 02,跑一遍直方图合并实验,确认你理解了「百分位为什么不能平均」。
- 然后读 03,加上依赖级埋点——这一步让你获得「延迟分解」的能力。
- 最后读 04、05、07,把目标和环境都变成可执行的代码/脚本,而不是文档里的一段话。
四、三个提醒
- 桶边界一定要改。 Micrometer / Prometheus 的默认桶对你的接口几乎肯定不合适(见 02)。
- 饱和度指标优先级最高。 如果时间有限,先埋连接池
pending和线程池队列深度,再埋其他的。 - 埋点本身有成本。 高基数标签(用户 ID、traceId、URL 全路径)会让 Prometheus 内存爆炸。标签只放可枚举维度。