refactor(telemetry): update OpenTelemetry SDK imports and types for metrics and tracing

This commit is contained in:
Marc Schäfer
2025-10-10 19:17:02 +02:00
parent e04c654292
commit 186b51e000

View File

@@ -17,9 +17,9 @@ import (
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/exporters/prometheus" "go.opentelemetry.io/otel/exporters/prometheus"
sdkmetric "go.opentelemetry.io/otel/sdk/metric" "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/resource" "go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.26.0" semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
"google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials"
) )
@@ -98,8 +98,8 @@ func FromEnv() Config {
// Setup holds initialized telemetry providers and (optionally) a /metrics handler. // Setup holds initialized telemetry providers and (optionally) a /metrics handler.
// Call Shutdown when the process terminates to flush exporters. // Call Shutdown when the process terminates to flush exporters.
type Setup struct { type Setup struct {
MeterProvider *sdkmetric.MeterProvider MeterProvider *metric.MeterProvider
TracerProvider *sdktrace.TracerProvider TracerProvider *trace.TracerProvider
PrometheusHandler http.Handler // nil if Prometheus exporter disabled PrometheusHandler http.Handler // nil if Prometheus exporter disabled
@@ -171,8 +171,8 @@ func buildResource(ctx context.Context, cfg Config) *resource.Resource {
return res return res
} }
func setupMetricExport(ctx context.Context, cfg Config, _ *resource.Resource) ([]sdkmetric.Reader, http.Handler, []func(context.Context) error, error) { func setupMetricExport(ctx context.Context, cfg Config, _ *resource.Resource) ([]metric.Reader, http.Handler, []func(context.Context) error, error) {
var readers []sdkmetric.Reader var readers []metric.Reader
var shutdowns []func(context.Context) error var shutdowns []func(context.Context) error
var promHandler http.Handler var promHandler http.Handler
if cfg.PromEnabled { if cfg.PromEnabled {
@@ -200,25 +200,25 @@ func setupMetricExport(ctx context.Context, cfg Config, _ *resource.Resource) ([
if err != nil { if err != nil {
return nil, nil, nil, err return nil, nil, nil, err
} }
readers = append(readers, sdkmetric.NewPeriodicReader(mexp, sdkmetric.WithInterval(cfg.MetricExportInterval))) readers = append(readers, metric.NewPeriodicReader(mexp, metric.WithInterval(cfg.MetricExportInterval)))
shutdowns = append(shutdowns, mexp.Shutdown) shutdowns = append(shutdowns, mexp.Shutdown)
} }
return readers, promHandler, shutdowns, nil return readers, promHandler, shutdowns, nil
} }
func buildMeterProvider(res *resource.Resource, readers []sdkmetric.Reader) *sdkmetric.MeterProvider { func buildMeterProvider(res *resource.Resource, readers []metric.Reader) *metric.MeterProvider {
var mpOpts []sdkmetric.Option var mpOpts []metric.Option
mpOpts = append(mpOpts, sdkmetric.WithResource(res)) mpOpts = append(mpOpts, metric.WithResource(res))
for _, r := range readers { for _, r := range readers {
mpOpts = append(mpOpts, sdkmetric.WithReader(r)) mpOpts = append(mpOpts, metric.WithReader(r))
} }
mpOpts = append(mpOpts, sdkmetric.WithView(sdkmetric.NewView( mpOpts = append(mpOpts, metric.WithView(metric.NewView(
sdkmetric.Instrument{Name: "newt_*_latency_seconds"}, metric.Instrument{Name: "newt_*_latency_seconds"},
sdkmetric.Stream{Aggregation: sdkmetric.AggregationExplicitBucketHistogram{Boundaries: []float64{0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 30}}}, metric.Stream{Aggregation: metric.AggregationExplicitBucketHistogram{Boundaries: []float64{0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 30}}},
))) )))
mpOpts = append(mpOpts, sdkmetric.WithView(sdkmetric.NewView( mpOpts = append(mpOpts, metric.WithView(metric.NewView(
sdkmetric.Instrument{Name: "newt_*"}, metric.Instrument{Name: "newt_*"},
sdkmetric.Stream{AttributeFilter: func(kv attribute.KeyValue) bool { metric.Stream{AttributeFilter: func(kv attribute.KeyValue) bool {
k := string(kv.Key) k := string(kv.Key)
switch k { switch k {
case "tunnel_id", "transport", "direction", "protocol", "result", "reason", "initiator", "error_type", "msg_type", "phase", "version", "commit", "site_id", "region": case "tunnel_id", "transport", "direction", "protocol", "result", "reason", "initiator", "error_type", "msg_type", "phase", "version", "commit", "site_id", "region":
@@ -228,10 +228,10 @@ func buildMeterProvider(res *resource.Resource, readers []sdkmetric.Reader) *sdk
} }
}}, }},
))) )))
return sdkmetric.NewMeterProvider(mpOpts...) return metric.NewMeterProvider(mpOpts...)
} }
func setupTracing(ctx context.Context, cfg Config, res *resource.Resource) (*sdktrace.TracerProvider, func(context.Context) error) { func setupTracing(ctx context.Context, cfg Config, res *resource.Resource) (*trace.TracerProvider, func(context.Context) error) {
topts := []otlptracegrpc.Option{otlptracegrpc.WithEndpoint(cfg.OTLPEndpoint)} topts := []otlptracegrpc.Option{otlptracegrpc.WithEndpoint(cfg.OTLPEndpoint)}
if hdrs := parseOTLPHeaders(os.Getenv("OTEL_EXPORTER_OTLP_HEADERS")); len(hdrs) > 0 { if hdrs := parseOTLPHeaders(os.Getenv("OTEL_EXPORTER_OTLP_HEADERS")); len(hdrs) > 0 {
topts = append(topts, otlptracegrpc.WithHeaders(hdrs)) topts = append(topts, otlptracegrpc.WithHeaders(hdrs))
@@ -247,7 +247,7 @@ func setupTracing(ctx context.Context, cfg Config, res *resource.Resource) (*sdk
if err != nil { if err != nil {
return nil, nil return nil, nil
} }
tp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exp), sdktrace.WithResource(res)) tp := trace.NewTracerProvider(trace.WithBatcher(exp), trace.WithResource(res))
return tp, exp.Shutdown return tp, exp.Shutdown
} }