Skip to content

Observability

Observability APIs show the operator the physical truth — they are the one place backends may differ (on SQLite you honestly see a region local with one worker).

st, err := db.MigrationStatus(ctx)
// st.Phase "backfill"
// st.CurrentVersion / TargetVersion
// st.Geo["eu-central"].Percent 87.3
// st.Geo["eu-central"].Workers 4
h, err := db.Health(ctx)
// h.Instances live instances (geo, role, app/schema version, heartbeat)
// h.Projections lag per projection/region (events behind the log)
// h.Regions topology status (active/bootstrapping/draining)

Both return plain data structures — wiring them to logging/metrics/health endpoints is the app’s job.