spannerotel
OpenTelemetry helpers for cloud.google.com/go/spanner:
interceptor/ — gRPC stream interceptor that decorates spans with query stats and GFE timing
internal/plantotrace/ — PROFILE plan node spans
tracing/ — TracerProvider setup for Cloud Trace or stdout export
Spanner v1.90+ emits traces via OpenTelemetry natively; an OpenCensus bridge is not required.
Usage
import (
"cloud.google.com/go/spanner"
"github.com/apstndb/spannerotel/interceptor"
"github.com/apstndb/spannerotel/tracing"
"google.golang.org/api/option"
"google.golang.org/grpc"
)
tp, err := tracing.NewTracerProvider(tracing.Config{
Exporter: tracing.ExporterStdout,
PrettyStdout: true,
})
if err != nil {
// handle error
}
defer tracing.Shutdown(ctx, tp)
client, err := spanner.NewClientWithConfig(ctx, database, spanner.ClientConfig{
// ...
}, option.WithGRPCDialOption(grpc.WithChainStreamInterceptor(
interceptor.StreamInterceptor(interceptor.WithDefaultDecorators()),
)))
See example/query for a runnable PROFILE query with stdout tracing.