应用负载均衡器的分布式跟踪功能可提供端到端可见性,让您能够跟踪请求从客户端发出、经过负载均衡器、最终到达后端服务的整个过程。
Cloud Load Balancing 与 Cloud Trace 集成,可为负载均衡器处理的请求生成跟踪记录 span。由于负载均衡器是应用流量的入口点,因此在负载均衡器处启动和传播跟踪记录上下文可确保整个请求路径的诊断可见性。您可以使用这些跟踪记录来识别延迟时间瓶颈、找出故障跃点,以及排查多层架构中的错误。
负载均衡器会生成符合开放标准(W3C 跟踪记录上下文和 OpenTelemetry)的跟踪记录。使用 OpenTelemetry 插桩的后端服务可以继续负载均衡器启动的跟踪记录。
主要优势
使用 Cloud Trace 进行分布式跟踪具有以下优势:
- 端到端请求可见性:跟踪请求在外部和内部应用负载均衡器以及它们将流量路由到的后端服务之间的路径。
- 边缘可观测性:在负载均衡器选择后端之前,在转发规则处捕获跟踪 span,以便您可以看到后端插桩无法检测到的边缘错误和延迟时间。
- 解耦的遥测配置:在独立的
TelemetryPolicy资源中定义跟踪设置,而无需更改负载均衡器的路由配置。 - 跨遥测关联:将跟踪记录 span 与 Cloud Load Balancing 请求日志和 Cloud Monitoring 指标相关联,以查明延迟或错误的来源。
支持的负载均衡器
下表列出了支持分布式跟踪的负载均衡器以及每个负载均衡器支持的采样模式:
| 负载均衡器 | 负载均衡方案 | 概率抽样 | 基于父级的采样 |
|---|---|---|---|
| 全球外部应用负载均衡器 | EXTERNAL_MANAGED |
||
| 区域级外部应用负载均衡器 | EXTERNAL_MANAGED |
||
| 区域级内部应用负载均衡器 | INTERNAL_MANAGED |
||
| 跨区域内部应用负载均衡器 | INTERNAL_MANAGED |
传统应用负载均衡器不支持分布式跟踪。
分布式跟踪的工作原理
如需配置分布式跟踪,请在 Network Services API 中创建 TelemetryPolicy 资源。遥测政策指定以下内容:
- 目标:要跟踪的负载均衡器的转发规则。
- 跟踪配置:采样设置,用于确定负载均衡器跟踪哪些请求。
当请求到达遥测政策所针对的转发规则时,负载均衡器会决定是否对该请求进行采样。如果对请求进行采样,负载均衡器会生成一个跟踪 span,将该 span 发送到 Cloud Trace,并在 W3C traceparent 请求标头中将跟踪记录上下文传播到后端。
转发规则附件
遥测政策以负载均衡器的转发规则为目标,该规则代表负载均衡器的前端。通过在转发规则中附加跟踪,负载均衡器可以跟踪进入虚拟 IP 地址 (VIP) 和端口的所有流量,包括在负载均衡器选择后端之前失败的请求。
遥测政策具有以下特征:
- 独立生命周期:遥测政策独立于后端服务、网址映射和目标代理。您可以创建、修改或删除遥测政策,而无需更改负载均衡器路由流量的方式。
- 可跨前端重复使用:单个遥测政策可以定位到多条转发规则,因此您可以在多个负载均衡器前端应用一致的跟踪设置。
- 位置级:在
global位置创建遥测政策,以定位全局转发规则,例如全球外部应用负载均衡器和跨区域内部应用负载均衡器使用的规则。在某个区域中创建遥测政策,以定位该区域中的区域级转发规则,例如区域级外部应用负载均衡器和区域级内部应用负载均衡器使用的转发规则。
采样模式
分布式跟踪支持以下采样模式。如需详细了解每个负载均衡器支持的采样模式,请参阅本文档中的支持的负载均衡器。
- 概率采样:负载均衡器对固定比例的请求进行采样,您可以在
samplingRate字段中设置该比例。例如,值为0.01表示对 1% 的请求进行采样。所有受支持的负载均衡器都支持概率采样。 基于父级的采样:负载均衡器会遵循来自上游客户端或服务的传入
traceparent标头中的采样决策。您可以在parentBasedSampling字段中配置基于父级的采样。只有内部应用负载均衡器支持基于父级的采样。启用基于父级的采样后,负载均衡器会按如下方式处理请求:
- 如果传入的
traceparent标头设置了采样标志,则负载均衡器会按照parentBasedSampling.samplingRate字段中指定的速率对请求进行采样。例如,将此字段设置为1.0可跟踪上游服务已采样的所有请求。 - 如果传入的
traceparent标头未设置采样标志,则负载均衡器不会对请求进行采样。此行为遵循上游决策并遵循 OpenTelemetry 规范,可防止断开连接的跟踪记录出现在 Cloud Trace 中。 - 如果请求不包含
traceparent标头,则负载均衡器会应用基准samplingRate。
- 如果传入的
跟踪记录上下文标头处理
负载均衡器会按如下方式处理 W3C traceparent 标头:
- 未启用跟踪,或未对请求进行采样:负载均衡器会将传入的
traceparent标头原封不动地转发到后端。 - 请求已采样,且不包含
traceparent标头:负载均衡器会生成新的跟踪记录 ID 和 span ID,并将跟踪标志设置为03(随机和采样)。 - 请求已采样并包含
traceparent标头:负载均衡器会保留传入的跟踪记录 ID 和随机标志,生成新的 span ID,并设置采样标志。
使用 OpenTelemetry SDK 和 W3C 跟踪记录上下文传播器的后端服务会自动读取 traceparent 标头并继续跟踪。如需了解详情,请参阅跟踪记录上下文。
常见使用场景
本部分介绍了分布式跟踪的常见场景。
监控店面边缘
电子商务店面使用全球外部应用负载均衡器来接收客户流量。为了监控边缘延迟时间和错误(例如 404 响应和 TLS 故障),您需要将具有概率抽样的遥测政策附加到店面的转发规则。较低的采样率(例如 0.01 (1%))可确保在流量高峰事件期间 Cloud Trace 提取费用可预测。
在结账服务之间保持跟踪连续性
结账请求从店面通过内部应用负载均衡器传输到内部购物车、商品目录和支付服务。为了确保在店面采样的结账请求在每个内部跃点中都得到跟踪,您可以在内部负载均衡器上启用基于父级的采样,并将 parentBasedSampling.samplingRate 设置为 1.0。不携带上游采样决策的常规内部流量会按基准 samplingRate 进行采样。
查找延迟时间瓶颈
当结账延迟时间增加或 5xx 错误激增时,您需要将 Cloud Trace 中的负载均衡器 span 与负载均衡器请求日志和延迟时间指标进行比较。这种比较有助于您确定问题是源自负载均衡器边缘、内部负载均衡器跃点还是后端服务。
价格
负载均衡器不会针对生成跟踪 span 收费。不过,Cloud Trace 会根据 Cloud Trace 价格针对跟踪记录 span 注入收取相应费用。
如需管理高流量生产工作负载的注入费用,我们建议将 samplingRate 设置为 0.01 (1%) 或 0.001 (0.1%)。
限制
在预览版期间,应用负载均衡器的分布式跟踪具有以下限制:
- 外部应用负载均衡器不支持基于父级的采样。
- 不支持自定义 span 属性。
- 您无法使用 Google Kubernetes Engine Gateway API 或 Terraform 配置分布式跟踪。
- 单个遥测政策最多可以定位 50 个资源。
Agent Gateway 的分布式跟踪
如果您使用 Agent Gateway 管理 AI 智能体的流量,请参阅通过 Agent Gateway 监控流量,了解如何监控智能体流量。