分布式链路追踪在字节跳动的实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 分布式链路追踪在字节跳动的实践
字节跳动基础架构可观测性基础设施团队 朱珠
2. 大纲
• 什么是分布式链路追求(Trace)
• 字节链路追踪系统的挑战、机遇和目标
• 字节链路追踪系统的实现
• 实践应用案例
3. Metric / Log / Trace
Metric
Log
Trace
4. 当 Metric / Log / Trace 彼此孤立……
小 A,你的服务有很多错
误日志,是不是有故障?
小 B,你的服务 CPU
很高,是不是有问题?
收到告警,服务失败率持续上升
5. 进一步理解 Trace
Metric
Log
Trace 是 Context 载体, 串联 Context 中所有 Metric 和 Log,
是监控数据的链接纽带
6. 当 Trace 成为监控数据的可靠链接纽带
关联对应的
错误 Trace
收到告警,服务失败率持续上升
在源头节点上定
位到 panic 日志
查看错误链路,定位错误源头
7. 大纲
• 什么是分布式链路追求(Trace)
• 字节链路追踪系统的挑战、机遇和目标
• 字节链路追踪系统的实现
• 实践应用案例
8. 字节链路追踪系统的挑战和机遇
某核心接口背后的微服务链路
挑战
• 线上流量巨大
• 微服务数量巨大,关系复杂,
迭代变化快
• 研发团队庞大,分工复杂
机遇
• 微服务框架高度统一
• 微服务高度容器化,环境统一
• 存储/中间件基础设施统一
9. 字节链路追踪系统的功能性目标
统一数据
模型与语义 开放
自定义 中心化
配置管控 一站式
观测平台
统一数据模型和语 统一模型基础上, 中心化动态管控采 构建一站式观测平
义规范;建立 充分开放自定义能 样、染色、熔断限 台,提升监控排障、
MTL 可靠关联关 力,满足不同业务 流、索引、脱敏保 SLO 优化等场景
系 场景需求 密等策略 的能效
10. 字节链路追踪系统的非功能性目标
集成开销
最小化 平衡
成本与需求 多机房
容灾完备 最小化架构
与依赖复杂度
最小化接入成本与 有限成本处理和存 单机房断网宕机等 简化架构与依赖,
Overhead 储大量数据,保证 故障场景下,保证 部署与运维友好
秒级以内的检索速 可用
度
11. 大纲
• 什么是分布式链路追求(Trace)
• 字节链路追踪系统的挑战、机遇和目标
• 字节链路追踪系统的实现
• 实践应用案例
12. 数据模型
Span : 一 个 有 时 间 跨 度 的 事 件 , 例 如 一 次
RPC 调用,一个函数执行。
Event : 一个没有时间跨度的事件,例如一条
log,一次 panic。
Metric : 一个带多维 tag 的数值,例如一个消
息体的大小。
Trace : 一个请求上下文在多个分布式微服务
节点的完整执行链路。
Transaction: 一条 Trace 在单个服务节点上
的所有 Span / Event / Metric 对象构成的树
形结构消息体。
13. 统一数据模型建立 M T L 可靠关系(1)
Context 贯穿整个请求生命周期,
在进程内和跨进程间持续传递,将数据串联起来
14. 统一数据模型建立 M T L 可靠关系(2)
Span 的频次/耗时/失败率统计 Metrics
Custom Metric
sales_price
通过 TraceID+SpanID 实现
Trace 和 Log 的精确关联
通过多维 Tag 实现
Trace 和 Metric
的精确映射
Event 的频次统计 Metrics
pay_success
15. 统一语义规范
• 对 HTTP Server, RPC Server, RPC Client, MySQL Client, Redis Client, MQ Consumer, MQ
Producer 等主流场景统一语义规范
16. 采样
固定概率采样+低流量接口兜底采样
• 默认以 Logid 作为采样种子,按固定概率进行采样,同时确保低流量接口也有一定数目的请求被采样。
自适应概率采样
• 以单位时间采样一定数目为目标,自动根据当前 QPS 计算采样率进行采样。
染色采样
• 对特定的请求添加染色标记,对该请求进行强制采样。
PostTrace 后置采样
• 当一个 Trace 一开始未命中采样,但在执行过程中发生了一些令人感兴趣的事(例如出错或时延毛刺)时,可以在
Trace 中间状态发起采样。相较于先全采再后置采样,此方案开销极低。
17. PostTrace 后置采样
成功
失败
1
2
3
可被采样部分
4
5
6
7
在阶段 5 发生异常,触发 PostTrace,
可以采集到 1,4,5,6,7,但是无法采集
2,3。
PostTrace 展示效果:
18. 中心化配置管控
采样策略
•
按照不同服务、接口、集群、机房等条件动态配置采样策略
熔断保护
•
多种熔断保护机制确保 Trace 采集不会占用过多资源影响主线功能
自定义索引
•
支持业务按需为自定义字段创建索引,满足业务字段检索需求
脱敏保密
•
按需对 Trace 数据进行写入时脱敏和查询时保密
19. 整体架构
• 私有协议数据流,性能更极致
• 底层本高吞吐的字节自研日志存储
• 单元化架构保障多机房容灾完备性
• 精细灵活的中心化调控能力
• 兼顾在线实时查询与计算分析
• 准确度和时效性较高的元数据采集
20. 多机房容灾完备性
•
单元化部署,写入流主机房之间无网络通信,
主机房间网络故障时,功能不受损。
•
单机房宕机或孤岛时,顶层查询模块动态屏
蔽故障机房,保证其他机房数据可用。
•
顶层查询模块所在机房宕机或断网时,切到
Standby 机房继续服务。
21. 分析计算
22. 现阶段实施效果
• 吞吐量:Transaction 数 10 Million/秒(默认采样率 0.1%),索引数 300 Million/秒
• 查询性能:TraceID 检索 P50 < 100 毫秒, P99 < 500 毫秒
• 数据产生到可检索全链路时延: AVG ≈ 1 分钟,P99 < 2 分钟
• 存储资源:5 PB (2 副本 TTL 15 天)
23. 大纲
• 什么是分布式链路追求(Trace)
• 字节链路追踪系统的挑战、机遇和目标
• 字节链路追踪系统的实现
• 实践应用案例
24. 【实践案例】微服务 P99 毛刺请求根因定位
2. 观察到 client 侧耗时很高, server 侧耗时很低
1. 观察耗时指标并条件筛选毛刺请求
4. 观察 client
进程对应的
Pod 监控指标,
发现有持续的
CPU Throttle,
造成毛刺请求
3. 查看底层调用分析,发现 egress mesh / ingress mesh / server span
阶段耗时都很低,排除网络原因,卡顿发生在 client 进程
25. 【实践案例】全链路实时监控
•
从任一微服务节点检索到精确的上
下游关联拓扑
•
实时观测各节点的流量/延迟/错误率
/资源使用率/告警/变更等,快速从
全链路视角获取整体状态信息
26. 【实践案例】业务活动全链路扩容估算
27. 【实践案例】错误传播链分析
• 故障时快速分析
• 异常来源
• 传播影响面
• 长期离线订阅
• 强弱依赖梳理
• 持续 SLO 优化
28. 小结
• Trace 与 Metric, Log 的关系
• 字节链路追踪系统的挑战、机遇和目标
• 字节链路追踪系统的实现
• 实践应用案例
29. THANKS