Skip to content

Commit 8230bed

Browse files
Add contextual information and query statistics to log
Signed-off-by: Anand Rajagopal <[email protected]>
1 parent ec7f249 commit 8230bed

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-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: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"errors"
66
"time"
77

8+
"github.com/cortexproject/cortex/pkg/querier/stats"
9+
810
"github.com/cortexproject/cortex/pkg/util/validation"
911

1012
"github.com/go-kit/log"
@@ -214,6 +216,7 @@ func RecordAndReportRuleQueryMetrics(qf rules.QueryFunc, queryTime prometheus.Co
214216
}
215217

216218
return func(ctx context.Context, qs string, t time.Time) (promql.Vector, error) {
219+
queryStats, ctx := stats.ContextWithEmptyStats(ctx)
217220
// If we've been passed a counter we want to record the wall time spent executing this request.
218221
timer := prometheus.NewTimer(nil)
219222
defer func() {
@@ -224,8 +227,29 @@ func RecordAndReportRuleQueryMetrics(qf rules.QueryFunc, queryTime prometheus.Co
224227
logMessage := []interface{}{
225228
"msg", "query stats",
226229
"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,
228242
"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)
229253
}
230254
level.Info(util_log.WithContext(ctx, logger)).Log(logMessage...)
231255
}()
@@ -295,10 +319,13 @@ func DefaultTenantManagerFactory(cfg Config, p Pusher, q storage.Queryable, engi
295319
totalWrites := totalWritesVec.WithLabelValues(userID)
296320
failedWrites := failedWritesVec.WithLabelValues(userID)
297321

322+
engineQueryFunc := EngineQueryFunc(engine, q, overrides, userID)
323+
metricsQueryFunc := MetricsQueryFunc(engineQueryFunc, totalQueries, failedQueries)
324+
298325
return rules.NewManager(&rules.ManagerOptions{
299326
Appendable: NewPusherAppendable(p, userID, overrides, totalWrites, failedWrites),
300327
Queryable: q,
301-
QueryFunc: RecordAndReportRuleQueryMetrics(MetricsQueryFunc(EngineQueryFunc(engine, q, overrides, userID), totalQueries, failedQueries), queryTime, logger),
328+
QueryFunc: RecordAndReportRuleQueryMetrics(metricsQueryFunc, queryTime, logger),
302329
Context: user.InjectOrgID(ctx, userID),
303330
ExternalURL: cfg.ExternalURL.URL,
304331
NotifyFunc: SendAlerts(notifier, cfg.ExternalURL.URL.String()),

0 commit comments

Comments
 (0)