Error Alert Rules Health Check Rules (cron every 5 min) (Cloudflare Workflow) │ │ └──────────┬───────────────────┘ ▼ ┌────────────────┐ │ destinations │ │ (org-scoped) │ └───┬────┬────┬──┘ │ │ │ ▼ ▼ ▼ email webhook slack
# Basic: alert on any error strada alerts create --name "All errors" # With a destination (creates the destination and links it) strada alerts create --name "API errors" --channel email --to ops@example.com # Scoped to a project with custom threshold strada alerts create --name "Payments strict" --project payments --threshold 1 --cooldown 5 # Relaxed rule for a noisy project strada alerts create --name "Frontend noise" --project frontend --threshold 20 --window 30
| Flag | Default | Description |
--name | required | Human-readable rule name |
--project | all projects | Scope to a specific project |
--threshold | 1 | Minimum errors of the same fingerprint to trigger |
--window | 5 | Time window in minutes |
--cooldown | 60 | Minutes to wait before re-alerting the same error group |
--channel | none | Optionally create a destination inline (email, webhook, slack) |
--to | none | Destination address (used with --channel) |
# List all rules and destinations strada alerts list # Update a rule's settings strada alerts update <id> --threshold 5 --window 15 # Delete a rule (destinations are preserved for other rules) strada alerts delete <id> # Send a test notification to all destinations strada alerts test
# Org-wide default: alert on 1 error in 5 minutes strada alerts create --name "Default" --threshold 1 # Override for frontend: only alert on 20+ errors in 30 minutes strada alerts create --name "Frontend relaxed" --project frontend --threshold 20 --window 30 # Override for payments: alert immediately, re-alert every 5 minutes strada alerts create --name "Payments strict" --project payments --threshold 1 --cooldown 5
strada alerts create --channel --to makes it available to all current and future rules.# Email destination strada alerts create --name "Email alerts" --channel email --to ops@example.com # Webhook destination (Slack, PagerDuty, n8n, etc.) strada alerts create --name "Slack alerts" --channel webhook \ --to https://hooks.slack.com/services/T.../B.../xxx
strada destinations list
strada alerts list
strada destinations remove <id>
strada destinations list.strada destinations test # or equivalently: strada alerts test
otel_issue_state table). If the same error group triggers again within the cooldown window, the alert is suppressed. Different error groups alert independently.strada issues resolve, Strada records which deployment was running at the time. If the same error appears again from a different deployment, it is treated as a regression: the issue is reopened and a new alert fires immediately, bypassing the cooldown.{ "type": "error_alert", "project": "my-app", "org": "acme", "fingerprintHash": "a1b2c3d4...", "exceptionType": "TypeError", "exceptionMessage": "Cannot read property 'foo' of null", "errorCount": 12, "windowMinutes": 5, "firstSeen": "2026-01-15 14:30", "serviceName": "api" }
{ "type": "health_check_alert", "check": { "name": "API health", "url": "https://api.example.com/health", "method": "GET" }, "result": { "statusCode": 503, "latencyMs": 2340, "errorMessage": "Service Unavailable", "consecutiveFailures": 3 }, "org": "acme" }
{ "type": "health_check_recovery", "check": { "name": "API health", "url": "https://api.example.com/health", "method": "GET" }, "result": { "statusCode": 200, "latencyMs": 45, "errorMessage": "", "consecutiveFailures": 0 }, "org": "acme" }
strada alerts create --name "Slack" --channel webhook \ --to https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
alerts@updates.strada.sh via Cloudflare Email Workers. The email includes: