- 3.51.0 (latest)
- 3.50.1
- 3.46.0
- 3.45.0
- 3.44.0
- 3.43.0
- 3.42.0
- 3.41.0
- 3.40.1
- 3.39.0
- 3.38.0
- 3.37.0
- 3.36.0
- 3.35.1
- 3.34.0
- 3.33.0
- 3.32.0
- 3.31.0
- 3.30.0
- 3.29.0
- 3.28.0
- 3.27.1
- 3.26.0
- 3.25.0
- 3.24.0
- 3.23.0
- 3.22.2
- 3.21.0
- 3.20.0
- 3.19.0
- 3.18.0
- 3.17.0
- 3.16.0
- 3.15.1
- 3.14.1
- 3.13.0
- 3.12.1
- 3.11.1
- 3.10.0
- 3.9.0
- 3.8.0
- 3.7.0
- 3.6.0
- 3.5.0
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.0
- 3.0.0
- 2.1.1
- 2.0.0
- 1.19.3
- 1.18.0
- 1.17.1
- 1.16.0
- 1.15.1
- 1.14.0
- 1.13.0
- 1.12.0
- 1.11.0
- 1.10.0
Tracing with OpenTelemetry
This library uses OpenTelemetry to automatically generate traces providing insight on calls to Cloud Spanner. For information on the benefits and utility of tracing, see the Cloud Trace docs.
To take advantage of these traces, we first need to install OpenTelemetry:
pip install opentelemetry-api opentelemetry-sdk
pip install opentelemetry-exporter-gcp-trace
We also need to tell OpenTelemetry which exporter to use. To export Spanner traces to Cloud Tracing, add the following lines to your application:
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.sampling import TraceIdRatioBased
from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
# BatchSpanProcessor exports spans to Cloud Trace
# in a seperate thread to not block on the main thread
from opentelemetry.sdk.trace.export import BatchSpanProcessor
# Create and export one trace every 1000 requests
sampler = TraceIdRatioBased(1/1000)
tracer_provider = TracerProvider(sampler=sampler)
tracer_provider.add_span_processor(
# Initialize the cloud tracing exporter
BatchSpanProcessor(CloudTraceSpanExporter())
)
observability_options = dict(
tracer_provider=tracer_provider,
# By default extended_tracing is set to True due
# to legacy reasons to avoid breaking changes, you
# can modify it though using the environment variable
# SPANNER_ENABLE_EXTENDED_TRACING=false.
enable_extended_tracing=False,
)
spanner = spanner.NewClient(project_id, observability_options=observability_options)
To get more fine-grained traces from gRPC, you can enable the gRPC instrumentation by the following
pip install opentelemetry-instrumentation opentelemetry-instrumentation-grpc
and then in your Python code, please add the following lines:
from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient
grpc_client_instrumentor = GrpcInstrumentorClient()
grpc_client_instrumentor.instrument()
Generated spanner traces should now be available on Cloud Trace.
Tracing is most effective when many libraries are instrumented to provide insight over the entire lifespan of a request. For a list of libraries that can be instrumented, see the OpenTelemetry Integrations section of the OpenTelemetry Python docs
Annotating spans with SQL
By default your spans will be annotated with SQL statements where appropriate, but that can be a PII (Personally Identifiable Information) leak. Sadly due to legacy behavior, we cannot simply turn off this behavior by default. However you can control this behavior by setting
SPANNER_ENABLE_EXTENDED_TRACING=false
to turn it off globally or when creating each SpannerClient, please set observability_options.enable_extended_tracing=false