1. 课程导论
1.1 为什么CI/CD流水线需要可观测性?
现代软件交付依赖CI/CD自助流水线完成代码构建、测试、部署。然而,当流水线执行失败或性能劣化时,开发团队往往陷入“盲人摸象”的困境:
- 失败定位慢:日志分散在Jenkins、GitLab CI、Argo Workflows等多个平台,需要手动切换上下文。
- 缺乏端到端追踪:一次提交从代码提交到生产部署,中间经过数十个步骤,无法快速定位瓶颈环节。
- 告警噪音高:基于阈值的静态告警无法区分“构建超时”与“基础设施故障”,误报率高。
- 自助排障成本高:开发人员需要掌握多个监控工具(Prometheus、ELK、Jaeger)的查询语法,学习曲线陡峭。
| 痛点维度 | 传统监控方式 | 理想可观测性 |
|---|---|---|
| 数据关联 | 日志、指标、链路各自独立 | 三者关联,一键跳转 |
| 上下文传递 | 无Trace ID,需人工匹配时间戳 | 自动传递Trace Context |
| 自助能力 | 依赖运维配置告警规则 | 开发者可自定义SLO与仪表盘 |
| 覆盖范围 | 仅监控最终结果(成功/失败) | 监控每个步骤的耗时、资源、错误 |
核心矛盾:CI/CD流水线本质是“代码到价值的管道”,但传统监控只关注管道出口,忽略了管道内部的流动状态。
1.2 OpenTelemetry简介
OpenTelemetry(简称OTel)是CNCF孵化的可观测性标准框架,提供统一的API、SDK和协议,用于生成、采集和导出遥测数据(Traces、Metrics、Logs)。
其核心能力包括:
- 统一数据模型:定义Span、Metric、LogRecord的标准结构,消除厂商锁定。
- 自动插桩:通过Instrumentation库自动捕获HTTP请求、数据库调用、消息队列等常见操作。
- 上下文传播:支持W3C Trace Context标准,跨服务传递Trace ID。
- 可扩展导出:通过OTLP协议将数据发送到任何兼容后端(Jaeger、Zipkin、Prometheus、Grafana等)。
关键概念:Trace(追踪)代表一次请求的完整路径,由多个Span(跨度)组成。每个Span记录一个操作单元(如“构建镜像”),包含开始时间、结束时间、状态和属性。
1.3 课程目标
本课程旨在帮助DevOps工程师、SRE和平台工程师,掌握使用OpenTelemetry构建CI/CD流水线端到端可观测性的完整方法。完成本课程后,你将能够:
- 设计:为自助流水线设计Trace、Metric、Log的采集方案。
- 实现:在Jenkins、GitLab CI、Argo Workflows中嵌入OTel插桩。
- 关联:将流水线执行数据与代码变更、基础设施指标关联分析。
- 可视化:使用Grafana构建流水线执行仪表盘,实现SLO监控。
- 自助排障:开发团队通过Trace ID快速定位失败步骤与根因。
| 模块 | 核心产出 | 实践环境 |
|---|---|---|
| 基础篇(第1-5章) | OTel环境搭建、数据模型理解 | Docker Compose + OTel Collector |
| 进阶篇(第6-15章) | 流水线插桩、Trace上下文传播 | Jenkins + GitLab CI + Argo Workflows |
| 高级篇(第16-25章) | SLO定义、告警规则、自助仪表盘 | Grafana + Prometheus + Tempo |
| 实战篇(第26-30章) | 生产级部署、故障演练、成本优化 | Kubernetes + 多云CI/CD |
1.4 学习路径与前置知识
本课程采用“理论+动手”双轨制,每章包含概念讲解、代码示例和实验任务。建议按顺序学习,但可根据实际需求跳转:
- 前置知识:熟悉CI/CD基本概念(Pipeline、Stage、Job)、Docker基础操作、YAML语法。
- 推荐工具:VS Code + Remote Containers、Postman、kubectl。
- 学习节奏:每周2-3章,每章实验时间约30-60分钟。
注意:第10-12章涉及Jenkins Pipeline Groovy脚本,如果对Groovy不熟悉,建议先阅读附录A的快速入门。
1.5 本章小结
本章明确了CI/CD流水线监控的三大痛点:数据孤岛、缺乏端到端追踪、自助排障困难。OpenTelemetry通过统一的数据模型和上下文传播机制,为解决这些问题提供了标准化方案。课程将按照“基础→进阶→高级→实战”四阶段递进,确保学员既能理解原理,又能动手落地。
下一步行动:请确保本地环境已安装Docker和Docker Compose,第2章将开始搭建OTel Collector + Jaeger的本地实验环境。