Separate liveness from readiness
A running process is not necessarily ready for work. The current services expose different checks intentionally. For example, go-report has liveness and readiness endpoints; readiness verifies PostgreSQL, memory budget and free export disk before Laravel admits another heavy report.
Minimum operational signals
Monitor:
- Web request latency and error rate.
- PostgreSQL CPU, active connections, slow queries, locks, WAL/checkpoint pressure and disk growth.
- Redis memory, evictions policy, queue depth and persistence health.
- Horizon queue depth, failed jobs, job runtime and worker memory.
go-syncready state, push queue depth, stale batches and retry rate.go-reportactive/queued jobs, rows/bytes processed, memory and free disk.go-dashboardoutbox lag and projection freshness.go-bulk-importstale operations and worker heartbeats.go-xlsformresource rejections and processing duration.
Keep internal /metrics and worker health endpoints private. Feed them to a trusted monitoring layer rather than publishing them on the public internet.