Health & metrics
Health probes and the NetlyDB meter.
Health probes
Five projections, each registered as its own health check with its own tag, so an orchestrator can wire one probe per question instead of reading one composite answer. Each is cheap by contract: it reads lifecycle state and never scans or repairs. Health checks are part of the Community edition.
builder.Services.AddHealthChecks().AddNetlyDB();
// One probe per question, selected by tag:
app.MapHealthChecks("/health/live", new() { Predicate = c => c.Tags.Contains("live") });
app.MapHealthChecks("/health/startup", new() { Predicate = c => c.Tags.Contains("startup") });
app.MapHealthChecks("/health/ready", new() { Predicate = c => c.Tags.Contains("ready") });
app.MapHealthChecks("/health/readable", new() { Predicate = c => c.Tags.Contains("readable") });
app.MapHealthChecks("/health/writable", new() { Predicate = c => c.Tags.Contains("writable") });
live- is the runtime alive enough that restarting it would not help?startup- has initial startup finished, successfully or not?ready- may ordinary application traffic use this database?readable/writable- are reads, or writes, admitted right now?
The REST API, MCP and Management UI hosts also serve these probes under /health, without authentication by
design.
Metrics
NetlyDB publishes on the NetlyDB System.Diagnostics.Metrics meter, covering the mutation
pipeline, the WAL and group commit, snapshots, recovery, indexes, queries, replication, storage, memory and lifecycle.
No exporter is bundled: connect the meter to the telemetry pipeline your host already uses.
// NetlyDB publishes on the "NetlyDB" System.Diagnostics.Metrics meter.
// Export it with the OpenTelemetry pipeline your host already uses:
builder.Services.AddOpenTelemetry()
.WithMetrics(metrics => metrics
.AddMeter("NetlyDB")
.AddOtlpExporter());
Instrument names, units and labels are an append-only published contract. Label sets are bounded - no instrument carries an identifier-valued label - so metric cardinality does not grow with your data. Diagnostic events are emitted outside every correctness-critical lock, so a slow or failing sink degrades observability and never blocks a write.
Metrics dashboard Enterprise
The Management UI's Metrics page shows live values. It is the part of observability that requires an Enterprise license; the meter and the health checks do not.