Docs Guides
Monitoring and alerts
Server and container metrics, uptime checks, alert rules and notification channels.
Every agent reports metrics without any setup. Uptime checks watch your endpoints from several regions, and alert rules decide what’s worth telling someone about.
Metrics
| Scope | Metrics |
|---|---|
| Server | cpu.used, load.1m, memory.used, swap.used, disk.used, disk.io, net.in, net.out |
| Container | container.cpu, container.memory, container.restarts, container.oom_kills, container.health |
| Check | check.status, check.latency, check.cert_days_left |
Samples are taken every 10 seconds and rolled up to 1-minute averages after 24 hours. Retention follows your plan: 7, 30 or 90 days.
Uptime checks
checks:
api:
url: https://api.example.com/health
every: 30s
expect: 200
body_contains: ok
regions: [eu, us, asia]
notify: [slack:#ops]
An endpoint is marked down only when more than one region agrees, which filters out network blips on a single path. TCP checks use tcp: db.example.com:5432 instead of url.
Alert rules
alerts:
disk-almost-full:
when: disk.used > 90%
for: 10m
target: all
notify: [slack:#ops, email:oncall@example.com]
api-restarting:
when: container.restarts > 3
within: 15m
service: api
notify: [webhook:on-call]
for means the condition must hold continuously for that long, so short spikes don’t fire. New workspaces start with sensible defaults for disk, memory, offline servers and failing checks.
Channels
| Channel | Format | Plans |
|---|---|---|
email:address | All | |
| Slack | slack:#channel | Team and above |
| Webhook | webhook:name (configured under Settings → Webhooks) | Team and above |
| PagerDuty, Opsgenie | pagerduty:service, opsgenie:team | Enterprise |
Webhooks receive a JSON payload signed with an HMAC-SHA256 Fwoop-Signature header; see webhooks.
Quiet hours and maintenance
Set quiet hours per route to hold non-urgent alerts until the morning, and schedule maintenance windows to silence a server, a label or a project during planned work:
$ fwoop maintenance start --target role=db --for 1h --reason "Postgres upgrade"