From 37bfea868515ff0c84bd9f0407e772ecd9cf1602 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Wed, 9 Jul 2025 19:21:31 +0100 Subject: [PATCH] FrontendService: Add tracing to frontend service (#107236) * FrontendService: Add tracing to frontend service * wire gen * fix test --- pkg/server/module_server.go | 2 ++ pkg/server/search_server_distributor_test.go | 5 ++++- pkg/server/wire_gen.go | 10 +++++++++- pkg/server/wireexts_oss.go | 5 +++++ pkg/services/frontend/frontend_service.go | 3 +++ pkg/services/frontend/index.go | 3 +++ 6 files changed, 26 insertions(+), 2 deletions(-) diff --git a/pkg/server/module_server.go b/pkg/server/module_server.go index 979e993eb7a..bca9bf21c6b 100644 --- a/pkg/server/module_server.go +++ b/pkg/server/module_server.go @@ -19,6 +19,7 @@ import ( "github.com/grafana/grafana/pkg/api" "github.com/grafana/grafana/pkg/infra/log" + "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/modules" "github.com/grafana/grafana/pkg/services/authz" "github.com/grafana/grafana/pkg/services/featuremgmt" @@ -39,6 +40,7 @@ func NewModule(opts Options, indexMetrics *resource.BleveIndexMetrics, reg prometheus.Registerer, promGatherer prometheus.Gatherer, + tracer tracing.Tracer, // Ensures tracing is initialized license licensing.Licensing, ) (*ModuleServer, error) { s, err := newModuleServer(opts, apiOpts, features, cfg, storageMetrics, indexMetrics, reg, promGatherer, license) diff --git a/pkg/server/search_server_distributor_test.go b/pkg/server/search_server_distributor_test.go index 3062b1efe8d..32dddffcec8 100644 --- a/pkg/server/search_server_distributor_test.go +++ b/pkg/server/search_server_distributor_test.go @@ -15,6 +15,7 @@ import ( claims "github.com/grafana/authlib/types" "github.com/grafana/grafana/pkg/api" "github.com/grafana/grafana/pkg/apimachinery/identity" + "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/modules" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/sqlstore/sqlutil" @@ -321,7 +322,9 @@ func initModuleServerForTest( opts Options, apiOpts api.ServerOptions, ) testModuleServer { - ms, err := NewModule(opts, apiOpts, featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearch), cfg, nil, nil, prometheus.NewRegistry(), prometheus.DefaultGatherer, nil) + tracer := tracing.InitializeTracerForTest() + + ms, err := NewModule(opts, apiOpts, featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearch), cfg, nil, nil, prometheus.NewRegistry(), prometheus.DefaultGatherer, tracer, nil) require.NoError(t, err) conn, err := grpc.NewClient(cfg.GRPCServer.Address, diff --git a/pkg/server/wire_gen.go b/pkg/server/wire_gen.go index 6f93fc62f37..7b6d39165b3 100644 --- a/pkg/server/wire_gen.go +++ b/pkg/server/wire_gen.go @@ -1379,9 +1379,17 @@ func InitializeModuleServer(cfg *setting.Cfg, opts Options, apiOpts api.ServerOp storageMetrics := resource.ProvideStorageMetrics(registerer) bleveIndexMetrics := resource.ProvideIndexMetrics(registerer) gatherer := metrics.ProvideGatherer() + tracingConfig, err := tracing.ProvideTracingConfig(cfg) + if err != nil { + return nil, err + } + tracingService, err := tracing.ProvideService(tracingConfig) + if err != nil { + return nil, err + } hooksService := hooks.ProvideService() ossLicensingService := licensing.ProvideService(cfg, hooksService) - moduleServer, err := NewModule(opts, apiOpts, featureToggles, cfg, storageMetrics, bleveIndexMetrics, registerer, gatherer, ossLicensingService) + moduleServer, err := NewModule(opts, apiOpts, featureToggles, cfg, storageMetrics, bleveIndexMetrics, registerer, gatherer, tracingService, ossLicensingService) if err != nil { return nil, err } diff --git a/pkg/server/wireexts_oss.go b/pkg/server/wireexts_oss.go index 0f0dd034983..5a1193c8592 100644 --- a/pkg/server/wireexts_oss.go +++ b/pkg/server/wireexts_oss.go @@ -8,6 +8,7 @@ import ( "github.com/google/wire" "github.com/grafana/grafana/pkg/infra/metrics" + "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/plugins/manager" "github.com/grafana/grafana/pkg/registry" @@ -165,6 +166,10 @@ var wireExtsBaseCLISet = wire.NewSet( var wireExtsModuleServerSet = wire.NewSet( NewModule, wireExtsBaseCLISet, + // Tracing + tracing.ProvideTracingConfig, + tracing.ProvideService, + wire.Bind(new(tracing.Tracer), new(*tracing.TracingService)), // Unified storage resource.ProvideStorageMetrics, resource.ProvideIndexMetrics, diff --git a/pkg/services/frontend/frontend_service.go b/pkg/services/frontend/frontend_service.go index 81b67859ec2..b79876dd4c5 100644 --- a/pkg/services/frontend/frontend_service.go +++ b/pkg/services/frontend/frontend_service.go @@ -8,6 +8,7 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" + "go.opentelemetry.io/otel" "github.com/grafana/dskit/services" "github.com/grafana/grafana/pkg/infra/log" @@ -15,6 +16,8 @@ import ( "github.com/grafana/grafana/pkg/setting" ) +var tracer = otel.Tracer("github.com/grafana/grafana/pkg/services/frontend") + type frontendService struct { *services.BasicService cfg *setting.Cfg diff --git a/pkg/services/frontend/index.go b/pkg/services/frontend/index.go index f7fdf617b35..ff18e6e5b7d 100644 --- a/pkg/services/frontend/index.go +++ b/pkg/services/frontend/index.go @@ -79,6 +79,9 @@ func NewIndexProvider(cfg *setting.Cfg, license licensing.Licensing) (*IndexProv } func (p *IndexProvider) HandleRequest(writer http.ResponseWriter, request *http.Request) { + _, span := tracer.Start(request.Context(), "frontend.index.HandleRequest") + defer span.End() + if request.Method != "GET" { writer.WriteHeader(http.StatusMethodNotAllowed) return