Dash0 Raises $110M Series B at $1B Valuation

Last updated: July 24, 2026

Recording Rule Limits

Query window and evaluation interval limits that Dash0 enforces on recording rules, including per-window interval floors, the recording-rule-over-recording-rule relaxation, expression constraints, and the maximum query window.

Recording rules pre-compute frequently needed or expensive PromQL expressions and store the results as new time series. Because each rule re-runs its expression on a fixed interval, Dash0 enforces limits on the relationship between a rule's query window and its group's evaluation interval, along with a maximum query window and a set of expression constraints. These limits keep evaluation costs predictable and protect query performance across your organization.

Recording rules are defined as code. See the dash0_recording_rule Terraform resource and the Prometheus recording rule specification for the definition format. The limits below are validated when a recording rule group is created or updated, so a rule that violates a limit is rejected at apply time.

What Is the Query Window

The query window is the largest range that any matrix selector or subquery looks back over, across every rule in the group. It is not the group's evaluation interval.

promql
12345
# Query window is 5m.
rate(http_requests_total[5m])
# Query window is 1w (168h), the widest range wins.
avg_over_time(job:http_requests:rate5m[1w])

Because the interval is set per group and the floor is based on the widest window in the group, a single wide-window rule raises the minimum interval for the whole group.

Minimum Evaluation Interval per Query Window

The wider the query window, the more data each evaluation scans, so Dash0 requires a longer minimum interval as the window grows:

Query windowMinimum intervalMinimum interval (recording-rule inputs)
1h 10m or less1m1m
More than 1h 10m, up to 8h 10m5m5m
More than 8h 10m, up to 24h 10m10m5m
More than 24h 10m1h5m

An interval below 1 minute is never allowed, regardless of query window.

Note

The boundaries use a strict "greater than" comparison, so a window that lands exactly on a boundary stays in the lower band. A [1h] selector sits at one hour, which is within the "1h 10m or less" band, so the 1-minute minimum applies. The extra 10 minutes on each boundary exists so that common round windows such as [1h], [8h], and [24h] do not fall into a stricter band.

Relaxed Floors for Rules Built on Recording Rules

The right-hand column applies when every metric a rule references is itself the output of another active recording rule in the same dataset. In that case, the 10-minute and 1-hour floors relax to the 5-minute floor.

This is safe because the inner recording rule was already validated when it was created. Its own interval bounds how often its output is produced, and its own bounded selectors bound its cardinality, so the outer rule that reads that output inherits those bounds.

This relaxation supports layered rules, such as a long-term aggregation built on top of a shorter pre-computed rate:

promql
12
# Long-term mean of an existing 5m rate, evaluated every 5m.
avg_over_time(job:http_requests:rate5m[1w])

The relaxation does not apply if the rule references any raw (non-recording-rule) metric. A rule that mixes a recording-rule output with a raw metric is held to the standard floors in the left column. A rule later in the same group may reference the output of an earlier rule in that group.

Maximum Query Window

A recording rule's query window may not exceed 30 days. A rule whose widest matrix-selector or subquery range is larger than 30 days is rejected.

Expression Constraints for Wide Windows

When a rule's query window is greater than 1h 10m, Dash0 applies additional constraints on the expression to keep each evaluation bounded. Rules with a query window of 1h 10m or less are not subject to these constraints.

  • Distinct metric names: A single rule may reference at most 7 distinct metric names.
  • Bounded matrix selectors: Every matrix selector must be bounded by at least one of the following: a label matcher other than the metric name (for example, metric{service="auth"}[1h]), an enclosing range function (such as rate or avg_over_time), an enclosing aggregation with by (...) or without (...), or an inner metric that is itself a recording-rule output. A bare selector on a raw metric with no matcher or wrapping is rejected.
  • or operators: A single rule may use at most 10 or operators.
  • No self-reference: A rule's own record name may not appear in its own expression.

Further Reading