文档目录

第 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")
}

三、阅读顺序建议

  1. 先读 01,把四层指标的埋点抄进你的项目——这是本章唯一「必须做」的事,因为后面所有章节都依赖它。
  2. 再读 02,跑一遍直方图合并实验,确认你理解了「百分位为什么不能平均」。
  3. 然后读 03,加上依赖级埋点——这一步让你获得「延迟分解」的能力。
  4. 最后读 04、05、07,把目标和环境都变成可执行的代码/脚本,而不是文档里的一段话。

四、三个提醒

  • 桶边界一定要改。 Micrometer / Prometheus 的默认桶对你的接口几乎肯定不合适(见 02)。
  • 饱和度指标优先级最高。 如果时间有限,先埋连接池 pending 和线程池队列深度,再埋其他的。
  • 埋点本身有成本。 高基数标签(用户 ID、traceId、URL 全路径)会让 Prometheus 内存爆炸。标签只放可枚举维度。