X-Ray 概念与架构

AWS 监控与故障排查

John Q. Martin

Principal Consultant

分布式系统的挑战

 

单体应用

  • 线性流程,单进程内完成
  • 调试相对简单

 

分布式应用

  • 一次请求会涉及多个服务、数据库、外部 API
  • 失败时,究竟是哪一层服务导致的?

一团缠绕在一起的多色线结,形象展示在分布式系统中跟踪单个请求的困难

AWS 监控与故障排查

什么是 AWS X-Ray?

 

X-Ray 是一个分布式追踪服务,能够:

  • 端到端跟踪跨服务的请求
  • 在每一步测量延迟并检测错误
  • 将应用架构可视化为服务地图

 

示例请求路径:

  分布式追踪中,请求路径穿过多个服务的示意图

AWS 监控与故障排查

五大核心能力

 

X-Ray 五大核心能力:请求追踪、性能分析、错误检测、服务地图和洞察

AWS 监控与故障排查

追踪的工作原理

 

分布式追踪流程:请求进入 Service A,依次调用 Service B 和 Service C,通过 HTTP 头传递 Trace ID;每个服务向 X-Ray 守护进程发送带相同 Trace ID 的段,守护进程转发到 X-Ray 并组装为完整追踪

AWS 监控与故障排查

Trace ID 与头传播

 

Trace ID 格式:

X-Ray Trace ID 格式,包含版本号、十六进制 Unix 时间戳和唯一标识

 

HTTP 头:

X-Amzn-Trace-Id:
  Root=1-5e8c1234-...;
  Parent=abc123;
  Sampled=1
  • Root,Trace ID,在所有服务间保持一致
  • Parent,上游段 ID
  • Sampled,0 或 1,表示是否采样
AWS 监控与故障排查

X-Ray 守护进程

 

职责:

  • 监听 UDP 端口 2000
  • 接收来自应用的段数据
  • 缓冲、批处理并转发到 X-Ray API
  • 将您的应用与 X-Ray 服务解耦

 

按环境部署:

按环境部署 X-Ray 守护进程:Lambda 自动,EC2 作为服务,ECS 作为 sidecar

AWS 监控与故障排查

采样

 

默认规则:

  • 每秒第 1 个请求——必定追踪
  • 其余请求的 5%——采样

自定义规则字段:

  • fixed_target——每秒必追踪的请求数
  • rate——其余请求的采样百分比
  • priority——数值越小优先级越高

 

示例策略:

Rule 1 (priority 1):
  5xx errors -> 100% sampling

Rule 2 (priority 10):
  Normal traffic -> 5% sampling
AWS 监控与故障排查

段(Segment)

 

段记录内容:

  • 服务名称
  • 开始与结束时间
  • Trace ID
  • HTTP 请求与响应详情
  • AWS 账户与区域

 

段状态:

五种 X-Ray 段状态:进行中、正常、错误、故障、限流

AWS 监控与故障排查

子段(Subsegment)

 

时间线对比:无子段时为单条 800ms;有子段时拆分为 DynamoDB 50ms、PaymentService 400ms(高亮瓶颈)、InventoryService 300ms

子段的作用:

  • 在段内提供细粒度计时
  • 跟踪下游调用
  • 将总计 800ms 拆解为:
    • DynamoDB.PutItem:50ms
    • 调用 PaymentService:400ms
    • 调用 InventoryService:300ms

 

命名空间:

三类子段命名空间:aws(AWS 调用)、remote(外部 HTTP)、local(自定义代码)

AWS 监控与故障排查

注解(Annotations)

 

关键信息:

  • 索引的键值对——可搜索与可筛选
  • 限制:每个追踪至多索引 50 个
  • 类型:string、number、boolean

适用于:

  • user_id、order_id、environment
  • version、功能开关、错误码

 

过滤语法:

annotation.user_id = "user-123"
annotation.environment = "production"
AND annotation.version = "1.2.3"
AWS 监控与故障排查

元数据(Metadata)

 

关键信息:

  • 不建立索引——不可搜索或筛选
  • 无大小限制
  • 支持任意 JSON 结构

适用于:

  • 完整的请求与响应体
  • 错误消息与堆栈跟踪
  • 业务上下文(订单明细、地址)

 

注解 vs. 元数据:

对比表:注解可索引可搜索;元数据更详尽但不建立索引

AWS 监控与故障排查

完整追踪结构

 

完整追踪结构:包含四个段,外部支付 API 为最慢操作

AWS 监控与故障排查

课程小结

 

  • X-Ray——跨服务端到端可观测的分布式追踪服务
  • 追踪机制——通过 HTTP 头传播 Trace ID,守护进程收集段,采样规则可配置
  • 追踪组件:
    • 段(Segments)——服务级工作记录
    • 子段(Subsegments)——下游操作的细粒度计时
    • 注解(Annotations)——可筛选搜索的索引键值对
    • 元数据(Metadata)——详细上下文,不建立索引
AWS 监控与故障排查

让我们一起练习吧!

AWS 监控与故障排查

Preparing Video For Download...