Free & open source · FSL-1.1-ALv2

Self-hosted observability,
embedded in your own app.

Logs, metrics, traces, and alerts for ASP.NET Core — with real ingestion and zero external dependencies. No collector, no separate service, no Docker Compose file. Two calls in Program.cs and it's running.

> dotnet add package Nafas.Observability

One package. Every signal.

Logs

Every ILogger call, captured automatically the moment AddNafasServer() runs — no bespoke sink to wire up.

Metrics

Built on System.Diagnostics.Metrics — CPU, memory, and your own custom meters, charted out of the box.

Traces

Distributed traces via Activity/ActivitySource, the same primitives OpenTelemetry itself is built on.

Alerting

Threshold and absence rules, authored from the dashboard — fires only on state transitions, delivered to your own webhook.

That's the whole integration.

No collector to run, no exporter to configure, no separate storage to stand up. AddNafasServer() wires up SQLite storage and real ingestion; UseNafasDashboard() mounts the dashboard at whatever path your app chooses.

csharp
builder.Services.AddNafasServer();

var app = builder.Build();
app.UseNafasDashboard("/nafas");

app.Run();

Automatic. No instrumentation code.

Ingestion is decoupled from your request pipeline via a bounded, non-blocking channel — a burst of traffic slows nothing down.

SignalSourceNotes
LogsILogger / ILoggerProviderEvery log call in your app and its dependencies, no bespoke sink.
TracesActivity / ActivitySourceThe same primitives OpenTelemetry itself is built on.
MetricsMeter / MeterListenerYour own custom meters, plus CPU/memory resource metrics.
Resource usageGC.GetGCMemoryInfo / Win32 fallbackContainer-aware where the runtime supports it.

Is this for you?

Nafas is a good fit if

  • you run one app (or a handful) and want real observability without standing up infrastructure
  • you want the same "just works" posture as Hangfire's own dashboard — secured to local requests by default
  • SQLite or SQL Server already covers your storage needs

Reach for OTel + Prometheus/Grafana instead if

  • you need federation across dozens of services or long-term, high-cardinality storage
  • you're already exporting to a central observability backend
  • you need a query language beyond what a single embedded dashboard offers
netstandard2.0.NET Core 2.0+.NET 5+.NET Framework 4.6.1+SQLiteSQL Server 2016+

Two NuGet packages. Zero infrastructure.

Nafas.Observability for any ASP.NET Core app, Nafas.Observability.Server for WinForms/WPF/console apps with no pipeline of their own.