Enabling tracing in OpenTelemetry
Below are examples of the code enabling OpenTelemetry tracing in different YDB SDKs.
Go (native)
Go (database/sql)
package main
import (
"context"
"github.com/ydb-platform/ydb-go-sdk/v3"
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
ydbOtel "github.com/ydb-platform/ydb-go-sdk-otel"
ydbZap "github.com/ydb-platform/ydb-go-sdk-zap"
otelTrace "go.opentelemetry.io/otel/sdk/trace"
)
func main() {
...
tracerProvider := otelTrace.NewTracerProvider(
// WithBatcher registers the exporter with the TracerProvider.
// The exporter must implement the SpanExporter interface.
// You can use any OpenTelemetry exporter (Jaeger, Zipkin, etc).
otelTrace.WithBatcher(exp),
// WithResource attaches metadata (like service name and environment) to all spans
// created by this TracerProvider. Use resource.NewWithAttributes with standard
// semantic keys such as semconv.ServiceNameKey.
otelTrace.WithResource(resource.NewWithAttributes(res)),
)
defer tracerProvider.Shutdown(ctx)
// Set global tracer of this application.
otel.SetTracerProvider(tracerProvider)
// Create a root span.
ctx, span := tracerProvider.Tracer("ydb-go-sdk-example").Start(context.Background(), "client")
defer span.End()
// If you want to see otel-trace-id in the logs,
// it’s important to connect the adapters in a specific order — first otel, then logger.
db, err := ydb.Open(ctx,
os.Getenv("YDB_CONNECTION_STRING"),
ydbOtel.WithTraces(ydbOtel.WithDetails(trace.DetailsAll)),
ydbZap.WithTraces(logger, trace.DetailsAll),
)
if err != nil {
panic(err)
}
defer db.Close(ctx)
...
}
package main
import (
"context"
"database/sql"
"github.com/ydb-platform/ydb-go-sdk/v3"
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
ydbOtel "github.com/ydb-platform/ydb-go-sdk-otel"
ydbZap "github.com/ydb-platform/ydb-go-sdk-zap"
otelTrace "go.opentelemetry.io/otel/sdk/trace"
)
func main() {
...
tracerProvider := otelTrace.NewTracerProvider(
// WithBatcher registers the exporter with the TracerProvider.
// The exporter must implement the SpanExporter interface.
// You can use any OpenTelemetry exporter (Jaeger, Zipkin, etc).
otelTrace.WithBatcher(exp),
// WithResource attaches metadata (like service name and environment) to all spans
// created by this TracerProvider. Use resource.NewWithAttributes with standard
// semantic keys such as semconv.ServiceNameKey.
otelTrace.WithResource(resource.NewWithAttributes(res)),
)
defer tracerProvider.Shutdown(ctx)
// Set global tracer of this application.
otel.SetTracerProvider(tracerProvider)
// Create a root span.
ctx, span := traceProvider.Tracer("ydb-go-sdk-example").Start(context.Background(), "client")
defer span.End()
// If you want to see otel-trace-id in the logs,
// it’s important to connect the adapters in a specific order — first otel, then logger.
nativeDriver, err := ydb.Open(ctx,
os.Getenv("YDB_CONNECTION_STRING"),
ydbOtel.WithTraces(ydbOtel.WithDetails(trace.DetailsAll)),
ydbZap.WithTraces(logger, trace.DetailsAll),
)
if err != nil {
panic(err)
}
defer nativeDriver.Close(ctx)
connector, err := ydb.Connector(nativeDriver)
if err != nil {
panic(err)
}
db := sql.OpenDB(connector)
defer db.Close()
...
}
Was the article helpful?
Previous
Next