Operations — monitoring
What it is
What observability ManpowerIQ actually has. Honestly: structured logging via Serilog, and that's it. There is no distributed tracing, no metrics/APM, and no alerting wired in.
What's present
- Serilog structured logging — wired in
Program.cs(UseSerilog); the application emits structured JSON logs. This is the LIVE observability surface (see Developer Guide overview). - Health endpoint —
GET /api/healthreturns status + database + version (used by the mobile skeleton and as a liveness check). - The audit log —
audit_eventsis a business-audit trail (who did what), readable via/api/audit/events. It is selective/manual, not a system telemetry feed (see Audit & soft-delete).
What's not present
- No OpenTelemetry / distributed tracing — verified absent (no
OpenTelemetry/Otlp/TracerProvider). - No APM / metrics backend — no Prometheus, no metrics exporter.
- No alerting — nothing pages on error rates or latency.
- No log aggregation pipeline is documented — Serilog writes structured logs; shipping them somewhere is a deployment concern that isn't built (see Deployment).
Gotchas / constraints
- Don't claim tracing/APM — the stack is Serilog-only. Anything implying OpenTelemetry/Grafana/Datadog is aspirational.
- The health endpoint is liveness, not deep health — it confirms the API + DB respond; it doesn't check Hangfire, RLS, or downstream state.
- Audit ≠ monitoring — the audit log is for business accountability, not operational telemetry, and it only contains explicitly-logged events.
Build status
Partial — Serilog structured logging + a health endpoint are LIVE; tracing, metrics, APM, and alerting are absent/planned. Thin by design, and stated as such.
Related
- Background jobs — Hangfire (no scheduled jobs) has no monitoring beyond logs.
- Deployment — log shipping/alerting would be part of a hosted deployment.
- Audit & soft-delete — the business-audit trail.