Skip to content

Commit 36bfb13

Browse files
committed
Use per-tenant limit for global query offset
Signed-off-by: Mustafain Ali Khan <[email protected]>
1 parent c1dbe32 commit 36bfb13

File tree

6 files changed

+19
-8
lines changed

6 files changed

+19
-8
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* [FEATURE] Ingester: Experimental: Enable native histogram ingestion via `-blocks-storage.tsdb.enable-native-histograms` flag. #5986
99
* [FEATURE] Query Frontend: Added a query rejection mechanism to block resource-intensive queries. #6005
1010
* [FEATURE] OTLP: Support ingesting OTLP exponential metrics as native histograms. #6071
11+
* [FEATURE] Ruler: Add support for `query_offset` field on RuleGroup and `ruler.query-offset` per-tenant limit. #6085
1112
* [ENHANCEMENT] rulers: Add support to persist tokens in rulers. #5987
1213
* [ENHANCEMENT] Query Frontend/Querier: Added store gateway postings touched count and touched size in Querier stats and log in Query Frontend. #5892
1314
* [ENHANCEMENT] Query Frontend/Querier: Returns `warnings` on prometheus query responses. #5916

docs/configuration/config-file-reference.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -3318,6 +3318,10 @@ query_rejection:
33183318
# CLI flag: -ruler.max-rule-groups-per-tenant
33193319
[ruler_max_rule_groups_per_tenant: <int> | default = 0]
33203320

3321+
# Duration to offset all rule evaluation queries per-tenant.
3322+
# CLI flag: -ruler.query-offset
3323+
[ruler_query_offset: <duration> | default = 0s]
3324+
33213325
# The default tenant's shard size when the shuffle-sharding strategy is used.
33223326
# Must be set when the store-gateway sharding is enabled with the
33233327
# shuffle-sharding strategy. When this setting is specified in the per-tenant
@@ -4116,10 +4120,6 @@ ruler_client:
41164120
# CLI flag: -ruler.rule-path
41174121
[rule_path: <string> | default = "/rules"]
41184122
4119-
# Default offset for all rule evaluation queries
4120-
# CLI flag: -ruler.rule-query-offset
4121-
[rule_query_offset: <duration> | default = 0s]
4122-
41234123
# Comma-separated list of URL(s) of the Alertmanager(s) to send notifications
41244124
# to. Each Alertmanager URL is treated as a separate group in the configuration.
41254125
# Multiple Alertmanagers in HA per group can be supported by using DNS

pkg/ruler/compat.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ type RulesLimits interface {
178178
RulerTenantShardSize(userID string) int
179179
RulerMaxRuleGroupsPerTenant(userID string) int
180180
RulerMaxRulesPerRuleGroup(userID string) int
181+
RulerQueryOffset(userID string) time.Duration
181182
DisabledRuleGroups(userID string) validation.DisabledRuleGroups
182183
}
183184

@@ -359,7 +360,7 @@ func DefaultTenantManagerFactory(cfg Config, p Pusher, q storage.Queryable, engi
359360
ConcurrentEvalsEnabled: cfg.ConcurrentEvalsEnabled,
360361
MaxConcurrentEvals: cfg.MaxConcurrentEvals,
361362
DefaultRuleQueryOffset: func() time.Duration {
362-
return cfg.RuleQueryOffset
363+
return overrides.RulerQueryOffset(userID)
363364
},
364365
})
365366
}

pkg/ruler/ruler.go

-3
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,6 @@ type Config struct {
105105
PollInterval time.Duration `yaml:"poll_interval"`
106106
// Path to store rule files for prom manager.
107107
RulePath string `yaml:"rule_path"`
108-
// Default offset for all rule evaluation queries.
109-
RuleQueryOffset time.Duration `yaml:"rule_query_offset"`
110108

111109
// URL of the Alertmanager to send notifications to.
112110
// If you are configuring the ruler to send to a Cortex Alertmanager,
@@ -196,7 +194,6 @@ func (cfg *Config) RegisterFlags(f *flag.FlagSet) {
196194
f.Var(&cfg.ExternalURL, "ruler.external.url", "URL of alerts return path.")
197195
f.DurationVar(&cfg.EvaluationInterval, "ruler.evaluation-interval", 1*time.Minute, "How frequently to evaluate rules")
198196
f.DurationVar(&cfg.PollInterval, "ruler.poll-interval", 1*time.Minute, "How frequently to poll for rule changes")
199-
f.DurationVar(&cfg.RuleQueryOffset, "ruler.rule-query-offset", 0*time.Minute, "Default offset for all rule evaluation queries")
200197

201198
f.StringVar(&cfg.AlertmanagerURL, "ruler.alertmanager-url", "", "Comma-separated list of URL(s) of the Alertmanager(s) to send notifications to. Each Alertmanager URL is treated as a separate group in the configuration. Multiple Alertmanagers in HA per group can be supported by using DNS resolution via -ruler.alertmanager-discovery.")
202199
f.BoolVar(&cfg.AlertmanagerDiscovery, "ruler.alertmanager-discovery", false, "Use DNS SRV records to discover Alertmanager hosts.")

pkg/ruler/ruler_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ type ruleLimits struct {
8888
maxRuleGroups int
8989
disabledRuleGroups validation.DisabledRuleGroups
9090
maxQueryLength time.Duration
91+
queryOffset time.Duration
9192
}
9293

9394
func (r ruleLimits) EvaluationDelay(_ string) time.Duration {
@@ -112,6 +113,10 @@ func (r ruleLimits) DisabledRuleGroups(userID string) validation.DisabledRuleGro
112113

113114
func (r ruleLimits) MaxQueryLength(_ string) time.Duration { return r.maxQueryLength }
114115

116+
func (r ruleLimits) RulerQueryOffset(_ string) time.Duration {
117+
return r.queryOffset
118+
}
119+
115120
func newEmptyQueryable() storage.Queryable {
116121
return storage.QueryableFunc(func(mint, maxt int64) (storage.Querier, error) {
117122
return emptyQuerier{}, nil

pkg/util/validation/limits.go

+7
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ type Limits struct {
176176
RulerTenantShardSize int `yaml:"ruler_tenant_shard_size" json:"ruler_tenant_shard_size"`
177177
RulerMaxRulesPerRuleGroup int `yaml:"ruler_max_rules_per_rule_group" json:"ruler_max_rules_per_rule_group"`
178178
RulerMaxRuleGroupsPerTenant int `yaml:"ruler_max_rule_groups_per_tenant" json:"ruler_max_rule_groups_per_tenant"`
179+
RulerQueryOffset model.Duration `yaml:"ruler_query_offset" json:"ruler_query_offset"`
179180

180181
// Store-gateway.
181182
StoreGatewayTenantShardSize float64 `yaml:"store_gateway_tenant_shard_size" json:"store_gateway_tenant_shard_size"`
@@ -265,6 +266,7 @@ func (l *Limits) RegisterFlags(f *flag.FlagSet) {
265266
f.IntVar(&l.RulerTenantShardSize, "ruler.tenant-shard-size", 0, "The default tenant's shard size when the shuffle-sharding strategy is used by ruler. When this setting is specified in the per-tenant overrides, a value of 0 disables shuffle sharding for the tenant.")
266267
f.IntVar(&l.RulerMaxRulesPerRuleGroup, "ruler.max-rules-per-rule-group", 0, "Maximum number of rules per rule group per-tenant. 0 to disable.")
267268
f.IntVar(&l.RulerMaxRuleGroupsPerTenant, "ruler.max-rule-groups-per-tenant", 0, "Maximum number of rule groups per-tenant. 0 to disable.")
269+
f.Var(&l.RulerQueryOffset, "ruler.query-offset", "Duration to offset all rule evaluation queries per-tenant.")
268270

269271
f.Var(&l.CompactorBlocksRetentionPeriod, "compactor.blocks-retention-period", "Delete blocks containing samples older than the specified retention period. 0 to disable.")
270272
f.IntVar(&l.CompactorTenantShardSize, "compactor.tenant-shard-size", 0, "The default tenant's shard size when the shuffle-sharding strategy is used by the compactor. When this setting is specified in the per-tenant overrides, a value of 0 disables shuffle sharding for the tenant.")
@@ -782,6 +784,11 @@ func (o *Overrides) RulerMaxRuleGroupsPerTenant(userID string) int {
782784
return o.GetOverridesForUser(userID).RulerMaxRuleGroupsPerTenant
783785
}
784786

787+
// RulerQueryOffset returns the rule query offset for a given user.
788+
func (o *Overrides) RulerQueryOffset(userID string) time.Duration {
789+
return time.Duration(o.GetOverridesForUser(userID).RulerQueryOffset)
790+
}
791+
785792
// StoreGatewayTenantShardSize returns the store-gateway shard size for a given user.
786793
func (o *Overrides) StoreGatewayTenantShardSize(userID string) float64 {
787794
return o.GetOverridesForUser(userID).StoreGatewayTenantShardSize

0 commit comments

Comments
 (0)