Skip to content

Health Checks

Emit ships separate health check packages for each provider. Each package registers a lightweight probe against the infrastructure already wired up in your DI container, so no extra connections are created.

Installation

Install only the packages that match your registered providers:

Terminal window
dotnet add package Emit.Kafka.HealthChecks
dotnet add package Emit.MongoDB.HealthChecks
dotnet add package Emit.EntityFrameworkCore.HealthChecks

Registration

Chain the Emit health checks into AddHealthChecks():

builder.Services.AddHealthChecks()
.AddEmitKafka()
.AddEmitMongoDB();

For the EF Core provider, pass your DbContext type:

builder.Services.AddHealthChecks()
.AddEmitKafka()
.AddEmitPostgreSQL<AppDbContext>();

Then map the endpoint:

app.MapHealthChecks("/health");

What each probe does

MethodProbePackage
AddEmitKafka()Cluster metadata request via the registered IProducerEmit.Kafka.HealthChecks
AddEmitMongoDB()db.runCommand({ping: 1}) against the configured databaseEmit.MongoDB.HealthChecks
AddEmitPostgreSQL<T>()CanConnectAsync() via IDbContextFactory<T>Emit.EntityFrameworkCore.HealthChecks

All probes are read-only and non-destructive.

Options

Every method accepts the same optional parameters:

builder.Services.AddHealthChecks()
.AddEmitKafka(
name: "emit-kafka",
failureStatus: HealthStatus.Degraded,
tags: ["messaging"],
timeout: TimeSpan.FromSeconds(10))
.AddEmitMongoDB(
name: "emit-mongodb",
failureStatus: HealthStatus.Degraded,
tags: ["database"]);
ParameterDefaultDescription
nameemit-kafka / emit-mongodb / emit-postgresqlName shown in health check results
failureStatusUnhealthyStatus reported on failure; use Degraded to avoid hard-failing readiness probes
tags["emit", "<provider>"]Tags for filtering checks by endpoint
timeout30 s (5 s for Kafka)Per-check timeout

Filtering by tag

Use tags to separate liveness from readiness probes in Kubernetes:

// Liveness: is the process alive?
app.MapHealthChecks("/health/live");
// Readiness: are downstream services reachable?
app.MapHealthChecks("/health/ready", new HealthCheckOptions
{
Predicate = check => check.Tags.Contains("emit")
});