strada checks create Cloudflare Workflow --url https://api.example.com/health (every 5 min) --name "API health" │ │ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │ fetch URL │ │ D1 database │◀─── config ─────────────│ measure ms │ │ (alert_rule) │ │ check 2xx │ └──────────────┘ └──────┬───────┘ │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ ClickHouse consecutive email/webhook results table failure check alert sent
strada checks create --url https://api.example.com/health --name "API health"
strada alerts create --name "Notifications" --channel email --to ops@example.com
| Flag | Default | Description |
--url | required | URL to fetch |
--name | required | Human-readable name for the check |
--method | GET | HTTP method (GET, HEAD, POST, PUT, DELETE, OPTIONS) |
--schedule | */5 * * * * | Cron expression in UTC (minimum granularity 5 min) |
--timeout | 10000 | Request timeout in milliseconds |
--failures | 2 | Consecutive failures before alerting |
--status-min | 200 | Minimum acceptable status code |
--status-max | 299 | Maximum acceptable status code |
--cooldown | 60 | Minutes to wait before re-alerting the same check |
--auto-disable-hours | 24 | Auto-disable after N hours of continuous failure (0 to disable) |
--project | all | Scope the check to a specific project |
strada checks create \ --url https://api.example.com/health \ --name "API health" \ --timeout 5000 \ --failures 3 \ --schedule "*/10 * * * *" \ --cooldown 30
# List all health checks strada checks list # Delete a check (historical results remain in ClickHouse) strada checks delete 01KPVGTT9CJW4ZNEF414VHGRFD # Disable a check without deleting it strada checks disable 01KPVGTT9CJW4ZNEF414VHGRFD # Re-enable a disabled check strada checks enable 01KPVGTT9CJW4ZNEF414VHGRFD
--failures, default 2). This avoids false alarms from network blips or brief deploys.check 1: ✓ pass check 2: ✗ fail ← failure count: 1 check 3: ✗ fail ← failure count: 2 → alert sent check 4: ✗ fail ← within cooldown, no re-alert check 5: ✓ pass ← recovery alert sent
--cooldown minutes (default 60) before sending another alert for the same check. This prevents notification spam during extended outages.--auto-disable-hours (default 24 hours), Strada automatically disables it and sends a final notification. This prevents filling your database with thousands of identical failure rows from a decommissioned service or misconfigured URL.strada checks enable <id>
set-cookie). This means an agent or human debugging the outage can see exactly what the server returned.otel_health_checks ClickHouse table. Query them with SQL:# Recent failures for a specific URL strada query " SELECT Timestamp, StatusCode, LatencyMs, ErrorMessage FROM otel_health_checks WHERE Success = 0 ORDER BY Timestamp DESC LIMIT 20 " # Availability percentage over the last 30 days strada query " SELECT countIf(Success = 1) * 100.0 / count() AS availability_pct FROM otel_health_checks WHERE Url = 'https://api.example.com/health' AND Timestamp >= now() - INTERVAL 30 DAY LIMIT 1 " # Latency percentiles strada query " SELECT quantile(0.5)(LatencyMs) AS p50, quantile(0.95)(LatencyMs) AS p95, quantile(0.99)(LatencyMs) AS p99 FROM otel_health_checks WHERE Url = 'https://api.example.com/health' AND Timestamp >= now() - INTERVAL 24 HOUR LIMIT 1 " # Read the response body from the last failure strada query " SELECT Timestamp, StatusCode, ResponseBody FROM otel_health_checks WHERE Success = 0 AND Url = 'https://api.example.com/health' ORDER BY Timestamp DESC LIMIT 1 "
# Create the check strada checks create \ --url https://api.example.com/health \ --name "Production API" # Make sure you have alert destinations strada alerts add --channel email --to oncall@example.com strada alerts add --channel webhook --to https://hooks.slack.com/services/...
strada checks create --url https://api.example.com/health --name "API" strada checks create --url https://example.com --name "Marketing site" strada checks create --url https://app.example.com/health --name "Dashboard" strada checks create --url https://ws.example.com/health --name "WebSocket server" --timeout 3000
# Accept 200-399 as healthy (includes redirects) strada checks create \ --url https://legacy.example.com/ping \ --name "Legacy service" \ --status-min 200 \ --status-max 399
--auto-disable-hours 0:strada checks create \ --url https://payments.example.com/health \ --name "Payment gateway" \ --auto-disable-hours 0