diff --git a/go.mod b/go.mod index 7bd873a..d35137e 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,11 @@ go 1.26 require ( go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 go.opentelemetry.io/otel v1.44.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.44.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.44.0 go.opentelemetry.io/otel/sdk v1.44.0 + go.opentelemetry.io/otel/sdk/metric v1.44.0 + go.opentelemetry.io/otel/trace v1.44.0 ) require ( @@ -20,7 +23,6 @@ require ( go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 // indirect go.opentelemetry.io/otel/metric v1.44.0 // indirect - go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/net v0.55.0 // indirect golang.org/x/sys v0.45.0 // indirect diff --git a/internal/telemetry/otel.go b/internal/telemetry/otel.go index 8e48cec..9b28412 100644 --- a/internal/telemetry/otel.go +++ b/internal/telemetry/otel.go @@ -5,25 +5,16 @@ import ( "errors" "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" "go.opentelemetry.io/otel/propagation" + sdkmetric "go.opentelemetry.io/otel/sdk/metric" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.24.0" ) func Init(ctx context.Context, serviceName string, version string) (func(context.Context) error, error) { - var shutdownFns []func(context.Context) error - - shutdown := func(ctx context.Context) error { - var err error - for _, fn := range shutdownFns { - err = errors.Join(err, fn(ctx)) - } - shutdownFns = nil - return err - } - res, err := resource.New(ctx, resource.WithAttributes( semconv.ServiceName(serviceName), @@ -31,7 +22,7 @@ func Init(ctx context.Context, serviceName string, version string) (func(context ), ) if err != nil { - return shutdown, err + return nil, err } otel.SetTextMapPropagator( @@ -41,17 +32,41 @@ func Init(ctx context.Context, serviceName string, version string) (func(context ), ) - traceExporter, err := otlptracegrpc.New(ctx) + traceExporter, err := otlptracegrpc.New(ctx, + otlptracegrpc.WithInsecure(), // TODO: for local development + otlptracegrpc.WithEndpoint("localhost:4317"), + ) if err != nil { - return shutdown, err + return nil, err } tracerProvider := sdktrace.NewTracerProvider( sdktrace.WithBatcher(traceExporter), sdktrace.WithResource(res), ) + + metricExporter, err := otlpmetricgrpc.New(ctx, + otlpmetricgrpc.WithInsecure(), + otlpmetricgrpc.WithEndpoint("localhost:4317"), + ) + if err != nil { + return nil, err + } + + meterProvider := sdkmetric.NewMeterProvider( + sdkmetric.WithReader(sdkmetric.NewPeriodicReader(metricExporter)), + sdkmetric.WithResource(res), + ) + otel.SetTracerProvider(tracerProvider) - shutdownFns = append(shutdownFns, tracerProvider.Shutdown) + otel.SetMeterProvider(meterProvider) + + shutdown := func(ctx context.Context) error { + return errors.Join( + traceExporter.Shutdown(ctx), + meterProvider.Shutdown(ctx), + ) + } return shutdown, nil }