Feat: add telemetry

This commit is contained in:
Grail Finder
2025-07-11 16:20:43 +03:00
parent 9a949757f2
commit ea27d35254
6 changed files with 114 additions and 1 deletions

59
telemetry/telemetry.go Normal file
View File

@ -0,0 +1,59 @@
package telemetry
import (
"context"
"log"
"net/http"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/jaeger"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
)
// newJaegerExporter creates a new Jaeger exporter.
func newJaegerExporter() (sdktrace.SpanExporter, error) {
return jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint("http://localhost:14268/api/traces")))
}
// NewTracerProvider creates a new tracer provider.
func NewTracerProvider(exp sdktrace.SpanExporter) *sdktrace.TracerProvider {
res := resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceName("gralias"),
semconv.ServiceVersion("v0.1.0"),
)
tracerProvider := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithResource(res),
sdktrace.WithBatcher(exp),
)
return tracerProvider
}
// OtelMiddleware wraps the provided http.Handler with OpenTelemetry tracing.
func OtelMiddleware(handler http.Handler) http.Handler {
return otelhttp.NewHandler(handler, "http.server")
}
func InitTracer() func() {
exp, err := newJaegerExporter()
if err != nil {
log.Fatalf("failed to create exporter: %v", err)
}
tp := NewTracerProvider(exp)
otel.SetTracerProvider(tp)
return func() {
if err := tp.Shutdown(context.Background()); err != nil {
log.Printf("Error shutting down tracer provider: %v", err)
}
if err := exp.Shutdown(context.Background()); err != nil {
log.Printf("Error shutting down exporter: %v", err)
}
}
}