Skip to content

Mission Control

When something is wrong, three pieces of information are needed: what is broken, where to look, and what to do about it. This page is the index. Everything below is a hop, not a hub.

The Mission Control panel inside the trading UI, showing service health, recent alerts, and a quick-action grid

The platform uses the standard Grafana LGTM stack for live observability (Grafana for dashboards, Tempo for traces, Loki for logs), plus Traefik's built-in dashboard for routing state, Redpanda Console for Kafka topic inspection, and Uptime Kuma for external health checks.

These run inside the deployment's private network and aren't exposed publicly. Operator-only credentials and URLs are in the team password manager.

Read the failing service's logs first via Grafana, Loki, {service_name="<svc>"}. Common causes ordered by frequency:

  1. Missing env var. Most often a database URL or service host. Compare the service's compose.yml block to its consumer module.
  2. Schema migration not yet applied. The service depends on db-migrate completing. Check docker logs veta-db-migrate-1: exit 0 means done; anything else means a migration failed.
  3. Dependency not healthy. A depends_on: condition: service_healthy will hold the dependent service back. The unhealthy upstream is where the real problem is.
  4. Port collision. Rare in compose. Check docker ps for duplicate names.

Note: if the service has been deleted manually, the next auto-pull tick (every 5 min) will run deploy.sh, which brings the full compose stack back up. A restart loop cannot be papered over by stopping the container; fix the underlying issue.