1818
1919import google .cloud .spanner as spanner
2020from opentelemetry .exporter .cloud_trace import CloudTraceSpanExporter
21+ from opentelemetry .exporter .otlp .proto .grpc .trace_exporter import OTLPSpanExporter
2122from opentelemetry .sdk .trace import TracerProvider
2223from opentelemetry .sdk .trace .export import BatchSpanProcessor
2324from opentelemetry .sdk .trace .sampling import ALWAYS_ON
2425from opentelemetry import trace
2526from opentelemetry .propagate import set_global_textmap
2627from opentelemetry .trace .propagation .tracecontext import TraceContextTextMapPropagator
2728
29+ # Setup common variables that'll be used between Spanner and traces.
30+ project_id = os .environ .get ('SPANNER_PROJECT_ID' , 'test-project' )
2831
29- def main ():
30- # Setup common variables that'll be used between Spanner and traces.
31- project_id = os .environ .get ('SPANNER_PROJECT_ID' , 'test-project' )
32-
32+ def spanner_with_cloud_trace ():
33+ # [START spanner_opentelemetry_traces_cloudtrace_usage]
3334 # Setup OpenTelemetry, trace and Cloud Trace exporter.
3435 tracer_provider = TracerProvider (sampler = ALWAYS_ON )
3536 trace_exporter = CloudTraceSpanExporter (project_id = project_id )
@@ -40,6 +41,35 @@ def main():
4041 project_id ,
4142 observability_options = dict (tracer_provider = tracer_provider , enable_extended_tracing = True , enable_end_to_end_tracing = True ),
4243 )
44+
45+ # [END spanner_opentelemetry_traces_cloudtrace_usage]
46+ return spanner_client
47+
48+ def spanner_with_otlp ():
49+ # [START spanner_opentelemetry_traces_otlp_usage]
50+ # Setup OpenTelemetry, trace and OTLP exporter.
51+ tracer_provider = TracerProvider (sampler = ALWAYS_ON )
52+ otlp_exporter = OTLPSpanExporter (endpoint = "http://localhost:4317" )
53+ tracer_provider .add_span_processor (BatchSpanProcessor (otlp_exporter ))
54+
55+ # Setup the Cloud Spanner Client.
56+ spanner_client = spanner .Client (
57+ project_id ,
58+ observability_options = dict (tracer_provider = tracer_provider , enable_extended_tracing = True , enable_end_to_end_tracing = True ),
59+ )
60+ # [END spanner_opentelemetry_traces_otlp_usage]
61+ return spanner_client
62+
63+
64+ def main ():
65+ # Setup OpenTelemetry, trace and Cloud Trace exporter.
66+ tracer_provider = TracerProvider (sampler = ALWAYS_ON )
67+ trace_exporter = CloudTraceSpanExporter (project_id = project_id )
68+ tracer_provider .add_span_processor (BatchSpanProcessor (trace_exporter ))
69+
70+ # Setup the Cloud Spanner Client.
71+ # Change to "spanner_client = spanner_with_otlp" to use OTLP exporter
72+ spanner_client = spanner_with_cloud_trace ()
4373 instance = spanner_client .instance ('test-instance' )
4474 database = instance .database ('test-db' )
4575
0 commit comments