本文档介绍了如何使用 OpenTelemetry 设置客户端和端到端跟踪。您需要先设置客户端跟踪,然后才能选择启用端到端跟踪。如需了解详情,请参阅轨迹收集概览。
准备工作
-
如需确保您的应用使用的服务账号具有设置轨迹收集所需的权限,请让您的管理员向您的应用使用的服务账号授予项目的 Cloud Trace Agent (
roles/cloudtrace.agent
) IAM 角色。
配置客户端跟踪
如需配置客户端跟踪,您需要导出轨迹。您可以将轨迹导出到收集器,也可以直接导出到可观测性后端。您可以使用 OpenTelemetry API 配置跟踪。
使用 OpenTelemetry API 将轨迹导出到收集器
如需使用 OpenTelemetry API 将轨迹导出到收集器,请配置 OpenTelemetry SDK 和 OLTP 导出器:
使用以下代码将必要的依赖项添加到您的应用:
Java
Go
go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0
配置 OpenTelemetry 对象并启用跟踪。
Java
Go
使用 OpenTelemetry API 直接导出到可观测性后端
如需配置 Spanner 客户端库以直接将跟踪跨度导出到 Cloud Trace 或其他可观测性服务提供商后端,请按以下步骤操作:
使用以下代码将必要的依赖项添加到您的应用:
Java
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-spanner</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-api</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk-common</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk-trace</artifactId> </dependency> <dependency> <groupId>com.google.cloud.opentelemetry</groupId> <artifactId>exporter-trace</artifactId> <version>0.30.0</version> </dependency>
Go
go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.24.1
配置 OpenTelemetry 对象并启用跟踪。
Java
Go
配置端到端跟踪
本部分介绍了如何在 Spanner 客户端库上配置端到端跟踪(预览版):
使用以下代码将必要的依赖项添加到您的应用:
Java
现有的客户端跟踪依赖项足以配置端到端跟踪。您无需任何其他依赖项。
Go
除了客户端跟踪所需的依赖项之外,您还需要以下依赖项:
go.opentelemetry.io/otel/propagation v1.28.0
选择启用端到端跟踪。
Java
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
Go
您可以在客户端配置中使用
EnableEndToEndTracing
选项选择启用。client, _ := spanner.NewClientWithConfig(ctx, "projects/test-project/instances/test-instance/databases/test-db", spanner.ClientConfig{ SessionPoolConfig: spanner.DefaultSessionPoolConfig, EnableEndToEndTracing: true, }, clientOptions...)
在 OpenTelemetry 中设置跟踪记录上下文传播。
Java
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider(sdkTracerProvider) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) .buildAndRegisterGlobal();
Go
// Register the TraceContext propagator globally. otel.SetTextMapPropagator(propagation.TraceContext{})
端到端跟踪属性
端到端轨迹可能包含以下信息:
特性名称 | 说明 |
---|---|
service.name | 属性值始终为 spanner_api_frontend 。 |
cloud.region | 处理应用请求的 Spanner API 前端的 Google Cloud 云区域。 |
gcp.spanner.query.fingerprint | 属性值是查询指纹。如需进一步调试此查询,请参阅“查询统计信息”表中的 TEXT_FINGERPRINT 列。 |
gcp.spanner.participants.count | 交易中涉及的参与者数量。如需了解详情,请参阅 Spanner 读写生命周期。 |
轨迹示例
通过端到端轨迹,您可以查看以下详细信息:
- 应用与 Spanner 之间的延迟时间。您可以计算网络延迟时间,看看是否存在任何网络问题。
- 您的应用请求来自哪个 Spanner API 前端云区域。您可以使用此方法检查应用与 Spanner 之间的跨区域调用。
在以下示例中,您的应用请求由 us-west1
区域中的 Spanner API 前端处理,网络延迟时间为 8.542 毫秒(55.47 毫秒 - 46.928 毫秒)。
后续步骤
- 如需详细了解 OpenTelemetry,请参阅 OpenTelemetry 文档。