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