MCPcopy
hub / github.com/grafana/tempo / New

Function New

modules/frontend/v1/frontend.go:89–152  ·  view source on GitHub ↗

New creates a new frontend. Frontend implements service, and must be started and stopped.

(cfg Config, log log.Logger, registerer prometheus.Registerer)

Source from the content-addressed store, hash-verified

87
88// New creates a new frontend. Frontend implements service, and must be started and stopped.
89func New(cfg Config, log log.Logger, registerer prometheus.Registerer) (*Frontend, error) {
90 const batchBucketCount = 5
91 if cfg.MaxBatchSize <= 0 {
92 return nil, errors.New("max_batch_size must be positive")
93 }
94 batchBucketSize := float64(cfg.MaxBatchSize) / float64(batchBucketCount)
95
96 f := &Frontend{
97 cfg: cfg,
98 log: log,
99 queueLength: promauto.With(registerer).NewGaugeVec(prometheus.GaugeOpts{
100 Name: "tempo_query_frontend_queue_length",
101 Help: "Number of queries in the queue.",
102 }, []string{"user"}),
103 batchWeight: promauto.With(registerer).NewHistogramVec(prometheus.HistogramOpts{
104 Name: "tempo_query_frontend_batch_weight",
105 Help: "Weight of the batch.",
106 Buckets: prometheus.LinearBuckets(1, 1, cfg.MaxBatchSize),
107 NativeHistogramBucketFactor: 1.1,
108 NativeHistogramMaxBucketNumber: 100,
109 NativeHistogramMinResetDuration: 1 * time.Hour,
110 }, []string{"user"}),
111 discardedRequests: promauto.With(registerer).NewCounterVec(prometheus.CounterOpts{
112 Name: "tempo_query_frontend_discarded_requests_total",
113 Help: "Total number of query requests discarded.",
114 }, []string{"user"}),
115 queueDuration: promauto.With(registerer).NewHistogram(prometheus.HistogramOpts{
116 Name: "tempo_query_frontend_queue_duration_seconds",
117 Help: "Time spend by requests queued.",
118 Buckets: prometheus.DefBuckets,
119 NativeHistogramBucketFactor: 1.1,
120 NativeHistogramMaxBucketNumber: 100,
121 NativeHistogramMinResetDuration: 1 * time.Hour,
122 }),
123 actualBatchSize: promauto.With(registerer).NewHistogram(prometheus.HistogramOpts{
124 Name: "tempo_query_frontend_actual_batch_size",
125 Help: "Batch size.",
126 Buckets: prometheus.LinearBuckets(1, batchBucketSize, batchBucketCount),
127 NativeHistogramBucketFactor: 1.1,
128 NativeHistogramMaxBucketNumber: 100,
129 NativeHistogramMinResetDuration: 1 * time.Hour,
130 }),
131 connectedQuerierWorkers: &atomic.Int32{},
132 }
133
134 f.requestQueue = queue.NewRequestQueue(cfg.MaxOutstandingPerTenant, f.queueLength, f.batchWeight, f.discardedRequests)
135 f.activeUsers = util.NewActiveUsersCleanupWithDefaultValues(f.cleanupInactiveUserMetrics)
136
137 var err error
138 f.subservices, err = services.NewManager(f.requestQueue, f.activeUsers)
139 if err != nil {
140 return nil, err
141 }
142
143 f.numClients = promauto.With(registerer).NewGaugeFunc(prometheus.GaugeOpts{
144 Name: "tempo_query_frontend_connected_clients",
145 Help: "Number of worker clients currently connected to the frontend.",
146 }, func() float64 {

Callers 1

InitFrontendFunction · 0.92

Calls 3

NewRequestQueueFunction · 0.92
NewHistogramMethod · 0.65

Tested by

no test coverage detected