Skip to content

Health and logs

Container What it is
quasar-postgres All state. Users, apps, hosts, GPUs, sessions, entitlements.
quasar-control-plane The Go service. API, signaling, scheduler, and it serves the web app. Applies database migrations at startup.
quasar-node-agent The Rust agent. Runs with host networking, drives the compositor and encoder, launches app containers.

During a session you will also see the app container itself and a PulseAudio sidecar, both launched by the agent as siblings. They are not in the Compose file.

Control plane:

Terminal window
curl http://localhost:8080/health
{"status":"ok","db":"ok"}

Deliberately excluded from the HTTPS redirect so it works before certificates are sorted.

Node agent, on the host it runs on:

Terminal window
curl http://127.0.0.1:9091/health
{"status":"ok","sessions":0,"connected":true}

connected is whether the agent’s WebSocket to the control plane is up. False means the agent is alive but isolated.

Container states:

Terminal window
docker compose -f deploy/docker-compose.yml ps
Terminal window
docker compose -f deploy/docker-compose.yml logs -f quasar-control-plane
docker compose -f deploy/docker-compose.yml logs -f quasar-node-agent

Errors only from the node-agent service:

Terminal window
docker compose -f deploy/docker-compose.yml logs --tail 2000 quasar-node-agent \
| grep -iE '\b(error|fatal|panic)\b'

render_node <raw> -> <canonical> means the agent resolved a by-path render node symlink. Exactly what you want on a multi-GPU host.

EGL hardware-acceleration enabled confirms the compositor got hardware acceleration.

codec resolved logs the codec decision for a session, including what was considered and why the winner won. This is the first place to look when a session got an unexpected codec.

no VA H264 encoder found means the VA encoder did not register. Usually a stale GStreamer registry, or software Mesa being forced by an environment variable that should not be set.

quasar-renderer-degraded means a hardware frame import fell back to software rendering. Two of these within 30 seconds fails the session, unless QUASAR_REQUIRE_HW_RENDER=0.

media path interrupted is a catch-all for the media path breaking. The real cause is usually a few lines above it. Common ones are the app container exiting immediately, or an app that needs network access not having it.

Steam needs to be in the log means Steam could not start, and almost always means the container has no network. See The Steam library.

no migration found for version N in the control plane is the rollback crash-loop. See Upgrading.

no command specified on a container means an overlay cleared the command on an image that has no entrypoint of its own.

For anything about a specific session, the admin session detail is better than the logs. It has the metrics time series and the event stream already correlated. See Sessions and audit log and Diagnostics.

The repository ships a diagnostic script that collects the state of everything in one pass: git revision, container states, health endpoints and recent errors from each container, with secrets redacted.

Terminal window
make diagnose

For something shareable:

Terminal window
make diagnose-bundle

Running sessions keep a rolling hour of telemetry. At a terminal state the remaining telemetry is frozen and retained for 24 hours by default. Capture results remain with the session row. Take or export a diagnostic bundle before the post-mortem window expires if you need a longer-lived record.