Added OpenTelemetry metric exporter

This commit is contained in:
Robin Dittmar
2026-07-07 16:40:51 +02:00
parent 0dec97a865
commit a0381a06be
2 changed files with 33 additions and 16 deletions
+3 -1
View File
@@ -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
+30 -15
View File
@@ -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
}