36 lines
1.2 KiB
Go
36 lines
1.2 KiB
Go
// Package observability also bootstraps OpenTelemetry tracing. The tracer is
|
|
// initialized via shared-go/tracer so push-gateway and api-gateway share the
|
|
// same SDK configuration.
|
|
package observability
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/edu-cloud/shared-go/tracer"
|
|
)
|
|
|
|
// InitTracer initializes the OTel tracer using shared-go/tracer. When the
|
|
// OTLP endpoint is empty (or "localhost:4318") the exporter still runs but
|
|
// emits no spans if no collector is listening. Returns a shutdown function
|
|
// that must be called on process exit.
|
|
func InitTracer(serviceName, endpoint string) func() {
|
|
// shared-go/tracer reads OTEL_EXPORTER_OTLP_ENDPOINT directly; override it
|
|
// explicitly so push-gateway's own config value takes precedence.
|
|
if endpoint != "" {
|
|
_ = os.Setenv("OTEL_EXPORTER_OTLP_ENDPOINT", endpoint)
|
|
}
|
|
if err := tracer.Init(serviceName); err != nil {
|
|
// Tracing is best-effort: log and continue without a tracer rather than
|
|
// failing the whole process.
|
|
fmt.Fprintf(os.Stderr, "push-gateway: tracer init failed: %v (tracing disabled)\n", err)
|
|
return func() {}
|
|
}
|
|
return func() {
|
|
if err := tracer.Shutdown(context.Background()); err != nil {
|
|
fmt.Fprintf(os.Stderr, "push-gateway: tracer shutdown failed: %v\n", err)
|
|
}
|
|
}
|
|
}
|