Skip to content

Commit 1e4d111

Browse files
Add contextual information and query statistics to log
Signed-off-by: Anand Rajagopal <anrajag@amazon.com>
1 parent ec7f249 commit 1e4d111

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Changelog
22

33
## master / unreleased
4+
* [CHANGE] Ruler: Add contextual info and query statistics to log
45
* [FEATURE] Ruler: Add support for disabling rule groups. #5521
56
* [FEATURE] Added the flag `-alertmanager.alerts-gc-interval` to configure alert manager alerts Garbage collection interval. #5550
67
* [FEATURE] Ruler: Add support for Limit field on RuleGroup. #5528

pkg/ruler/compat.go

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ruler
33
import (
44
"context"
55
"errors"
6+
"github.com/cortexproject/cortex/pkg/querier/stats"
67
"time"
78

89
"github.com/cortexproject/cortex/pkg/util/validation"
@@ -214,6 +215,7 @@ func RecordAndReportRuleQueryMetrics(qf rules.QueryFunc, queryTime prometheus.Co
214215
}
215216

216217
return func(ctx context.Context, qs string, t time.Time) (promql.Vector, error) {
218+
queryStats, ctx := stats.ContextWithEmptyStats(ctx)
217219
// If we've been passed a counter we want to record the wall time spent executing this request.
218220
timer := prometheus.NewTimer(nil)
219221
defer func() {
@@ -224,8 +226,29 @@ func RecordAndReportRuleQueryMetrics(qf rules.QueryFunc, queryTime prometheus.Co
224226
logMessage := []interface{}{
225227
"msg", "query stats",
226228
"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,
228241
"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)
229252
}
230253
level.Info(util_log.WithContext(ctx, logger)).Log(logMessage...)
231254
}()
@@ -295,10 +318,13 @@ func DefaultTenantManagerFactory(cfg Config, p Pusher, q storage.Queryable, engi
295318
totalWrites := totalWritesVec.WithLabelValues(userID)
296319
failedWrites := failedWritesVec.WithLabelValues(userID)
297320

321+
engineQueryFunc := EngineQueryFunc(engine, q, overrides, userID)
322+
metricsQueryFunc := MetricsQueryFunc(engineQueryFunc, totalQueries, failedQueries)
323+
298324
return rules.NewManager(&rules.ManagerOptions{
299325
Appendable: NewPusherAppendable(p, userID, overrides, totalWrites, failedWrites),
300326
Queryable: q,
301-
QueryFunc: RecordAndReportRuleQueryMetrics(MetricsQueryFunc(EngineQueryFunc(engine, q, overrides, userID), totalQueries, failedQueries), queryTime, logger),
327+
QueryFunc: RecordAndReportRuleQueryMetrics(metricsQueryFunc, queryTime, logger),
302328
Context: user.InjectOrgID(ctx, userID),
303329
ExternalURL: cfg.ExternalURL.URL,
304330
NotifyFunc: SendAlerts(notifier, cfg.ExternalURL.URL.String()),

0 commit comments

Comments
 (0)