Skip to main content

Alerts & Notifications

The bell in the top bar and the Notifications page show you the things that actually matter about your workspaces — "your app is crash-looping", "the deploy failed", "this volume is 92% full", "a node went offline" — as a short, actionable list, not a firehose of raw events.

The difference is judgement. A crash-looping app emits ~40 Docker events in two minutes; a naive feed shows 40 red rows. Miabi shows one alert that updates in place ("crash-looping — 8 restarts") and auto-resolves to "recovered" when it stabilizes.

From signals to notifications

Three layers make that work:

  • Signals — raw, factual facts from the platform (container events, deploy and backup outcomes, cert/disk/quota scans, node/runner status).
  • Alerts — the derived, deduplicated, stateful conditions. Workspace-level and shared.
  • Notifications — the per-user delivery. Read/unread is per user.

The alerts view with an active alert and its history

What you get — the built-in catalog​

Alerts arrive already tuned so a normal deploy is silent and a real problem is one line. Each links to the resource and, where possible, an action.

AlertSeverityFires onAuto-resolves when
Deploy failedcriticala build/deploy failsthe next deploy succeeds
App crash-loopingcriticalrepeated container exits in a windowit stays healthy / a good deploy
App OOM-killedcriticala container is OOM-killedit recovers
App unhealthywarningthe health check failsit reports healthy
Workload missingwarningan app's container or swarm service disappeared from its node or clusterit exists again
Cannot be brought backcriticalthe control manager gave up redeploying a missing appthe workload exists again
Data volume lostcriticalthe volume holding an app's or database's data is gone, or was recreated outside Miabithe volume exists again
Volume near fullwarning → criticalusage ≥ 85% / ≥ 95%usage drops back
Database crash-loopingcriticalrepeated database container exits in a windowit reports healthy / it starts
Database OOM-killedcriticala database container is OOM-killedit reports healthy / it starts
Database unhealthywarningthe database health check failsit reports healthy
Database provisioning failedcriticalan instance does not finish provisioningit is provisioned
Database upgrade failedcriticala version upgrade does not completean upgrade succeeds
Database backup failedcriticala backup run failsthe next backup succeeds
Recovery point failedcriticala whole-instance recovery point does not complete, or fails verificationthe next recovery point succeeds
TLS certificate expiringwarning → critical< 14 days / < 3 days to expiryit is renewed
Certificate issuance failedcriticalACME issuance/renewal failsit is issued
Approaching quotawarninga resource passes 90% of the plan limitusage drops back
Node offlinecriticalan agent tunnel dropsthe node reconnects
Runner offlinewarninga runner tunnel dropsthe runner reconnects

The workload-missing, cannot-be-brought-back and data-volume-lost alerts come from Reconciliation; they fire unless the control manager is off (or the app is set to Leave this app alone).

Dedup and auto-resolve are the feature

A repeat signal folds into the existing alert (its count climbs) instead of creating a new one, and it never re-notifies. When the condition clears, the alert auto-resolves and its notification updates to "recovered" — so the bell never floods and never lies.

Severity & lifecycle​

  • Severities: info (FYI), warning (degraded), critical (down/failing).
  • Lifecycle: an alert is firing → optionally acknowledged (you're on it, silence re-notification without hiding it) → resolved (auto when the condition clears, or manually). Resolved alerts are kept as history.

Who gets what​

Notifications are workspace- and role-scoped — you only ever see alerts for a workspace you belong to:

  • Developers get their apps' and databases' deploy/runtime/backup/TLS/disk and reconciliation alerts.
  • Admins/Owners additionally get quota alerts.
  • Platform alerts — a node going offline or a shared runner dropping — aren't tied to any tenant workspace. They are attributed to the built-in Miabi System workspace and delivered to platform super-admins. A workspace-owned runner, by contrast, notifies that workspace's members.

Scheduled backups report both outcomes​

A backup you start yourself reports itself: you are looking at the row. A backup at 03:00 has nobody watching, which is the only reason its outcome has to go anywhere — so scheduled runs post to the workspace inbox either way, and manual ones stay silent.

OutcomeWhat appearsSeverity
Completed"Recovery point completed — instance", with the databases covered and the size storedinfo
Failed"Recovery point failed — instance", with the reasonwarning, plus a critical alert

A failure produces both because the two do different jobs. The alert is the open condition — it dedups, and it auto-resolves when the next run succeeds. The inbox item is the record of that particular run, which stays put after the condition clears.

A recovery point posts one item covering every database it took, not one per database. The per-database backups inside it stay silent for that reason.

A nightly schedule per database is a nightly notice per database

Completion notices are not rate-limited. Thirty databases on their own nightly schedules produce thirty inbox items every morning, and an inbox nobody reads is worse than no inbox — the failure gets skimmed past with the rest. Prefer one recovery point schedule per instance, which collapses the whole instance into a single notice.

Delivery​

  • In-app is always on and real-time. New notifications push to the bell over SSE — the same mechanism as live deploy logs — so the unread badge updates without a refresh. The Notifications page is the full, filterable inbox (by workspace, severity, read/unread), with mark-read / mark-all-read.
  • No configuration is required; the engine runs with the platform and keeps its hot state (dedup windows, cooldowns) in Redis so it is correct across replicas.
note

This is separate from webhooks & notification channels (Telegram/Slack/Discord) that fire on application events, and from the Audit Log (a compliance record of user actions). Routing alerts to email/chat channels and escalation policies are on the roadmap.