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