Browse the documentation

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.

Five health probes, each answering one question from the engine's lifecycle state Orchestratorone probe per question live alive enough that a restart would not help? startup has initial startup finished, either way? ready may ordinary traffic use the database? readable are reads admitted right now? writable are writes admitted right now?Each probe reads lifecycle state only: cheap by contract, it never scans or repairs. The hosted modules also serve them at /health, without authentication.
One probe per question. Each reads the engine's lifecycle state and nothing else, so an orchestrator can poll them freely.

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.

An unhandled error has occurred. Reload X

Reconnecting

Restoring the connection to the server...

Still trying

Next attempt in seconds

Connection lost

We could not reach the server.