结构化日志与分布式追踪
使用结构化日志、关联 ID 和分布式追踪,让部署过程可观测,从而调试持续集成与持续交付流水线中跨服务的故障
结构化日志与分布式追踪 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
可观测性的三大支柱
可观测性建立在三大支柱之上:指标、日志和追踪。
- 指标告诉您出现了问题
- 日志告诉您发生了什么
- 追踪告诉您问题发生在请求流程的什么位置
流水线监控通常从指标开始;本课将进一步讲解日志和追踪。
为什么要使用结构化日志记录
纯文本日志行很难查询。结构化日志是机器可读的记录,通常采用 JSON 格式,并包含命名字段。
借助 Loki、Elasticsearch 或 Datadog 等工具,可以筛选、聚合结构化日志,并针对其发出警报。
纯文本与结构化日志
请比较非结构化日志行和结构化日志行。结构化版本允许您直接查询 status=500。
// Unstructured
Deploy failed for service api at 12:01
// Structured (JSON)
{"level":"error","event":"deploy_failed","service":"api","status":500}输出 JSON 日志
大多数语言都有结构化日志记录器。关键思想是记录对象,而不是拼接字符串。
const log = (level, event, fields) =>
console.log(JSON.stringify({ level, event, ...fields }));
log('info', 'deploy_started', { service: 'api', version: '1.4.2' });关联 ID
一次部署会涉及许多步骤和服务。关联 ID(或追踪 ID)是附加到某项逻辑操作每一条日志行上的唯一值。
按该 ID 搜索,就能重建跨组件的完整过程。
- name: Set correlation id
run: echo "TRACE_ID=$(uuidgen)" >> $GITHUB_ENV日志级别
请使用一致的日志级别,以便调整详细程度和警报设置:
debug— 详细诊断信息info— 正常事件warn— 可恢复的问题error— 需要关注的故障
针对 error 发出警报,对 info 进行采样,并在生产环境中关闭 debug。
什么是分布式追踪
分布式追踪会跟踪请求经过多个服务的过程。每个步骤都是一个span;多个 span 会连接成一条追踪。
追踪会显示时间线,以及哪个 span 运行缓慢或发生错误,这对于微服务部署非常有价值。
OpenTelemetry
OpenTelemetry(OTel)是生成追踪、指标和日志的厂商中立标准。
请使用 OTel SDK 为应用添加监测,并将数据导出到 Jaeger、Tempo 或云端 APM 等后端。
import { trace } from '@opentelemetry/api';
const tracer = trace.getTracer('deploy-service');
const span = tracer.startSpan('deploy');
// ... do work
span.end();追踪流水线本身
您不仅可以追踪应用,还可以追踪流水线。工具会为每个作业和步骤生成一个 span,让您看到 CI/CD 的哪个阶段成为瓶颈。
这样,漫长的工作流就会变成一张直观的瀑布图,显示时间都花在了哪里。
集中聚合
将每个作业和服务的日志与追踪发送到中央平台。CI 运行器是临时的,因此留在运行器上的日志会在此次运行结束后消失。
请在运行期间将日志转发到日志接收端,这样即使运行器已经消失,也可以进行事后复盘。
从信号到行动
只有能够推动行动,可观测性才有价值。请构建能够显示错误率和缓慢追踪的仪表板,并将关键模式接入您已经配置的警报。
目标是:从一条警报直接跳转到能够解释问题的追踪和结构化日志行。
快速检查
请检验您对日志和追踪的理解。
回顾
您已经通过日志和追踪深化了可观测性。
- 以一致的级别输出结构化(JSON)日志
- 附加关联 ID以跟踪一项操作
- 使用分布式追踪和 OpenTelemetry 查找运行缓慢或失败的 span
- 在临时运行器消失之前,将所有内容集中聚合
这与指标和警报相结合,就能实现完整的流水线可观测性。
常见问题解答
「结构化日志与分布式追踪」课时是免费的吗?
是的 — 「结构化日志与分布式追踪」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「结构化日志与分布式追踪」这节课中我会学到什么?
使用结构化日志、关联 ID 和分布式追踪,让部署过程可观测,从而调试持续集成与持续交付流水线中跨服务的故障 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「结构化日志与分布式追踪」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。