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

Last updated: April 16, 2026

Examples - Service Queries

Service performance metrics fall into the following categories, each backed by a different PromQL pattern:

  • Request count and Error count are raw counters — queries use increase() to return the total number of spans accumulated over the selected interval.
  • Request 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
Request countTotal number of spans completed by the service in the selected time window.Use to understand absolute traffic volume and detect sudden spikes or drops in throughput.
Example:
sum by (service_namespace, service_name) (increase({otel_metric_name="dash0.spans", service_name="frontend", service_namespace="acme-prod", dash0_operation_name!=""}[$__interval]))
Request rateNumber of spans arriving per second, averaged over the selected time window.Use for alerting on throughput — unlike request count, the value is not inflated by a longer time window, making thresholds easier to reason about and reuse across different interval lengths.
Example:
sum by (service_namespace, service_name) (rate({otel_metric_name="dash0.spans", service_name="frontend", service_namespace="acme-prod", dash0_operation_name!=""}[$__interval]))
Error countTotal number of spans that completed with an error status in the selected time window.Use to measure the raw volume of failures — useful when you need to track absolute error budgets rather than proportional error rates.
Example:
sum by (service_namespace, service_name) (increase({otel_metric_name="dash0.spans", service_name="frontend", service_namespace="acme-prod", otel_span_status_code="ERROR", dash0_operation_name!=""}[$__interval]))
Error rateNumber of error spans arriving per second, 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 Request rate on the same panel to see errors in context of total traffic.
Example:
sum by (service_namespace, service_name) (rate({otel_metric_name="dash0.spans", service_name="frontend", service_namespace="acme-prod", otel_span_status_code="ERROR", dash0_operation_name!=""}[$__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 by (service_namespace, service_name) (increase({otel_metric_name = "dash0.spans", service_name = "frontend", service_namespace = "acme-prod", dash0_operation_name != "", otel_span_status_code = "ERROR"}[$__interval]))) / (sum by (service_namespace, service_name) (increase({otel_metric_name = "dash0.spans", service_name = "frontend", service_namespace = "acme-prod", dash0_operation_name != ""}[$__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 Error count 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 the denominator prevents division by zero during intervals with no traffic, dropping the data point instead of producing NaN or +Inf. The > 0 on the full expression suppresses data points when there are no errors, removing the flat zero line from the chart and keeping alert evaluations free of noise during quiet periods.
Duration — P99The 99th percentile span duration in milliseconds — 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 by (service_namespace, service_name) (rate({otel_metric_name="dash0.spans.duration", service_name="frontend", service_namespace="acme-prod", dash0_operation_name!=""}[$__interval]))) * 1000
Duration — P95The 95th percentile span duration in milliseconds — 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 by (service_namespace, service_name) (rate({otel_metric_name="dash0.spans.duration", service_name="frontend", service_namespace="acme-prod", dash0_operation_name!=""}[$__interval]))) * 1000
Duration — P90The 90th percentile span duration in milliseconds — 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 by (service_namespace, service_name) (rate({otel_metric_name="dash0.spans.duration", service_name="frontend", service_namespace="acme-prod", dash0_operation_name!=""}[$__interval]))) * 1000