chore(tracing): Initialize tracing early, before wire (#112007)

Signed-off-by: Dave Henderson <dave.henderson@grafana.com>
This commit is contained in:
Dave Henderson
2025-10-06 13:44:13 +00:00
committed by GitHub
parent a6f92d4487
commit 8ec162afec
2 changed files with 27 additions and 5 deletions
+7 -2
View File
@@ -11,9 +11,7 @@ import (
"syscall"
"time"
"github.com/grafana/grafana/pkg/services/featuremgmt"
_ "github.com/grafana/pyroscope-go/godeltaprof/http/pprof"
"github.com/urfave/cli/v2"
"github.com/grafana/grafana/pkg/api"
@@ -21,8 +19,10 @@ import (
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/metrics"
"github.com/grafana/grafana/pkg/infra/process"
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/server"
"github.com/grafana/grafana/pkg/services/apiserver/standalone"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/setting"
)
@@ -111,6 +111,11 @@ func RunServer(opts standalone.BuildInfo, cli *cli.Context) error {
return err
}
// Initialize tracing early to ensure it's always available for other services
if err := tracing.InitTracing(cfg); err != nil {
return err
}
s, err := server.Initialize(
cli.Context,
cfg,
+20 -3
View File
@@ -11,6 +11,8 @@ import (
"sync"
"time"
"github.com/go-kit/log/level"
"github.com/grafana/dskit/services"
jaegerpropagator "go.opentelemetry.io/contrib/propagators/jaeger"
"go.opentelemetry.io/contrib/samplers/jaegerremote"
"go.opentelemetry.io/otel"
@@ -27,11 +29,9 @@ import (
"go.opentelemetry.io/otel/trace/noop"
"google.golang.org/grpc/credentials"
"github.com/go-kit/log/level"
"github.com/grafana/dskit/services"
"github.com/grafana/grafana/pkg/apimachinery/errutil"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/setting"
)
const (
@@ -105,6 +105,23 @@ func ProvideService(tracingCfg *TracingConfig) (*TracingService, error) {
return ots, nil
}
// InitTracing initializes the tracing service with the provided configuration.
// Used to initialize tracing early to ensure it's always available for other
// services, outside of the wire context.
func InitTracing(cfg *setting.Cfg) error {
tracingCfg, err := ParseTracingConfig(cfg)
if err != nil {
return fmt.Errorf("parse tracing config: %w", err)
}
_, err = ProvideService(tracingCfg)
if err != nil {
return fmt.Errorf("initialize tracing: %w", err)
}
return nil
}
func NewNoopTracerService() *TracingService {
tp := &noopTracerProvider{TracerProvider: noop.NewTracerProvider()}
otel.SetTracerProvider(tp)