本文說明如何使用 OpenTelemetry 設定用戶端和端對端追蹤。如要啟用端對端追蹤,請先設定用戶端追蹤。詳情請參閱「追蹤記錄收集總覽」。
事前準備
-
為確保應用程式使用的服務帳戶具備設定追蹤記錄收集作業的必要權限,請要求管理員在專案中,將下列 IAM 角色授予應用程式使用的服務帳戶:
-
所有項目:
Cloud 遙測資料追蹤記錄寫入者 (
roles/telemetry.tracesWriter)
-
所有項目:
Cloud 遙測資料追蹤記錄寫入者 (
確認專案已啟用 Cloud Trace 和 Telemetry API。如要進一步瞭解如何啟用 API,請參閱「啟用 API」。
設定用戶端追蹤
如要使用 OpenTelemetry Protocol (OTLP) 匯出追蹤記錄,請設定應用程式。您可以將資料傳送至 OpenTelemetry Collector,也可以透過 Telemetry API 直接傳送至 Cloud Trace。這兩種方法使用相同的依附元件和設定。兩者唯一的差異在於匯出工具使用的 OTLP 端點。
使用 OpenTelemetry 通訊協定匯出追蹤記錄
如要使用 OpenTelemetry Protocol 匯出追蹤記錄,請設定 OpenTelemetry SDK 和 OTLP 匯出工具:
使用下列程式碼,將必要依附元件新增至應用程式:
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
Node.js
"@opentelemetry/exporter-trace-otlp-grpc": "^0.57.0", "@opentelemetry/sdk-trace-base": "^1.26.0", "@opentelemetry/sdk-trace-node": "^1.26.0",
Python
pip install opentelemetry-api opentelemetry-sdk pip install opentelemetry-exporter-otlp
設定 OpenTelemetry 物件並啟用追蹤功能。
Java
Go
Node.js
Python
設定端對端追蹤
本節提供相關操作說明,協助您在 Spanner 用戶端程式庫中設定端對端追蹤:
使用下列程式碼,將必要依附元件新增至應用程式:
Java
現有的用戶端追蹤依附元件足以設定端對端追蹤。不需要任何額外的依附元件。
Go
除了用戶端追蹤所需的依附元件外,您還需要下列依附元件:
go.opentelemetry.io/otel/propagation v1.28.0Node.js
現有的用戶端追蹤依附元件足以設定端對端追蹤。不需要任何額外的依附元件。
Python
現有的用戶端追蹤依附元件足以設定端對端追蹤。不需要任何額外的依附元件。
啟用端對端追蹤。
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...)
Node.js
const spanner = new Spanner({ projectId: projectId, observabilityOptions: { tracerProvider: openTelemetryTracerProvider, enableEndToEndTracing: true, } })
Python
observability_options={ "tracer_provider": tracer_provider, "enable_end_to_end_tracing": True, } spanner = spanner.Client(project_id, observability_options=observability_options)
在 OpenTelemetry 中設定追蹤記錄脈絡傳播。
Java
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider(sdkTracerProvider) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) .buildAndRegisterGlobal();
Go
// Register the TraceContext propagator globally. otel.SetTextMapPropagator(propagation.TraceContext{})
Node.js
const {propagation} = require('@opentelemetry/api'); const {W3CTraceContextPropagator} = require('@opentelemetry/core'); propagation.setGlobalPropagator(new W3CTraceContextPropagator());
Python
from opentelemetry.propagate import set_global_textmap from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator set_global_textmap(TraceContextTextMapPropagator())
端對端追蹤屬性
端對端追蹤記錄可能包含下列資訊:
| 屬性名稱 | 說明 |
|---|---|
| service.name | 屬性值一律為 spanner_api_frontend。 |
| cloud.region | Spanner API 前端的雲端區域,負責處理應用程式要求。 Google Cloud |
| gcp.spanner.server.query.fingerprint | 屬性值為查詢指紋。如要進一步偵錯這項查詢,請參閱「查詢統計資料表」中的 TEXT_FINGERPRINT 欄。 |
| gcp.spanner.server.paxos.participantcount | 參與交易的人數。詳情請參閱「Cloud Spanner 的讀取與寫入」。 |
| gcp.spanner.isolation_level | 屬性值是交易的隔離等級。
可能的值為 SERIALIZABLE 和 REPEATABLE_READ。詳情請參閱隔離等級總覽。 |
追蹤記錄樣本
端對端追蹤記錄可讓您查看下列詳細資料:
- 應用程式與 Spanner 之間的延遲時間。您可以計算網路延遲,確認是否有任何網路問題。
- 應用程式要求所使用的 Spanner API 前端雲端區域。您可以使用這項功能,檢查應用程式與 Spanner 之間的跨區域呼叫。
在下列範例中,您的應用程式要求是由 us-west1 區域的 Spanner API 前端提供服務,網路延遲時間為 8.542 毫秒 (55.47 毫秒 - 46.928 毫秒)。

後續步驟
- 如要進一步瞭解 OpenTelemetry,請參閱 OpenTelemetry 說明文件。