5
5
"errors"
6
6
"time"
7
7
8
- "github.com/cortexproject/cortex/pkg/util/validation"
9
-
10
8
"github.com/go-kit/log"
11
9
"github.com/go-kit/log/level"
12
10
"github.com/prometheus/client_golang/prometheus"
@@ -26,7 +24,9 @@ import (
26
24
27
25
"github.com/cortexproject/cortex/pkg/cortexpb"
28
26
"github.com/cortexproject/cortex/pkg/querier"
27
+ "github.com/cortexproject/cortex/pkg/querier/stats"
29
28
util_log "github.com/cortexproject/cortex/pkg/util/log"
29
+ "github.com/cortexproject/cortex/pkg/util/validation"
30
30
)
31
31
32
32
// Pusher is an ingester server that accepts pushes.
@@ -214,6 +214,7 @@ func RecordAndReportRuleQueryMetrics(qf rules.QueryFunc, queryTime prometheus.Co
214
214
}
215
215
216
216
return func (ctx context.Context , qs string , t time.Time ) (promql.Vector , error ) {
217
+ queryStats , ctx := stats .ContextWithEmptyStats (ctx )
217
218
// If we've been passed a counter we want to record the wall time spent executing this request.
218
219
timer := prometheus .NewTimer (nil )
219
220
defer func () {
@@ -224,9 +225,29 @@ func RecordAndReportRuleQueryMetrics(qf rules.QueryFunc, queryTime prometheus.Co
224
225
logMessage := []interface {}{
225
226
"msg" , "query stats" ,
226
227
"component" , "ruler" ,
227
- "cortex_ruler_query_seconds_total" , querySeconds ,
228
- "query" , qs ,
229
228
}
229
+ if origin := ctx .Value (promql.QueryOrigin {}); origin != nil {
230
+ queryLabels := origin .(map [string ]interface {})
231
+ rgMap := queryLabels ["ruleGroup" ].(map [string ]string )
232
+ logMessage = append (logMessage ,
233
+ "rule_group" , rgMap ["name" ],
234
+ "namespace" , rgMap ["file" ],
235
+ )
236
+ }
237
+ ruleDetail := rules .FromOriginContext (ctx )
238
+ logMessage = append (logMessage ,
239
+ "rule" , ruleDetail .Name ,
240
+ "rule_kind" , ruleDetail .Kind ,
241
+ "query" , qs ,
242
+ "cortex_ruler_query_seconds_total" , querySeconds ,
243
+ "query_wall_time_seconds" , queryStats .WallTime ,
244
+ "fetched_series_count" , queryStats .FetchedSeriesCount ,
245
+ "fetched_chunks_count" , queryStats .FetchedChunksCount ,
246
+ "fetched_samples_count" , queryStats .FetchedSamplesCount ,
247
+ "fetched_chunks_bytes" , queryStats .FetchedChunkBytes ,
248
+ "fetched_data_bytes" , queryStats .FetchedDataBytes ,
249
+ )
250
+ logMessage = append (logMessage , queryStats .LoadExtraFields ()... )
230
251
level .Info (util_log .WithContext (ctx , logger )).Log (logMessage ... )
231
252
}()
232
253
@@ -295,10 +316,13 @@ func DefaultTenantManagerFactory(cfg Config, p Pusher, q storage.Queryable, engi
295
316
totalWrites := totalWritesVec .WithLabelValues (userID )
296
317
failedWrites := failedWritesVec .WithLabelValues (userID )
297
318
319
+ engineQueryFunc := EngineQueryFunc (engine , q , overrides , userID )
320
+ metricsQueryFunc := MetricsQueryFunc (engineQueryFunc , totalQueries , failedQueries )
321
+
298
322
return rules .NewManager (& rules.ManagerOptions {
299
323
Appendable : NewPusherAppendable (p , userID , overrides , totalWrites , failedWrites ),
300
324
Queryable : q ,
301
- QueryFunc : RecordAndReportRuleQueryMetrics (MetricsQueryFunc ( EngineQueryFunc ( engine , q , overrides , userID ), totalQueries , failedQueries ) , queryTime , logger ),
325
+ QueryFunc : RecordAndReportRuleQueryMetrics (metricsQueryFunc , queryTime , logger ),
302
326
Context : user .InjectOrgID (ctx , userID ),
303
327
ExternalURL : cfg .ExternalURL .URL ,
304
328
NotifyFunc : SendAlerts (notifier , cfg .ExternalURL .URL .String ()),
0 commit comments