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

Last updated: June 1, 2026

Route Check Rule Notifications

Similar to Prometheus Alertmanager, Dash0 uses labels to route failed checks to the right notification channels — but with a simpler configuration model.

Labels are derived from the query results produced by the check rule, and can also be added manually to a check rule for routing purposes.

Dash0 provides two ways to associate check rules with notification channels:

  • Direct assignment — Assign channels directly when creating or editing a check rule
  • Label-based routing — Define conditions on notification channels so they automatically receive alerts based on label matching

Label-based routing is the recommended approach for most teams. It provides several advantages:

  • Dynamic routing: Alerts automatically route to the correct channels based on labels, without modifying check rules
  • Centralized configuration: Manage routing logic in one place (notification channels) rather than scattered across check rules
  • Easier maintenance: Add new services or teams without updating existing check rules
  • Flexibility: One alert can route to multiple channels based on different label conditions

Both approaches can be combined. For example, you can use label-based routing for team channels and direct assignment for critical escalation paths.

Add Labels to Check Rules

Labels on check rules provide the metadata used for routing decisions, allowing you to direct alerts based on team ownership, priority, or other organizational dimensions.

When creating a check rule, add custom labels as key–value pairs in the Additional Labels section. These are merged into the metadata of any failed check produced by that rule.

For example, adding team: sre means any notification channel configured to attract team=sre will receive alerts from this rule — regardless of which service is involved.

Label example

See Create Check Rules from Scratch for step-by-step instructions on adding labels to check rules.

Tip

Synthetic checks support the same label mechanism. Labels added to a synthetic check are included in the failed check metadata and can be used for routing.

Define Notification Conditions

Create filters on notification channels to automatically route alerts based on their labels, enabling dynamic routing without hardcoding channels in check rules.

In the Notification Channels settings, define conditions to control which failed checks trigger a given channel.

Notification conditions

  • Each condition is built from one or more filters — for example, team = sre.
  • Multiple filters within a single condition are combined with AND.
  • Multiple conditions are combined with OR.

Examples:

  • team = sre — only notifies for checks labeled team: sre.
  • [team = sre] OR [team = dev] — notifies for checks from either team.
  • service_name = checkout AND priority = p1 — notifies only for critical checkout service alerts.

Discover Labels and Values

When you are creating check rules, the notification condition editor provides autocompletion to help you discover available labels and values.

Summary completion example

When you type an opening brace {, the auto-completion dropdown shows all available labels based on your query evaluation. If you don't see expected labels, check the preview chart to confirm which labels your query produces.

  • {{$threshold}}: The threshold value specified in the Thresholds section (degraded or critical, whichever fired).
  • {{$value}}: The actual metric value that triggered the alert.
  • {{$labels.label_name}}: Includes any label from your query results or hard-coded labels.

Where labels come from:

  • Labels projected by your PromQL query, such as {{ $labels.service_name }} and {{ $labels.jvm_memory_type }} below. Label example These are visible in the evaluation preview chart legend, such as service_name and jvm_memory_type below. Label example
  • Custom labels, which you define, such as {{ $labels.team }} below. Summary completion example You define these as part of the check rule in the Additional Labels section, such as team:sre below. Label example

For details, see Optimize Alert Messages with Templates.

Route by Severity

Different notification channels often have different severity requirements, such as sending all alerts to Slack but only critical alerts to PagerDuty. You can route notifications based on severity using the dash0.failed_check.max_status attribute.

A common pattern:

  • Slack — no severity filter (receives all alerts for team visibility)
  • PagerDutydash0.failed_check.max_status = critical (on-call notifications for critical issues only)

The dash0.failed_check.max_status attribute reflects the highest severity reached during a check's lifecycle, not its current state. Once a check escalates to critical, all subsequent notifications — including resolution — route to channels matching critical.

This ensures that if, for example, PagerDuty was notified when the check became critical, it also receives the resolution notification.

Severity ProgressionSlack (all)PagerDuty (critical only)
Degraded → Degraded → Degraded✓ ✓ ✓✗ ✗ ✗
Degraded → Critical → Critical✓ ✓ ✓✗ ✓ ✓
Degraded → Critical → Degraded✓ ✓ ✓✗ ✓ ✓
Critical → Critical → Critical✓ ✓ ✓✓ ✓ ✓
Critical → Degraded → Critical✓ ✓ ✓✓ ✓ ✓
Critical → Degraded → Degraded✓ ✓ ✓✓ ✓ ✓

Further Reading