您可以针对 Cloud Trace 对应用进行插桩处理,以捕获分布式跟踪数据、检查各个请求的延迟时间,并在 Trace 控制台中查看各项服务的汇总延迟时间。
本文档简要介绍了插桩方法和配置选项。如需查看特定编程语言的分步说明,请参阅特定于语言的设置页面。
何时对应用进行插桩处理
如果系统未自动捕获用于验证性能或排查问题的轨迹数据,请对应用进行插桩。
对应用进行插桩,以收集有助于您了解其性能并排查故障的特定信息。 有几种开源插桩框架可收集日志、指标和跟踪记录数据,并将这些数据发送给任何供应商,包括 Google Cloud。对于智能体应用,某些框架可以收集您的提示和回答,或传递上下文,以便跟踪某些远程 Google Cloud MCP 服务器 调用。
如需对应用进行插桩,我们建议您使用不受制于供应商的开源插桩框架(例如 OpenTelemetry),而不是使用供应商和产品特有的 API 或客户端库。如需了解这些框架,请参阅 插桩和可观测性以及选择插桩方法。
如何对应用进行插桩处理
您可以使用多种方法来检测应用:
建议:使用 OpenTelemetry,为应用配置一个 OTLP 导出器,该导出器会将跟踪记录数据发送到收集器,并配置收集器以使用 Telemetry (OTLP) API 将跟踪记录数据发送到您的 Google Cloud 项目。如需详细了解我们的建议,请参阅选择插桩方法。
使用 OpenTelemetry 并使用 OTLP 导出器配置应用,该导出器会使用 Telemetry API 将跟踪记录数据发送到您的 Google Cloud 项目。
如果您编写的应用在 Compute Engine 上运行,则可以使用 Ops Agent 和 OpenTelemetry 协议 (OTLP) 接收器从应用中收集跟踪记录和指标。Ops Agent 也可以收集日志,但不能使用 OTLP。如需了解详情,请参阅使用 Ops Agent 和 OTLP 以及 Ops Agent 概览。
直接调用 Telemetry API 或 Cloud Trace API。
对于 Spring Boot 应用,请将其配置为将收集的跟踪记录数据转发到 Cloud Trace。如需了解此过程,请参阅 Spring Cloud for Google Cloud:Cloud Trace。
使用 Cloud Trace 客户端库或使用适用于 OpenTelemetry 的 Cloud Trace 导出器。
插桩示例
我们提供的插桩示例使用 OpenTelemetry:
对于使用基于收集器的导出的示例,请参阅以下内容:
这些示例使用 Telemetry API 将遵循 OpenTelemetry 协议 (OTLP) 格式的指标和跟踪记录数据发送到您的项目。示例使用 Google Cloud 导出器来导出日志数据。
如需了解如何直接导出跟踪记录数据并将该数据发送到 Telemetry API,请参阅从 Trace 导出器迁移到 OTLP 端点。
如需查看有关如何配置代理式应用以收集提示和回答的示例,请参阅如何对生成式 AI 应用进行插桩处理。
- 如需了解可生成跟踪区间的 Google Cloud MCP 服务器,请参阅使用 Trace 调查 MCP 调用。
创建自定义 span
虽然 OpenTelemetry 和客户端库允许您创建自定义 span,但您可能不需要手动创建,因为这些库会在 RPC 边界自动创建 span。
您还可以通过向现有 span 添加自定义注释和标记来添加与应用相关的信息,或者创建具有自己的注释和标记的新子 span,以更精细地跟踪应用的行为。
库通常会维护一个全局跟踪上下文,其中包含有关当前 span 的信息,包括其跟踪 ID 和采样状态。应用可以通过全局跟踪上下文访问当前 span。由于上下文是全局性的,因此请确保多线程应用在线程之间传播上下文,以保持跟踪数据的准确性。
强制跟踪记录采样
您无法强制对 span 进行抽样,因为请求路径中的每个组件都会做出独立的抽样决策。不过,您可以通过将轨迹标头中的 sampled 标志设置为 true 来影响下游组件。此设置用于向子级组件提示对请求进行抽样。
如需详细了解跟踪标头,请参阅上下文传播协议。
您的应用:您可以配置插桩逻辑如何遵循
sampled标志。例如,使用 OpenTelemetry 时,您可以使用ParentBased采样器来确保父级的采样标志得到遵守。Google Cloud 服务:每项服务都会自行确定其跟踪支持。 一般来说,服务会接受父级抽样标志作为提示,同时强制执行自己的抽样率限制。
使用范例将指标和跟踪记录相关联
您可以使用范例将指标数据与跟踪记录相关联。范例是与指标测量相关联的代表性样本请求或 span。例如,范例可以包含指向跟踪记录的链接,以便您可以将指标与跟踪记录数据相关联。如需查看基于 OpenTelemetry 的示例,请参阅使用范例将指标和跟踪记录相关联。
您可能会在显示轨迹数据的 SQL 查询结果的信息中心图表中看到系统生成的示例。这些示例将特定查询结果直接关联到轨迹。如需了解详情,请参阅生成和显示轨迹范例。
配置项目和平台
本部分介绍了所需的 API 和 Identity and Access Management (IAM) 角色,并说明了如何为平台配置身份验证凭据。
启用 API
默认情况下, Google Cloud 项目已启用 Cloud Trace API 和 Telemetry API,您无需采取任何行动。不过,您的组织定义的安全限制条件可能已停用其中一个或全部这两个 API。如需了解相关问题排查信息,请参阅在受限的 Google Cloud 环境中开发应用。
启用 Telemetry 和 Cloud Trace API(如果尚未启用)。
启用 API 所需的角色
如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获取此权限。
了解如何授予角色。
授予 IAM 角色
所需的 IAM 角色取决于您是在 Google Cloud 控制台中查看跟踪记录数据,还是将跟踪记录数据写入项目:
-
如需获得使用 Google Cloud 控制台查看跟踪记录数据所需的权限,请让您的管理员为您授予项目的 Cloud Trace User (
roles/cloudtrace.user) IAM 角色。
-
如需获得使用 Cloud Trace API 写入跟踪记录数据所需的权限,请让您的管理员为您授予项目的 Cloud Trace Agent (
roles/cloudtrace.agent) IAM 角色。
-
如需获得使用 Telemetry API 写入跟踪数据所需的权限,请让您的管理员为您授予项目的 Cloud Telemetry Writer 角色 (
roles/telemetry.writer) IAM 角色。
身份验证
本部分介绍了当应用在Google Cloud 上运行时以及在其他位置运行时如何进行身份验证。
在 Google Cloud上运行
当您的应用在 Google Cloud上运行时,通常不需要提供身份验证凭据。不过,即使托管在 Google Cloud上,某些语言客户端库也需要项目 ID。
验证您的 Google Cloud 平台是否已启用 Cloud Trace API 访问权限范围。对于以下配置,默认访问权限范围设置包含 Cloud Trace API 访问权限范围:
如果您使用自定义访问权限范围,则必须确保已启用 Cloud Trace API 访问权限范围。例如,如果您使用 Google Cloud CLI 创建 GKE 集群,并且指定了 --scopes 标志,请确保相应范围包含 trace.append。以下命令演示了如何设置 --scopes 标志:
gcloud container clusters create example-cluster-name --scopes=https://www.googleapis.com/auth/trace.append
在本地和其他位置运行
如果您的应用在 Google Cloud之外运行,则必须向客户端库提供身份验证凭据。必须为服务账号授予 Cloud Trace Agent 角色 (roles/cloudtrace.agent)。如需了解角色,请参阅使用 IAM 控制访问权限。
Google Cloud 客户端库使用应用默认凭证 (ADC) 来查找应用的凭证。您可以通过以下三种方式之一提供这些凭据:
运行:
gcloud auth application-default login将服务账号密钥文件放置在操作系统默认路径中。 以下列出了 Windows 和 Linux 的默认路径:
Windows:
%APPDATA%/gcloud/application_default_credentials.jsonLinux:
$HOME/.config/gcloud/application_default_credentials.json
将
GOOGLE_APPLICATION_CREDENTIALS环境变量设置为服务账号的路径:Linux/macOS
export GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key
PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="path-to-your-service-accounts-private-key"