Deployment Overview
CritterWatch consists of two deployment units:
Wolverine.CritterWatch— a lightweight NuGet library embedded in each monitored service- CritterWatch Server — a standalone ASP.NET Core application running the monitoring console
Architecture
Component Overview
Wolverine.CritterWatch (Observer)
Installed in each monitored service, this library:
- Implements
IWolverineObserverto intercept Wolverine runtime events - Batches state snapshots into
ServiceUpdatesmessages sent every second - Responds to inbound commands from CritterWatch (pause listener, replay messages, etc.)
- Performs periodic agent health checks every 60 seconds
- Tracks endpoint circuit breakers, back pressure, and node assignments
The observer adds negligible overhead — it batches events and publishes on a 1-second timer, avoiding hot-path latency impact.
CritterWatch Server
A dedicated ASP.NET Core application that:
- Receives
ServiceUpdatesfrom all monitored services via the configured transport - Projects state into Marten event store (one event stream per service, keyed by service name)
- Relays live updates to browsers over SignalR
- Serves the embedded Vue SPA
- Exposes an HTTP API for queries and command dispatch
- Evaluates alert thresholds and manages alert lifecycle
- Sends commands to monitored services on operator request
PostgreSQL / Marten
CritterWatch uses Marten as its internal event store. Each monitored service gets its own event stream keyed by ServiceName. Projections materialize a ServiceSummary snapshot document from the event stream, enabling fast queries without replaying full streams.
Transport (RabbitMQ)
RabbitMQ (or any Wolverine transport) serves as the communication backbone:
- Outbound (services → CritterWatch):
ServiceUpdatesbatches published by monitored services - Inbound (CritterWatch → services): Commands routed directly to the target service's queue
Both the monitored services and CritterWatch server must be configured with the same transport.
Deployment Topologies
Development (Aspire)
.NET Aspire orchestrates all services locally, managing the dev server, database connections, and service discovery automatically. See Hosting Guide.
Standalone Server
CritterWatch runs as a dedicated web application. Monitored services connect via RabbitMQ. The embedded SPA is served directly from the server. Suitable for most production deployments.
Embedded
CritterWatch is embedded in an existing ASP.NET Core application alongside your other middleware. Less common, but useful for resource-constrained environments.
