链路追踪实现全链路分析

更新时间:
复制 MD 格式

ALB支持链路追踪功能。开启该功能后,ALB会在转发请求时自动注入追踪头部,帮助用户获得完整的请求追踪数据,包括请求来源、经过的节点、响应时间等信息,从而快速定位和解决分布式架构下的性能瓶颈。

背景信息

链路追踪为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑以及应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈。

一条链路数据对应一条调用链(Trace)。在广义上,一个调用链代表一个事务或者流程在分布式系统中的执行过程,由多个Span组成的一个有向无环图(DAG),每个Span代表调用链中被命名并计时的连续性执行片段。

开启ALB链路追踪功能后,ALB会在转发请求时自动注入或更新HTTP追踪头部,追踪数据上报至阿里云可观测链路 OpenTelemetry 版。支持OpenTelemetryZipkin两种链路追踪方式。

链路追踪方式

OpenTelemetry

ALB开启链路追踪功能且选择OpenTelemetry类型时,ALB会在将请求转发到后端服务器之前,添加或更新HTTP头部中的traceparent字段。traceparent字段的格式为:{version}-{traceid}-{parentid}-{traceflags}。各部分含义如下表所示。

字段

含义

格式

version

使用的OpenTelemetry版本

始终为00

traceid

标识本次追踪的ID

32位十六进制数字

parentid

标识追踪链路上本节点的ID

16位十六进制数字

traceflags

标识对本次请求是否进行采样

00(不采样)或01(采样),由配置的采样率决定

场景一:请求不携带traceparent

当客户端发送的请求头部不携带traceparent字段时,ALB会生成完整的traceparent字段并插入HTTP头部。

image

场景二:请求已携带traceparent

当上游服务已在请求头中携带traceparent字段时,ALB会继承versiontraceidtraceflags,仅生成新的parentid

image

字段值的变化对照:

部分

上游请求值

ALB转发值

处理方式

version

00

00

继承

traceid

7a3f91c4d8e26b5f9f3a7c1d6b4e8a25

7a3f91c4d8e26b5f9f3a7c1d6b4e8a25

继承

parentid

1d9b4e70a6cf3288

c8e14b7a2d95f360

新生成

traceflags

00

00

继承

Zipkin

ALB开启链路追踪功能且选择Zipkin类型时,ALB会在将请求转发到后端服务器之前,添加或更新HTTP头部中的X-B3-*字段。各字段含义如下表所示。

字段名

含义

格式

X-B3-TraceId

标识本次追踪的ID

16位十六进制数字

X-B3-SpanId

标识追踪链路上本节点的ID

16位十六进制数字

X-B3-ParentSpanId

标识追踪链路上前一个节点的ID

16位十六进制数字

X-B3-Sampled

标识对本次请求是否进行采样

0(不采样)或1(采样),由配置的采样率决定

场景一:请求不携带追踪头部

当客户端发送的请求头部不携带X-B3-*字段时,ALB会作为追踪链路的起始节点,生成X-B3-TraceIdX-B3-SpanIdX-B3-Sampled三个字段并插入HTTP头部。由于链路上没有上游节点,转发请求中不包含X-B3-ParentSpanId字段。

image

场景二:请求已携带追踪头部

当上游服务已在请求头中携带完整的X-B3-*字段时,ALB会继承X-B3-TraceIdX-B3-Sampled的值,生成新的X-B3-SpanId,并将上游请求中的X-B3-SpanId作为X-B3-ParentSpanId传递给后端服务器。

image

字段值的变化对照:

字段

上游请求值

ALB转发值

处理方式

X-B3-TraceId

7a3f91c4d8e26b5f

7a3f91c4d8e26b5f

继承

X-B3-SpanId

1d9b4e70a6cf3288

9f3a7c1d6b4e8a25

新生成

X-B3-ParentSpanId

e45c2a9f7b10d36e

1d9b4e70a6cf3288

取上游的SpanId

X-B3-Sampled

1

1

继承

适用范围

步骤一:开启链路追踪

  1. 登录ALB控制台,选择实例所属的地域,找到目标实例并单击实例ID。

  2. 单击监听页签,找到目标监听,单击监听ID。

  3. 监听详情页签的链路追踪区域,开启链路追踪开关。

  4. 开启链路追踪对话框,完成以下配置,单击保存

    • 开通服务

      • 开通可观测链路OpenTelemetry:首次使用需勾选服务协议确认开通。

    • 创建访问日志(若目标ALB实例未创建)

      • 项目Project:日志服务中的资源管理单元,用于资源隔离和控制。

        • 选择现有 Project:在下拉框中选择一个Project。

        • 新建 Project:在文本框中输入新建Project名称。

      • 日志库Logstore:日志服务中日志数据的采集、存储和查询单元。

        • 选择现有 Logstore:在下拉框中选择一个Logstore。

        • 新建 Logstore:在文本框中输入新建Logstore名称。Project选择新建时,Logstore也需选择新建。

    • 配置链路追踪

      • 链路追踪类型:支持选择OpenTelemetry(W3C)Zipkin(B3)

      • 采样率:取值范围1~100,默认值为100。通过设置采样率来调整链路上报量。

    • 服务关联角色创建须知:执行此操作时,系统将自动创建服务关联角色。

步骤二:查看链路数据

  1. 登录客户端终端,测试与后端服务器的连通性。可参考ALB快速实现IPv4服务的负载均衡

  2. 登录ALB控制台,选择实例所属的地域,找到目标实例并单击实例ID。

  3. 单击监听页签,找到目标监听,单击监听ID。

  4. 监听详情页签的链路追踪区域,单击调用链分析右侧的查看,前往可观测链路 OpenTelemetry版控制台查看链路数据

    页面顶部查询栏自动带入 attributes.app_lb_idattributes.slb_vport 筛选条件,左侧快捷筛选区支持按状态、耗时范围和应用名称进行过滤。

更多信息

关闭链路追踪

  • 链路追踪依赖访问日志,关闭访问日志会导致链路追踪不可用,请谨慎关闭。关闭链路追踪后,访问日志仍保持开启,如无须使用请手动关闭。

  • 实例下所有监听的链路追踪均关闭后,将停止向可观测链路 OpenTelemetry 版投递调用链数据。

计费说明

使用链路追踪功能,会默认开通阿里云可观测链路 OpenTelemetry 版服务和访问日志服务。开通使用后,会产生数据上报、链路存储以及日志服务等费用。

ALB链路追踪支持的地域

公有云支持的地域

区域

地域

中国

华东1(杭州)、华东2(上海)、华南1(深圳)、西南1(成都)、华北1(青岛)、华北2(北京)、华北3(张家口)、华北6(乌兰察布)、中国香港、华南3(广州)、华南2(河源)

亚太

新加坡、马来西亚(吉隆坡)、日本(东京)、印度尼西亚(雅加达)

欧洲与美洲

英国(伦敦)、德国(法兰克福)、美国(弗吉尼亚)、美国(硅谷)

金融云支持的地域

区域

地域

中国

华东2 金融云(上海)