您可以针对 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) 格式的日志、指标和跟踪记录数据发送到您的项目。
如需了解如何直接导出跟踪记录数据并将该数据发送到 Telemetry API,请参阅从 Trace 导出器迁移到 OTLP 端点。
如需查看展示如何配置智能体应用以收集提示和回答的示例,请参阅面向 AI 智能体开发者的可观测性。
- 如需了解可生成跟踪 span 的 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 API 和 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"