Skip to content

Commit

Permalink
Enable promql-per-step-stats feature.
Browse files Browse the repository at this point in the history
Signed-off-by: Harkishen-Singh <[email protected]>

This commit enables the `promql-per-step-stats` feature. This is done by
passing `&QueryOpts{EnablePerStepStats: true}` when creating a query.
This result goes with logical AND with
`-enable-feature=promql-per-step-stats` applied as Promscale starts.
  • Loading branch information
Harkishen-Singh committed May 25, 2022
1 parent 041b5bb commit a5ffe9d
Show file tree
Hide file tree
Showing 7 changed files with 13 additions and 8 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ We use the following categories for changes:

## [Unreleased]

### Added
- `-enable-feature=promql-per-step-stats` feature for statistics in PromQL evaluation

## [0.11.0] - 2022-05-11

## Added
Expand Down
2 changes: 1 addition & 1 deletion docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ The following subsections cover all CLI flags which promscale supports. You can
|---------------------------------|:------------------------------:|:-------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| cache.memory-target | unsigned-integer or percentage | 80% | Target for max amount of memory to use. Specified in bytes or as a percentage of system memory (e.g. 80%). |
| config | string | config.yml | YAML configuration file path for Promscale. |
| enable-feature | string | "" | Enable one or more experimental promscale features (as a comma-separated list). Current experimental features are `promql-at-modifier`, and `promql-negative-offset`. For more information, please consult the following resources: [promql-at-modifier](https://prometheus.io/docs/prometheus/latest/feature_flags/#modifier-in-promql), [promql-negative-offset](https://prometheus.io/docs/prometheus/latest/feature_flags/#negative-offset-in-promql). |
| enable-feature | string | "" | Enable one or more experimental promscale features (as a comma-separated list). Current experimental features are `promql-at-modifier`, `promql-negative-offset` and `promql-per-step-stats`. For more information, please consult the following resources: [promql-at-modifier](https://prometheus.io/docs/prometheus/latest/feature_flags/#modifier-in-promql), [promql-negative-offset](https://prometheus.io/docs/prometheus/latest/feature_flags/#negative-offset-in-promql), [promql-per-step-stats](https://prometheus.io/docs/prometheus/latest/feature_flags/#per-step-stats). |
| thanos.store-api.server-address | string | "" (disabled) | Address to listen on for Thanos Store API endpoints. |
| tracing.otlp.server-address | string | ":9202" | Address to listen on for OpenTelemetry OTLP GRPC server. |

Expand Down
2 changes: 1 addition & 1 deletion pkg/api/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ func queryHandler(queryEngine *promql.Engine, queryable promql.Queryable, update
defer cancel()
}

qry, err := queryEngine.NewInstantQuery(queryable, nil, r.FormValue("query"), ts)
qry, err := queryEngine.NewInstantQuery(queryable, &promql.QueryOpts{EnablePerStepStats: true}, r.FormValue("query"), ts)
if err != nil {
log.Error("msg", "Query error", "err", err.Error())
respondError(w, http.StatusBadRequest, err, "bad_data")
Expand Down
2 changes: 1 addition & 1 deletion pkg/api/query_range.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func queryRange(promqlConf *query.Config, queryEngine *promql.Engine, queryable

qry, err := queryEngine.NewRangeQuery(
queryable,
nil,
&promql.QueryOpts{EnablePerStepStats: true},
r.FormValue("query"),
start,
end,
Expand Down
4 changes: 2 additions & 2 deletions pkg/query/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ type Config struct {
}

func ParseFlags(fs *flag.FlagSet, cfg *Config) *Config {
fs.Var(&cfg.PromscaleEnabledFeatureList, "enable-feature", "Enable beta/experimental features as a comma-separated list. Currently the following values can be passed: promql-at-modifier, promql-negative-offset")
fs.Var(&cfg.PromscaleEnabledFeatureList, "enable-feature", "Enable beta/experimental features as a comma-separated list. Currently the following values can be passed: promql-at-modifier, promql-negative-offset, promql-per-step-stats")

fs.DurationVar(&cfg.MaxQueryTimeout, "metrics.promql.query-timeout", DefaultQueryTimeout, "Maximum time a query may take before being aborted. This option sets both the default and maximum value of the 'timeout' parameter in "+
"'/api/v1/query.*' endpoints.")
Expand All @@ -61,7 +61,7 @@ func Validate(cfg *Config) error {
cfg.EnabledFeatureMap = make(map[string]struct{})
for _, f := range cfg.PromscaleEnabledFeatureList {
switch f {
case "promql-at-modifier", "promql-negative-offset":
case "promql-at-modifier", "promql-negative-offset", "promql-per-step-stats":
cfg.EnabledFeatureMap[f] = struct{}{}
case "tracing":
log.Error("msg", "tracing feature is now on by default, no need to use it with --enable-feature flag")
Expand Down
3 changes: 2 additions & 1 deletion pkg/query/query_engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@ func NewEngine(logger log.Logger, queryTimeout, lookBackDelta, subqueryDefaultSt
LookbackDelta: lookBackDelta,
NoStepSubqueryIntervalFn: func(int64) int64 { return durationMilliseconds(subqueryDefaultStepInterval) },
}
// todo (harkishen): add promql-per-step-stats feature

_, engineOpts.EnableAtModifier = enabledFeaturesMap["promql-at-modifier"]
_, engineOpts.EnableNegativeOffset = enabledFeaturesMap["promql-negative-offset"]
_, engineOpts.EnablePerStepStats = enabledFeaturesMap["promql-per-step-stats"]
return promql.NewEngine(engineOpts), nil
}

Expand Down
5 changes: 3 additions & 2 deletions pkg/runner/flags_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,15 @@ func TestParseFlags(t *testing.T) {
},
{
name: "enable feature should populate map of enabled features",
args: []string{"-enable-feature", "tracing,promql-at-modifier,promql-negative-offset", "-tracing.otlp.server-address", "someaddress"},
args: []string{"-enable-feature", "tracing,promql-at-modifier,promql-negative-offset,promql-per-step-stats", "-tracing.otlp.server-address", "someaddress"},
result: func(c Config) Config {
c.OTLPGRPCListenAddr = "someaddress"
c.PromQLCfg.EnabledFeatureMap = map[string]struct{}{
"promql-at-modifier": {},
"promql-negative-offset": {},
"promql-per-step-stats": {},
}
c.PromQLCfg.PromscaleEnabledFeatureList = []string{"tracing", "promql-at-modifier", "promql-negative-offset"}
c.PromQLCfg.PromscaleEnabledFeatureList = []string{"tracing", "promql-at-modifier", "promql-negative-offset", "promql-per-step-stats"}
return c
},
},
Expand Down

0 comments on commit a5ffe9d

Please sign in to comment.