--- checkId: check.observability.healthchecks plugin: stellaops.doctor.observability severity: warn tags: [observability, healthchecks, readiness, liveness] --- # Health Check Endpoints ## What It Checks Evaluates the configured health, readiness, and liveness paths and optionally probes `http://localhost:` when a health-check port is configured. The check warns when endpoints are unreachable, when timeouts are outside the `1s` to `60s` range, or when readiness and liveness collapse onto the same path. ## Why It Matters Broken health probes turn into bad restart loops, failed rolling upgrades, and misleading orchestration signals. ## Common Causes - The service exposes `/health` but not `/health/ready` or `/health/live` - Health-check ports differ from the actual bound HTTP port - Probe timeout values were copied from another service without validation ## How to Fix ### Docker Compose ```bash docker compose -f devops/compose/docker-compose.stella-ops.yml exec doctor-web curl -fsS http://localhost:8080/health docker compose -f devops/compose/docker-compose.stella-ops.yml exec doctor-web curl -fsS http://localhost:8080/health/ready docker compose -f devops/compose/docker-compose.stella-ops.yml exec doctor-web curl -fsS http://localhost:8080/health/live ``` Set explicit paths and a reasonable timeout: ```yaml HealthChecks__Path: /health HealthChecks__ReadinessPath: /health/ready HealthChecks__LivenessPath: /health/live HealthChecks__Timeout: 30 ``` ### Bare Metal / systemd Verify reverse proxies and firewalls do not block the health port. ### Kubernetes / Helm Point readiness and liveness probes at separate endpoints whenever startup and steady-state behavior differ. ## Verification ```bash stella doctor --check check.observability.healthchecks ``` ## Related Checks - `check.core.services.health` - aggregates the underlying ASP.NET health checks when available - `check.observability.metrics` - shared listener misconfiguration can break both endpoints