Ingest Health Check

Each ingest node exposes GET /health which performs a deep three-database health check across the config, results, and jobs databases. A 200 response means all three pools are reachable; a 503 means at least one database is unhealthy. Traefik uses this endpoint to remove degraded ingest nodes from the load balancer rotation, and Docker uses it for container health checks. Operators can call this endpoint directly to diagnose ingest node connectivity issues.

Fields & Columns

Name Description
status "ok" if all databases are healthy, "degraded" if any database check failed.
service Always "scanner-api" — identifies the responder as an ingest node.
databases.config Health check result for the config database pool (PostgreSQL).
databases.results Health check result for the results database pool (TimescaleDB).
databases.jobs Health check result for the jobs database pool (PostgreSQL).

How To

Check ingest node health

  1. Call GET /health on the ingest endpoint (routed through Traefik at /health, or directly on port 3001 for internal access).
  2. A 200 response with status "ok" means all databases are reachable.
  3. A 503 response means at least one database is unhealthy — inspect the databases field to identify which pool is affected.
  4. Compare the response against the Health > Services > Ingest dashboard for a higher-level view.

Investigate a degraded ingest node

  1. Call GET /health to identify which database pool is failing.
  2. Check the database container health in Health > Infrastructure > Database Status.
  3. Verify network connectivity between the ingest container and the affected database container.
  4. Review database container logs for connection refusals or out-of-disk errors.
  5. If only one ingest node is degraded while others are healthy, the node may have a stale connection pool — restart the node via Admin > Maintenance.

Gotchas

  1. The /health endpoint on the ingest service is served at path /health (not /api/health). Traefik routes /scanner/* to ingest nodes, so /health is accessible without the /scanner prefix.
  2. A 503 response causes Traefik to remove this node from the load balancer rotation — scanners will be redirected to the remaining healthy nodes automatically.
  3. The deep check runs all three database pool tests in parallel. A single slow or failed database makes the entire node return 503.
  4. Unlike the manager /health endpoint, the ingest /health endpoint does not require authentication — it is called by Traefik and Docker health check mechanisms that do not have session cookies.

API Calls (1)

Method Path Description
GET /health Deep health check across config, results, and jobs database pools. Returns 200 with status "ok" when all pools are healthy, or 503 with status "degraded" when any pool is unhealthy. No authentication required.

Related Pages