Skip to content

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

ScopeMetrics
Servercpu.used, load.1m, memory.used, swap.used, disk.used, disk.io, net.in, net.out
Containercontainer.cpu, container.memory, container.restarts, container.oom_kills, container.health
Checkcheck.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

ChannelFormatPlans
Emailemail:addressAll
Slackslack:#channelTeam and above
Webhookwebhook:name (configured under Settings → Webhooks)Team and above
PagerDuty, Opsgeniepagerduty:service, opsgenie:teamEnterprise

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"