> ## Documentation Index
> Fetch the complete documentation index at: https://docs.suji.fr/llms.txt
> Use this file to discover all available pages before exploring further.

# Logs

> Stream live logs from any container on your VM, scoped to a single app install.

The **Logs** tab streams live `docker compose logs` output from your VM into the dashboard. Open it, pick which install you want, watch.

## What you see

* Live stdout + stderr from the install's containers.
* Color-coded levels when the app emits them (info / warn / error).
* Timestamps on each line.
* A pause toggle if a chatty app is making the view unreadable.
* Search/filter to grep through what's on screen.

## Picking an install

The selector at the top lists every install on this VM. Pick one — the view streams its logs. Switch selectors any time without leaving the page.

There's no "host logs" view; the host itself doesn't run a single log stream that's meaningful. Use `journalctl` from the Terminal tab if you need system-level logs.

## Scrollback

The view holds the most recent **\~10 000 lines**. For older logs:

* From the Terminal tab: `docker compose -f /etc/suji/installs/<install-id>/compose.yaml logs --tail=10000 --since=24h <service>`
* Or `journalctl --since=...` if you want host-side context.

We don't ship logs to a remote store by default. If you need centralised logging, install a log shipper as a sidecar (Vector, Promtail, etc.) and point it at your collector.

## Common patterns

<AccordionGroup>
  <Accordion title="App is crashing on startup">
    Logs tab → pick the install → scroll to the top of the most recent restart. The startup error (database connection refused, EACCES on a data path, missing env var) is almost always in the first 30 lines.
  </Accordion>

  <Accordion title="Webhook isn't arriving">
    Open the install's Logs. Trigger the webhook from the third-party service. If you don't see any inbound activity, the request never reached the app — check the Cloudflare Tunnel and DNS for `<install-subdomain>.suji.fr`. If you see a 4xx/5xx, the app rejected it; the error body will tell you why.
  </Accordion>

  <Accordion title="Performance feels slow">
    Logs alone aren't enough — pair them with the Metrics tab to see CPU/memory pressure at the same time as the slow events.
  </Accordion>
</AccordionGroup>

## Next

<CardGroup cols={2}>
  <Card title="Terminal" icon="terminal" href="/manage-vm/terminal">
    Run ad-hoc commands when the logs aren't enough.
  </Card>

  <Card title="Network" icon="network-wired" href="/manage-vm/network">
    Inspect the public IP, hostname, and traffic counters.
  </Card>
</CardGroup>
