Skip to content

Commit 8787996

Browse files
Add contextual information and query statistics to log (#5604)
Signed-off-by: Anand Rajagopal <[email protected]>
1 parent de5f7a7 commit 8787996

File tree

2 files changed

+30
-5
lines changed

2 files changed

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

8-
"github.com/cortexproject/cortex/pkg/util/validation"
9-
108
"github.com/go-kit/log"
119
"github.com/go-kit/log/level"
1210
"github.com/prometheus/client_golang/prometheus"
@@ -26,7 +24,9 @@ import (
2624

2725
"github.com/cortexproject/cortex/pkg/cortexpb"
2826
"github.com/cortexproject/cortex/pkg/querier"
27+
"github.com/cortexproject/cortex/pkg/querier/stats"
2928
util_log "github.com/cortexproject/cortex/pkg/util/log"
29+
"github.com/cortexproject/cortex/pkg/util/validation"
3030
)
3131

3232
// Pusher is an ingester server that accepts pushes.
@@ -214,6 +214,7 @@ func RecordAndReportRuleQueryMetrics(qf rules.QueryFunc, queryTime prometheus.Co
214214
}
215215

216216
return func(ctx context.Context, qs string, t time.Time) (promql.Vector, error) {
217+
queryStats, ctx := stats.ContextWithEmptyStats(ctx)
217218
// If we've been passed a counter we want to record the wall time spent executing this request.
218219
timer := prometheus.NewTimer(nil)
219220
defer func() {
@@ -224,9 +225,29 @@ func RecordAndReportRuleQueryMetrics(qf rules.QueryFunc, queryTime prometheus.Co
224225
logMessage := []interface{}{
225226
"msg", "query stats",
226227
"component", "ruler",
227-
"cortex_ruler_query_seconds_total", querySeconds,
228-
"query", qs,
229228
}
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()...)
230251
level.Info(util_log.WithContext(ctx, logger)).Log(logMessage...)
231252
}()
232253

@@ -295,10 +316,13 @@ func DefaultTenantManagerFactory(cfg Config, p Pusher, q storage.Queryable, engi
295316
totalWrites := totalWritesVec.WithLabelValues(userID)
296317
failedWrites := failedWritesVec.WithLabelValues(userID)
297318

319+
engineQueryFunc := EngineQueryFunc(engine, q, overrides, userID)
320+
metricsQueryFunc := MetricsQueryFunc(engineQueryFunc, totalQueries, failedQueries)
321+
298322
return rules.NewManager(&rules.ManagerOptions{
299323
Appendable: NewPusherAppendable(p, userID, overrides, totalWrites, failedWrites),
300324
Queryable: q,
301-
QueryFunc: RecordAndReportRuleQueryMetrics(MetricsQueryFunc(EngineQueryFunc(engine, q, overrides, userID), totalQueries, failedQueries), queryTime, logger),
325+
QueryFunc: RecordAndReportRuleQueryMetrics(metricsQueryFunc, queryTime, logger),
302326
Context: user.InjectOrgID(ctx, userID),
303327
ExternalURL: cfg.ExternalURL.URL,
304328
NotifyFunc: SendAlerts(notifier, cfg.ExternalURL.URL.String()),

0 commit comments

Comments
 (0)