Quickstart
From "nothing installed" to "I see my first trace on the screen" — copy-paste, in order, on any machine with Docker. Honest about every step, including standing up a Collector.
The fastest path from nothing installed to your first trace on screen — about ten minutes on a laptop or a single VPS with Docker.
What you'll have at the end
A working Orbtrace running on your laptop or a VPS, with you logged in, a small OpenTelemetry Collector feeding it a stream of test traces, and you looking at your first trace waterfall.
This takes about ten minutes, not five — because Orbtrace is honest about one thing many tutorials skip: Orbtrace does not ingest telemetry itself. It ships the product (server + UI + storage); you run a standard OpenTelemetry Collector next to it that forwards data into Orbtrace's database. The quickstart sets up both. (Why this split? See Integration patterns.)
Before you start
You need:
- A machine with at least 8 GB of free RAM. The default stack runs Apache Doris with three storage nodes, which is memory-hungry; 4 GB is only enough for a stripped-down single-node variant (see the callout in Installation). 16 GB is comfortable.
- Docker Engine 24+ and Docker Compose v2. Check with
docker --versionanddocker compose version. - Port 8080 free on that machine (Orbtrace's UI), plus 4317 and 4318 free (the Collector's OTLP ports).
- Ten minutes of attention.
All three ports are defaults, not requirements. If 8080 is already in use on your machine, you'll change it in the settings file in step 2; the Collector ports move with the -p flags in step 5.
You do not need:
- A cloud account or a domain name (we'll use
localhost). - An LLM API key (RCA and the AI features are off until you configure a provider — the quickstart doesn't need them).
- A license. Orbtrace runs in the free COMMUNITY edition out of the box (3 services / 3-day retention) — plenty for a quickstart. See Licensing for the paid editions.
The steps
- 1
Get your access and the deploy bundle
You need two things:
- The deploy bundle — holds the
docker-compose.yml, the Collector config, and an example settings file. It's free and needs no login: the button below downloads the latest version directly, and the download page offers the same file with its checksum. - A pull token from Nivorbit — the Orbtrace image itself is private. No token yet? Email sales@nivorbit.com.
Download the bundle and unpack it:
tar xzf orbtrace-2.1.0.tar.gz && cd orbtrace-2.1.0Log in to the registry. Edit this line before you run it — swap
<token>and<username>for the credentials Nivorbit sent you:echo "<token>" | docker login ghcr.io -u <username> --password-stdinThat's all the access you need — the image pulls automatically in step 3.
Air-gapped, no registry access at all?
Nivorbit hands you a bundle with the images baked in. Load them with
bash images/LOAD.shand skip the login. See Air-gapped install.The short way from here
Don't want to do steps 2 and 3 by hand? You're already in the right directory — run:
./install.sh --port 80808080is where the UI will live — pick another port if it's taken. The script creates the settings file with generated secrets, prints an admin login, starts the stack, and — on a desktop machine — opens the UI in your browser once it's ready. Then jump to step 4 and sign in. Prefer to see each move? Keep going with step 2. - The deploy bundle — holds the
- 2
Create your settings file
Go into the bundle's
compose/directory, copy the example settings file, and give it a fresh Postgres password (the one value that must never stay at its placeholder — JWT signing keys are app-managed, nothing to set):cd compose cp .env.example .env sed -i.bak "s|^PGPASSWORD=.*|PGPASSWORD=$(openssl rand -base64 24 | tr -d '/+=')|" .env && rm .env.bakOpen
.envin any editor:nano .env # or: vim .env / code .envand set a local admin login — the email is what you'll type on the login screen:
ORBTRACE_BOOTSTRAP_ADMIN_USERNAME=you@example.com ORBTRACE_BOOTSTRAP_ADMIN_PASSWORD=pick-a-strong-passwordIs port 8080 already in use on your machine? This is the file to fix that, too: set
ORBTRACE_HTTP_PORTto a free port — the UI's public URLs follow it automatically. Using the installer instead? Pass the port on the command line:./install.sh --port 9090.Fine for a quickstart — change before production
The username/password form you just enabled exists so you can evaluate without setting up SSO. Before anyone else can reach this deployment:
- Move sign-in to SSO (Google / Microsoft / GitHub / any OIDC) and leave
ORBTRACE_BOOTSTRAP_ADMIN_PASSWORDblank — see Authentication. - Change
PGPASSWORDandDORIS_PASSWORDfrom their defaults.
Every setting in this file is explained in Configuration.
- Move sign-in to SSO (Google / Microsoft / GitHub / any OIDC) and leave
- 3
Start Orbtrace
From the
compose/directory (where you just created.env):docker compose up -dThis pulls and starts the product and its storage (note: no Collector yet — that's step 5):
On screen- orbtraceThe Spring Boot backend and the web UI.
- doris-fe + doris-be ×3Apache Doris — the database that stores your logs, traces, and metrics.
- postgresStores Orbtrace's own settings: users, SLOs, alert rules, dashboards.
- valkeyA Redis-compatible cache for sessions and short-term state.
First boot takes two to three minutes while Doris registers its storage nodes and Orbtrace creates the database schema. The command returns immediately; watch progress with:
docker compose psYou're ready when
orbtraceshowshealthy— it deliberately holds that status back until the schema is fully in place, so healthy means queryable. - 4
Log in
Open http://localhost:8080 in your browser. If Orbtrace runs on another machine, use its IP instead of
localhost; if you picked another port in step 2, use it instead of8080.You'll see the login screen. Your login depends on how you did step 2:
How you did step 2 Sign in with Ran ./install.shThe email and password it printed under "Local admin login" Edited .envyourselfThe ORBTRACE_BOOTSTRAP_ADMIN_USERNAMEandORBTRACE_BOOTSTRAP_ADMIN_PASSWORDyou setSet neither admin@orbtrace.localand the password Orbtrace generated at first bootFor that last row, the generated password is written to the server log exactly once — read it with:
docker compose logs orbtrace | grep -A 3 "BREAK-GLASS"and you'll be asked to pick a new password as you sign in.
You're in. The Overview screen is empty because nothing is sending telemetry yet — the next two steps fix that. For the fresh-install checklist, see First login.
- 5
Stand up a Collector
Orbtrace stores and shows telemetry; receiving it is the OpenTelemetry Collector's job. Start one — the stock upstream image plus the config file from the bundle:
docker run -d --name orbtrace-otelcol \ --network orbtrace-net \ -p 4317:4317 -p 4318:4318 \ -v "$PWD/otelcol-config.yaml:/etc/otelcol-contrib/config.yaml" \ --tmpfs /var/lib/otelcol/queue:rw,mode=1777 \ otel/opentelemetry-collector-contrib:latestWhat each flag does:
--network orbtrace-net— joins Orbtrace's network so the Collector can write into the database.-p 4317:4317 -p 4318:4318— publishes the two OTLP ports your apps will send telemetry to. Change the left-hand side of each pair if these are taken on your machine.--tmpfs …/queue— a small in-memory scratch area for the send queue; the image runs as a non-root user and this is the simplest writable spot.
If you changed DORIS_PASSWORD
The reference config writes to Doris as
rootwith no password (the default). If you set aDORIS_PASSWORDin your.env, pass it to the Collector too: add-e DORIS_PASSWORD=your-passwordto the command above.Check it came up clean:
docker logs orbtrace-otelcol | tailNo
dial tcp … connection refusedtodoris-fe:8030means it's talking to the database. - 6
Send a stream of test traces
You don't have an instrumented app yet, so use OpenTelemetry's own load generator,
telemetrygen, to fire some traces at the Collector:docker run --rm --network orbtrace-net \ ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:latest \ traces \ --otlp-endpoint orbtrace-otelcol:4317 --otlp-insecure \ --service quickstart-demo --traces 200 --rate 20This sends 200 traces from a fake service called
quickstart-demoat 20 per second. It finishes in about ten seconds. - 7
Click your first trace
Open http://localhost:8080/telemetry/traces — adjust
localhostand8080as in step 4.The rows that appear are the 200 test requests from step 6. Click one: the panel on the right draws it as a waterfall — each bar is one step of the request, longer bars took longer. Hover a bar for its details.
That's it — data in, data on screen. You have a working observability platform on your own hardware. The UI tour shows the rest.
What now?
You have the whole loop working, just with fake data. Three good next moves:
- Send real telemetry. Follow Instrument your apps and point each app's
OTEL_EXPORTER_OTLP_ENDPOINTat the Collector you just started. - Learn the screens. The screen guides walk the UI panel by panel.
- Prepare for production. Read Configuration, set up real Authentication, and pick an AI provider for RCA and Replay. The quickstart defaults are tuned for local play, not real traffic.
If something didn't work
A container shows exited or unhealthy. Read its logs, then check Troubleshooting:
docker compose logs <name>The login page won't load. Wait another minute — Doris is still registering its storage nodes, and Orbtrace won't serve until that's done.
The UI is up but shows no traces. Confirm step 6 finished without errors and that the Collector is running — it must share the orbtrace-net network with Orbtrace:
docker ps | grep otelcolnetwork orbtrace-net not found when starting the Collector. The network is created with the stack, so start the stack first, then retry:
docker compose up -dHow to stop it
docker stop orbtrace-otelcol && docker rm orbtrace-otelcol # the Collector
docker compose down # stop Orbtrace, keep data
docker compose down -v # stop Orbtrace and delete all data