Skip to content

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 endpointGET /api/health returns status + database + version (used by the mobile skeleton and as a liveness check).
  • The audit logaudit_events is 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.