Last updated: May 29, 2026
Configure Meta Check Rules
Meta check rules monitor the health of other check rules and synthetic checks, enabling higher-level alerting patterns. Instead of alerting on application metrics directly, meta checks alert when your monitoring system itself is experiencing issues.
Use Cases for Meta Check Rules
Meta check rules provide higher-level monitoring by tracking the health of your alerting system itself. Meta check rules are useful for:
- Monitor check rule health: Alert when too many check rules are failing across a team or environment
- Track synthetic check performance: Monitor the latency or success rate of synthetic checks
- Aggregate failure patterns: Detect systemic issues when multiple related checks fail simultaneously
- Monitor alerting coverage: Ensure critical services have active check rules
Create a Meta Check Rule
Creating a meta check rule follows the same process as creating a regular check rule, but uses special Dash0 metrics that track check rule execution and results. These examples demonstrate common meta check patterns.
Monitor Aggregated Check Failures
Alert when a team has too many failing check rules:
1sum by (team) {otel_metric_name = "dash0.check.status"} > $__threshold
This query groups check failures by the team label and alerts when any team exceeds the threshold.
How it works:
- Each failing check rule emits a
dash0.check.statusmetric - The query sums these by team label
- When a team has more than the threshold number of failures, the meta check fires
Monitor Synthetic Check Latency
Alert when synthetic checks are experiencing high latency:
123histogram_quantile(0.9, sum by (dash0_synthetic_check_location)(rate({otel_metric_name = "dash0.synthetic_check.http.total.duration", dash0_check_type = "synthetic.http"}[5m]))) > $__threshold
This query calculates the P90 latency of synthetic HTTP checks grouped by location.
How it works:
- Synthetic checks emit duration metrics
- The query calculates P90 latency per location
- Alerts when any location exceeds the latency threshold
Monitor Check Rule Coverage
Ensure all critical services have active check rules:
1count by (service_name) {otel_metric_name = "dash0.check.status", service_name != ""}
Combine this with an enablement condition that only fires when the count is zero for a critical service.
Meta Check Technical Details
When creating meta check rules, be aware of these technical behaviors that prevent conflicts and ensure proper operation.
Label Renaming
Original labels like dash0_check_*, dash0_resource_*, and dash0_issue_* are automatically renamed with an _original suffix (e.g., dash0_check_id_original) to prevent conflicts when the meta check itself generates metrics.
Example:
- Original check rule has label:
dash0_check_id=abc123 - In meta check metrics, this becomes:
dash0_check_id_original=abc123 - The meta check's own ID uses:
dash0_check_id=xyz789
Meta Check Identification
Metrics generated by meta check rules are labeled with dash0_check_type=meta_check_rule to distinguish them from regular check rules and synthetic checks.
This allows you to:
- Filter for meta checks specifically in queries
- Create dashboards showing only meta check status
- Route meta check notifications differently
Loop Prevention
Meta check rules do not evaluate metrics from other meta check rules, preventing circular dependencies and infinite loops.
What this means:
- A meta check cannot monitor other meta checks
- The
dash0.check.statusmetric only includes regular check rules and synthetic checks - You can safely create multiple meta checks without worrying about cross-monitoring
Available Meta Check Metrics
Use these specialized metrics in your meta check queries to monitor the health and performance of your alerting system. Dash0 provides these metrics for meta check rules:
dash0.check.status: Current status of check rules (0=OK, 1=Degraded, 2=Critical)dash0.check.evaluation.duration: Time taken to evaluate a check ruledash0.check.evaluation.errors: Count of evaluation errorsdash0.synthetic_check.http.total.duration: Synthetic HTTP check durationdash0.synthetic_check.success: Synthetic check success/failure (1=success, 0=failure)
See the Dash0 metrics documentation for a complete list of available meta check metrics.
Best Practices
Follow these guidelines to create effective meta checks that provide valuable insights without adding noise or performance overhead.
Start with High-Level Aggregations
Begin with broad meta checks that aggregate across teams or environments before creating detailed per-service meta checks.
Good starting point:
1sum {otel_metric_name = "dash0.check.status", severity = "critical"} > 10
Use Enablement Conditions
Prevent false alerts during maintenance windows or low-traffic periods:
12345# Main query: count failing checkssum {otel_metric_name = "dash0.check.status"} > $__threshold# Enablement condition: only alert during business hourshour() >= 9 AND hour() < 17
Set Appropriate Grace Periods
Meta checks should have longer grace periods than regular checks to avoid alert fatigue from transient issues:
- Regular checks: 1-2× grace period
- Meta checks: 3-5× grace period
Group by Relevant Dimensions
Choose grouping labels that align with your team structure:
12345678# Group by team for team-specific alertssum by (team) {otel_metric_name = "dash0.check.status"}# Group by environment for environment-specific alertssum by (deployment_environment_name) {otel_metric_name = "dash0.check.status"}# Group by service for service-specific coverage checkscount by (service_name) {otel_metric_name = "dash0.check.status"}
Further Reading
- About Alert Monitoring — Overview of Dash0's alerting capabilities and how check rules monitor your systems.
- Create Check Rules — Set up regular check rules to monitor metrics, logs, spans, and web events.
- Investigate Failed Checks — Troubleshoot failed checks by exploring the underlying telemetry.
- How the Alerting Model Works — Deep dive into the technical implementation of Dash0's alerting system.