Skip to content

Commit 81a929b

Browse files
committed
add route explanation diagram
Signed-off-by: Jacob Lisi <[email protected]>
1 parent f72feb7 commit 81a929b

File tree

1 file changed

+42
-5
lines changed

1 file changed

+42
-5
lines changed

pkg/cortex/modules.go

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,47 @@ func (t *Cortex) initQueryable() (serv services.Service, err error) {
212212
// 2. Querier Standalone: The querier will register the internal HTTP router with the external
213213
// HTTP router for the Prometheus API routes. Then the external HTTP server will be passed
214214
// as a http.Handler to the frontend worker.
215+
// Route Diagram:
216+
// │ query
217+
// │ request
218+
// │
219+
// ▼
220+
// ┌──────────────────┐ QF to ┌──────────────────┐
221+
// │ external HTTP │ Worker │ │
222+
// │ router │──────────────▶│ frontend worker │
223+
// │ │ │ │
224+
// └──────────────────┘ └──────────────────┘
225+
// │ │
226+
// │
227+
// only in │ │
228+
// microservice ┌──────────────────┐ │
229+
// querier │ │ internal Querier │ │
230+
// ─ ─ ─ ─▶│ router │◀─────┘
231+
// │ │
232+
// └──────────────────┘
233+
// │
234+
// │
235+
// /metadata & /chunk ┌─────────────────────┼─────────────────────┐
236+
// requests │ │ │
237+
// │ │ │
238+
// ▼ ▼ ▼
239+
// ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
240+
// │ │ │ │ │ │
241+
// │Querier Queryable │ │ /api/v1 router │ │ /api/prom router │
242+
// │ │ │ │ │ │
243+
// └──────────────────┘ └──────────────────┘ └──────────────────┘
244+
// ▲ │ │
245+
// │ └──────────┬──────────┘
246+
// │ ▼
247+
// │ ┌──────────────────┐
248+
// │ │ │
249+
// └──────────────────────│ Prometheus API │
250+
// │ │
251+
// └──────────────────┘
215252
func (t *Cortex) initQuerier() (serv services.Service, err error) {
216253
// Create a internal HTTP handler that is configured with the Prometheus API routes and points
217254
// to a Prometheus API struct instantiated with the Cortex Queryable.
218-
queryHandler := api.NewQuerierHandler(
255+
internalQuerierRouter := api.NewQuerierHandler(
219256
t.Cfg.API,
220257
t.QuerierQueryable,
221258
t.QuerierEngine,
@@ -230,12 +267,12 @@ func (t *Cortex) initQuerier() (serv services.Service, err error) {
230267
// to ensure requests it processes use the default middleware instrumentation.
231268
if !t.Cfg.isModuleEnabled(QueryFrontend) && !t.Cfg.isModuleEnabled(All) {
232269
// First, register the internal querier handler with the external HTTP server
233-
t.API.RegisterQueryAPI(queryHandler)
270+
t.API.RegisterQueryAPI(internalQuerierRouter)
234271

235272
// Second, set the http.Handler that the frontend worker will use to process requests to point to
236273
// the external HTTP server. This will allow the querier to consolidate query metrics both external
237274
// and internal using the default instrumentation when running as a standalone service.
238-
queryHandler = t.Server.HTTPServer.Handler
275+
internalQuerierRouter = t.Server.HTTPServer.Handler
239276
} else {
240277
// Single binary mode requires a query frontend endpoint for the worker. If no frontend endpoint
241278
// is configured, Cortex will default to using localhost on it's own GRPC listening port.
@@ -248,12 +285,12 @@ func (t *Cortex) initQuerier() (serv services.Service, err error) {
248285
// If queries are processed using the external HTTP Server, we need wrap the internal querier with
249286
// HTTP router with middleware to parse the tenant ID from the HTTP header and inject it into the
250287
// request context.
251-
queryHandler = middleware.AuthenticateUser.Wrap(queryHandler)
288+
internalQuerierRouter = middleware.AuthenticateUser.Wrap(internalQuerierRouter)
252289
}
253290

254291
// Query frontend worker will only be started after all its dependencies are started, not here.
255292
// Worker may also be nil, if not configured, which is OK.
256-
worker, err := frontend.NewWorker(t.Cfg.Worker, t.Cfg.Querier, httpgrpc_server.NewServer(queryHandler), util.Logger)
293+
worker, err := frontend.NewWorker(t.Cfg.Worker, t.Cfg.Querier, httpgrpc_server.NewServer(internalQuerierRouter), util.Logger)
257294
if err != nil {
258295
return nil, err
259296
}

0 commit comments

Comments
 (0)