Added OpenTelemetry and use structured logging

This commit is contained in:
Robin Dittmar
2026-07-07 16:18:14 +02:00
parent 860563b47f
commit 0dec97a865
10 changed files with 191 additions and 30 deletions
+57
View File
@@ -0,0 +1,57 @@
package telemetry
import (
"context"
"errors"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/propagation"
"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),
semconv.ServiceVersion(version),
),
)
if err != nil {
return shutdown, err
}
otel.SetTextMapPropagator(
propagation.NewCompositeTextMapPropagator(
propagation.TraceContext{},
propagation.Baggage{},
),
)
traceExporter, err := otlptracegrpc.New(ctx)
if err != nil {
return shutdown, err
}
tracerProvider := sdktrace.NewTracerProvider(
sdktrace.WithBatcher(traceExporter),
sdktrace.WithResource(res),
)
otel.SetTracerProvider(tracerProvider)
shutdownFns = append(shutdownFns, tracerProvider.Shutdown)
return shutdown, nil
}