Getting started
Start the unified collector and get multiple signal types flowing into one dashboard.
This guide gets you from a fresh checkout to unified observability in the dashboard. The goal is not just to send a trace or a log; it is to see multiple signal types connected through the same collector and identity chain. There are two decisions:
- How do you want to run obs-unified? Use the all-in-one Docker image, or install and run the repo locally.
- What data do you want to look at? Use seeded sample data, the Astronomy Shop demo, or telemetry from your own app.
Choose how to run
| Runtime path | Use when | Starts |
|---|---|---|
| Option 1 — Docker image | You want the quickest first run with the fewest host dependencies. | Postgres, collector, dashboard, filesystem blob store, and sample data in one container. |
| Option 2 — local install | You want to edit code, run dev servers, or inspect internals while using the repo. | Local collector, demo API, and Vite dashboard from the workspace. |
Choose what to observe
| Data path | Use when | Start here |
|---|---|---|
| Seeded sample data | You want populated dashboards immediately. | Built into Option 1, or run pnpm run seed with Option 2. |
| Astronomy Shop demo | You want realistic microservice traffic and service-map edges. | Run the OpenTelemetry demo against your local collector. |
| Your own app | You want to validate obs-unified against a real application. | Add SDKs or OpenTelemetry exporters pointing at your collector. |
Prerequisites
- Docker: required for the Docker image and Astronomy Shop demo.
- Node.js 22+ and pnpm 10+: required for local install and repo scripts.
Option 1 — Docker image
This packages the full local stack into one container. It is the lowest-friction first run.
Build the image locally:
pnpm local:imageStart the container:
pnpm local:runOr use Docker directly:
docker build -f Dockerfile.local -t obs-unified/local:dev .
docker run --rm -p 5173:5173 -p 8790:8790 obs-unified/local:devAccess the interfaces:
| Interface | URL |
|---|---|
| Dashboard | http://localhost:5173 |
| Collector ingest | http://localhost:8790 |
Default local credentials:
| Credential | Value |
|---|---|
| Ingest write key | dev-ingest-key |
| Dashboard password | e2e-test-pass |
To persist local database and blob storage state across container restarts:
docker volume create obs-unified-local-db
docker volume create obs-unified-local-blobs
docker run --rm \
-p 5173:5173 \
-p 8790:8790 \
-v obs-unified-local-db:/var/lib/postgresql \
-v obs-unified-local-blobs:/data \
obs-unified/local:devVerify the full first-run path:
pnpm smoke:local-imageThe smoke test builds the image, boots a fresh container, seeds data, and verifies collector health, dashboard HTML, and login from outside Docker.
Option 2 — local install
Use this when you are modifying dashboard code, collector code, or SDK packages.
git clone https://github.com/obs-unified/obs-unified.git
cd obs-unified
pnpm install
pnpm run setup
pnpm run devThe local dev stack exposes:
| Service | URL |
|---|---|
| Dashboard | http://localhost:5173 |
| Demo API | http://localhost:8787 |
| Collector | http://localhost:8790 |
Seeded sample data
Use this when you want populated dashboards immediately.
- Docker image: sample data is seeded automatically on startup.
- Local install: run the seeder in a second terminal.
pnpm run seedExpected result: Traces, Logs, AI Calls, Usage, and Issues show sample data. Replays require browser interaction, so open the dashboard's Playground tab and trigger a replay-producing interaction once.
Astronomy Shop demo
Use this when you want realistic microservice traffic and service-map edges. It runs the official OpenTelemetry Astronomy Shop demo and points its exporters at your local obs-unified collector.
This path assumes the collector is already running. For local development, start it with:
pnpm dev:collectorPrepare the upstream demo services:
pnpm demo:setup
pnpm demo:preflightLaunch the microservices:
pnpm demo:upAccess URLs:
| Interface | URL |
|---|---|
| Dashboard | http://localhost:5173 |
| Shop web interface | http://localhost:8080 |
The load generator takes roughly 30 seconds to begin driving traffic. Once running, Traces, Service Maps, Issues, Logs, and Metrics populate dynamically from active microservice calls.
Stop and remove the compose stack:
pnpm demo:downYour own app
This is a data path that sends telemetry to whichever collector you started above.
| Target | Setup guide |
|---|---|
| React/Vite frontend + Hono API | React + Hono walkthrough |
| Python Flask API | Python Flask walkthrough |
| Browser-only application | Analytics SDK reference |
| TypeScript backend | Telemetry SDK reference |
| Polyglot recipes | Examples |
The common wiring is:
- Deploy or run an accessible collector endpoint.
- Install the appropriate client or server SDK package.
- Configure
OBS_COLLECTOR_URLand a write-only ingest key. - Ensure API CORS policies allow
x-obs-interaction. - Verify connectivity:
obs-unified doctor http://localhost:8790 --origin http://localhost:5173Standalone Node collector variant
The all-in-one Docker image is the recommended first-run Docker path. If you only want the collector service backed by Postgres and MinIO/S3, use the standalone Node collector:
cd apps/collector-node
docker compose up -d
docker compose logs -f collector