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

Last updated: April 16, 2026

Examples - Tracing Queries

Tracing-related metrics fall into the following categories, each backed by a different PromQL pattern:

  • Spans total and Errors total are raw counters — queries use increase() to return the total number of spans accumulated over the selected interval. A > 0 guard is appended to suppress empty intervals from the chart.
  • Spans rate and Error rate measure how fast spans are arriving — queries use rate() to return spans per second, which is more useful for alerting because it is not affected by the length of the time window.
  • Error percentage is a derived ratio — it divides the error span count by the total span count, returning a value between 0 and 1. Dash0 renders this as a percentage in the preview chart, so a query result of 0.05 is displayed as 5%. Thresholds in check rules must be set in the 0–1 range.
  • Duration percentiles are computed from dash0.spans.duration, Dash0's native histogram metric. Unlike classic bucket-based histograms, native histograms encode the full distribution of observed durations dynamically rather than against fixed pre-defined boundaries, which produces significantly more accurate percentile estimates — particularly in the tail. Results are multiplied by 1000 to convert from seconds to milliseconds.

The examples below show the base query for each metric with no filters or Group by applied. When you add filters or select a Group by attribute in the Query Builder, the generated PromQL will include the corresponding label matchers and by clause automatically.

MetricWhat it measuresWhen to use it
Spans totalTotal number of spans completed across all services in the selected time window.Use to understand absolute traffic volume across your entire environment and detect sudden spikes or drops in throughput.
Example:
sum(increase({otel_metric_name="dash0.spans"}[$__interval])) > 0

The > 0 guard suppresses intervals with no spans, removing empty data points from the chart.
Spans rateNumber of spans arriving per second across all services, averaged over the selected time window.Use for alerting on throughput — unlike spans total, the value is not inflated by a longer time window, making thresholds easier to reason about and reuse across different interval lengths.
Example:
sum(rate({otel_metric_name="dash0.spans"}[$__interval]))
Errors totalTotal number of spans that completed with an error status across all services in the selected time window.Use to measure the raw volume of failures across your environment — useful when you need to track absolute error budgets rather than proportional error rates.
Example:
sum(increase({otel_metric_name="dash0.spans", otel_span_status_code="ERROR"}[$__interval])) > 0

The > 0 guard suppresses intervals with no errors, keeping the chart free of flat zero lines during quiet periods.
Error rateNumber of error spans arriving per second across all services, averaged over the selected time window.Use for alerting on error throughput when you want a rate-stable signal that is independent of window length. Pair with Spans rate on the same panel to see errors in context of total traffic.
Example:
sum(rate({otel_metric_name="dash0.spans", otel_span_status_code="ERROR"}[$__interval]))
Error percentageThe proportion of spans that completed with an error status, returned as a ratio between 0 and 1. Dash0 renders this as a percentage in the preview chart — so a value of 0.28 is displayed as 28%.Use for SLO definitions and error-budget burn-rate alerts — a ratio-based threshold is stable regardless of traffic volume. Note that thresholds must be set in the 0–1 range: use > 0.05 to alert at 5% errors, not > 5.
Example:
(sum(increase({otel_metric_name="dash0.spans", otel_span_status_code="ERROR"}[$__interval])) > 0) / (sum(increase({otel_metric_name="dash0.spans"}[$__interval])) > 0) > 0

The query divides the number of error spans by the total number of spans over the same interval, producing a ratio between 0 and 1. Unlike Errors total or Error rate, this ratio stays meaningful regardless of traffic volume — a spike from 2 errors to 20 errors looks alarming in absolute terms but is far less concerning if total requests also grew tenfold.

The > 0 guard on both the numerator and denominator drops intervals where either side has no data, preventing division by zero and suppressing the result entirely during periods with no traffic or no errors. The final > 0 on the full expression ensures that intervals where the ratio evaluates to exactly zero produce no data point, keeping the chart and alert evaluations free of noise during error-free periods.
Duration — P99The 99th percentile span duration in milliseconds across all services — only the slowest 1% of requests exceed this time.Use to identify tail-latency issues that affect a small but impactful share of requests, such as cache misses or database lock contention.
Example:
histogram_quantile(0.99, sum(rate({otel_metric_name="dash0.spans.duration"}[$__interval]))) * 1000
Duration — P95The 95th percentile span duration in milliseconds across all services — only the slowest 5% of requests exceed this time.Use for SLO definitions and alerting; reflects the experience of most users, including those on slower paths.
Example:
histogram_quantile(0.95, sum(rate({otel_metric_name="dash0.spans.duration"}[$__interval]))) * 1000
Duration — P90The 90th percentile span duration in milliseconds across all services — only the slowest 10% of requests exceed this time.Use as a practical latency target for internal SLOs — broader than P95 or P99, it gives a stable signal with less sensitivity to individual outliers.
Example:
histogram_quantile(0.90, sum(rate({otel_metric_name="dash0.spans.duration"}[$__interval]))) * 1000