Skip to content

Commit a5fd223

Browse files
Implement Telemetery struct for V1 Components Initialization (jaegertracing#5695)
**Which problem is this PR solving?** This PR addresses a part of the issue [jaegertracing#5633 ](jaegertracing#5633) **Description of the changes** This is a Draft PR to achieve Observability Parity between V1 and V2 components by creating an unified telemetery container to pass observability clients to V1 components. **How was this change tested?** The changes were tested by running the following command: ```bash make test ``` **Checklist** - [x] I have read [CONTRIBUTING_GUIDELINES.md](https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md) - [x] I have signed all commits - [x] I have added unit tests for the new functionality - [x] I have run lint and test steps successfully - `for jaeger: make lint test` - `for jaeger-ui: yarn lint` and `yarn test` --------- Signed-off-by: Wise-Wizard <[email protected]> Signed-off-by: Saransh Shankar <[email protected]> Co-authored-by: Yuri Shkuro <[email protected]>
1 parent 295293c commit a5fd223

13 files changed

+268
-116
lines changed

cmd/all-in-one/main.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import (
4343
"github.com/jaegertracing/jaeger/pkg/config"
4444
"github.com/jaegertracing/jaeger/pkg/jtracer"
4545
"github.com/jaegertracing/jaeger/pkg/metrics"
46+
"github.com/jaegertracing/jaeger/pkg/telemetery"
4647
"github.com/jaegertracing/jaeger/pkg/tenancy"
4748
"github.com/jaegertracing/jaeger/pkg/version"
4849
metricsPlugin "github.com/jaegertracing/jaeger/plugin/metrics"
@@ -193,12 +194,17 @@ by default uses only in-memory database.`,
193194
logger.Fatal("Could not create collector proxy", zap.Error(err))
194195
}
195196
agent := startAgent(cp, aOpts, logger, agentMetricsFactory)
196-
197+
telset := telemetery.Setting{
198+
Logger: svc.Logger,
199+
TracerProvider: tracer.OTEL,
200+
Metrics: queryMetricsFactory,
201+
ReportStatus: telemetery.HCAdapter(svc.HC()),
202+
}
197203
// query
198204
querySrv := startQuery(
199205
svc, qOpts, qOpts.BuildQueryServiceOptions(storageFactory, logger),
200206
spanReader, dependencyReader, metricsQueryService,
201-
queryMetricsFactory, tm, tracer,
207+
tm, telset,
202208
)
203209

204210
svc.RunAndThen(func() {
@@ -273,13 +279,13 @@ func startQuery(
273279
spanReader spanstore.Reader,
274280
depReader dependencystore.Reader,
275281
metricsQueryService querysvc.MetricsQueryService,
276-
metricsFactory metrics.Factory,
277282
tm *tenancy.Manager,
278-
jt *jtracer.JTracer,
283+
telset telemetery.Setting,
279284
) *queryApp.Server {
280-
spanReader = storageMetrics.NewReadMetricsDecorator(spanReader, metricsFactory)
285+
spanReader = storageMetrics.NewReadMetricsDecorator(spanReader, telset.Metrics)
281286
qs := querysvc.NewQueryService(spanReader, depReader, *queryOpts)
282-
server, err := queryApp.NewServer(svc.Logger, svc.HC(), qs, metricsQueryService, qOpts, tm, jt)
287+
288+
server, err := queryApp.NewServer(qs, metricsQueryService, qOpts, tm, telset)
283289
if err != nil {
284290
svc.Logger.Fatal("Could not create jaeger-query", zap.Error(err))
285291
}

cmd/jaeger/internal/extension/jaegerquery/server.go

+19-16
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@ import (
1010

1111
"go.opentelemetry.io/collector/component"
1212
"go.opentelemetry.io/collector/extension"
13-
"go.uber.org/zap"
1413

1514
"github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerstorage"
1615
queryApp "github.com/jaegertracing/jaeger/cmd/query/app"
1716
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
18-
"github.com/jaegertracing/jaeger/pkg/healthcheck"
1917
"github.com/jaegertracing/jaeger/pkg/jtracer"
18+
"github.com/jaegertracing/jaeger/pkg/telemetery"
2019
"github.com/jaegertracing/jaeger/pkg/tenancy"
2120
"github.com/jaegertracing/jaeger/plugin/metrics/disabled"
2221
"github.com/jaegertracing/jaeger/ports"
@@ -28,16 +27,16 @@ var (
2827
)
2928

3029
type server struct {
31-
config *Config
32-
logger *zap.Logger
33-
server *queryApp.Server
34-
jtracer *jtracer.JTracer
30+
config *Config
31+
server *queryApp.Server
32+
telset component.TelemetrySettings
33+
closeTracer func(ctx context.Context) error
3534
}
3635

3736
func newServer(config *Config, otel component.TelemetrySettings) *server {
3837
return &server{
3938
config: config,
40-
logger: otel.Logger,
39+
telset: otel,
4140
}
4241
}
4342

@@ -75,22 +74,26 @@ func (s *server) Start(_ context.Context, host component.Host) error {
7574
// TODO OTel-collector does not initialize the tracer currently
7675
// https://github.com/open-telemetry/opentelemetry-collector/issues/7532
7776
//nolint
78-
s.jtracer, err = jtracer.New("jaeger")
77+
tracerProvider, err := jtracer.New("jaeger")
7978
if err != nil {
8079
return fmt.Errorf("could not initialize a tracer: %w", err)
8180
}
81+
s.closeTracer = tracerProvider.Close
82+
telset := telemetery.Setting{
83+
Logger: s.telset.Logger,
84+
TracerProvider: tracerProvider.OTEL,
85+
ReportStatus: s.telset.ReportStatus,
86+
}
8287

8388
// TODO contextcheck linter complains about next line that context is not passed. It is not wrong.
8489
//nolint
8590
s.server, err = queryApp.NewServer(
86-
s.logger,
8791
// TODO propagate healthcheck updates up to the collector's runtime
88-
healthcheck.New(),
8992
qs,
9093
metricsQueryService,
9194
s.makeQueryOptions(),
9295
tm,
93-
s.jtracer,
96+
telset,
9497
)
9598
if err != nil {
9699
return fmt.Errorf("could not create jaeger-query: %w", err)
@@ -105,7 +108,7 @@ func (s *server) Start(_ context.Context, host component.Host) error {
105108

106109
func (s *server) addArchiveStorage(opts *querysvc.QueryServiceOptions, host component.Host) error {
107110
if s.config.TraceStorageArchive == "" {
108-
s.logger.Info("Archive storage not configured")
111+
s.telset.Logger.Info("Archive storage not configured")
109112
return nil
110113
}
111114

@@ -114,8 +117,8 @@ func (s *server) addArchiveStorage(opts *querysvc.QueryServiceOptions, host comp
114117
return fmt.Errorf("cannot find archive storage factory: %w", err)
115118
}
116119

117-
if !opts.InitArchiveStorage(f, s.logger) {
118-
s.logger.Info("Archive storage not initialized")
120+
if !opts.InitArchiveStorage(f, s.telset.Logger) {
121+
s.telset.Logger.Info("Archive storage not initialized")
119122
}
120123
return nil
121124
}
@@ -135,8 +138,8 @@ func (s *server) Shutdown(ctx context.Context) error {
135138
if s.server != nil {
136139
errs = append(errs, s.server.Close())
137140
}
138-
if s.jtracer != nil {
139-
errs = append(errs, s.jtracer.Close(ctx))
141+
if s.closeTracer != nil {
142+
errs = append(errs, s.closeTracer(ctx))
140143
}
141144
return errors.Join(errs...)
142145
}

cmd/query/app/apiv3/http_gateway.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ import (
1717
"github.com/gorilla/mux"
1818
"go.opentelemetry.io/collector/pdata/ptrace"
1919
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
20+
"go.opentelemetry.io/otel/trace"
2021
"go.uber.org/zap"
2122

2223
"github.com/jaegertracing/jaeger/cmd/query/app/internal/api_v3"
2324
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
2425
"github.com/jaegertracing/jaeger/model"
25-
"github.com/jaegertracing/jaeger/pkg/jtracer"
2626
"github.com/jaegertracing/jaeger/pkg/tenancy"
2727
"github.com/jaegertracing/jaeger/storage/spanstore"
2828
)
@@ -48,7 +48,7 @@ type HTTPGateway struct {
4848
QueryService *querysvc.QueryService
4949
TenancyMgr *tenancy.Manager
5050
Logger *zap.Logger
51-
Tracer *jtracer.JTracer
51+
Tracer trace.TracerProvider
5252
}
5353

5454
// RegisterRoutes registers HTTP endpoints for APIv3 into provided mux.
@@ -75,7 +75,7 @@ func (h *HTTPGateway) addRoute(
7575
traceMiddleware := otelhttp.NewHandler(
7676
otelhttp.WithRouteTag(route, handler),
7777
route,
78-
otelhttp.WithTracerProvider(h.Tracer.OTEL))
78+
otelhttp.WithTracerProvider(h.Tracer))
7979
return router.HandleFunc(route, traceMiddleware.ServeHTTP)
8080
}
8181

cmd/query/app/apiv3/http_gateway_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func setupHTTPGatewayNoServer(
4646
QueryService: q,
4747
TenancyMgr: tenancy.NewManager(&tenancyOptions),
4848
Logger: zap.NewNop(),
49-
Tracer: jtracer.NoOp(),
49+
Tracer: jtracer.NoOp().OTEL,
5050
}
5151

5252
gw.router = &mux.Router{}

cmd/query/app/handler_options.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ package app
1818
import (
1919
"time"
2020

21+
"go.opentelemetry.io/otel/trace"
2122
"go.uber.org/zap"
2223

2324
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
24-
"github.com/jaegertracing/jaeger/pkg/jtracer"
2525
)
2626

2727
// HandlerOption is a function that sets some option on the APIHandler
@@ -62,7 +62,7 @@ func (handlerOptions) QueryLookbackDuration(queryLookbackDuration time.Duration)
6262
}
6363

6464
// Tracer creates a HandlerOption that passes the tracer to the handler
65-
func (handlerOptions) Tracer(tracer *jtracer.JTracer) HandlerOption {
65+
func (handlerOptions) Tracer(tracer trace.TracerProvider) HandlerOption {
6666
return func(apiHandler *APIHandler) {
6767
apiHandler.tracer = tracer
6868
}

cmd/query/app/http_handler.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/gorilla/mux"
3131
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
3232
"go.opentelemetry.io/otel/propagation"
33+
"go.opentelemetry.io/otel/trace"
3334
"go.uber.org/zap"
3435

3536
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
@@ -90,7 +91,7 @@ type APIHandler struct {
9091
basePath string
9192
apiPrefix string
9293
logger *zap.Logger
93-
tracer *jtracer.JTracer
94+
tracer trace.TracerProvider
9495
}
9596

9697
// NewAPIHandler returns an APIHandler
@@ -114,7 +115,7 @@ func NewAPIHandler(queryService *querysvc.QueryService, tm *tenancy.Manager, opt
114115
aH.logger = zap.NewNop()
115116
}
116117
if aH.tracer == nil {
117-
aH.tracer = jtracer.NoOp()
118+
aH.tracer = jtracer.NoOp().OTEL
118119
}
119120
return aH
120121
}
@@ -151,7 +152,7 @@ func (aH *APIHandler) handleFunc(
151152
traceMiddleware := otelhttp.NewHandler(
152153
otelhttp.WithRouteTag(route, traceResponseHandler(handler)),
153154
route,
154-
otelhttp.WithTracerProvider(aH.tracer.OTEL))
155+
otelhttp.WithTracerProvider(aH.tracer))
155156
return router.HandleFunc(route, traceMiddleware.ServeHTTP)
156157
}
157158

cmd/query/app/http_handler_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ func TestGetTrace(t *testing.T) {
321321
jTracer := jtracer.JTracer{OTEL: tracerProvider}
322322
defer tracerProvider.Shutdown(context.Background())
323323

324-
ts := initializeTestServer(HandlerOptions.Tracer(&jTracer))
324+
ts := initializeTestServer(HandlerOptions.Tracer(jTracer.OTEL))
325325
defer ts.server.Close()
326326

327327
ts.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), model.NewTraceID(0, 0x123456abc)).

0 commit comments

Comments
 (0)