An open-source observability platform built with OpenTelemetry, featuring a modern web dashboard, high-performance ingestion backend, and easy-to-use SDKs.
obs/
βββ apps/
β βββ web/ # Main dashboard (Next.js)
β βββ docs/ # Documentation site (Fumadocs)
β βββ server/ # Backend ingestion API (FastAPI)
β βββ collector/ # OTEL Collector configuration
βββ packages/ # Shared libraries and SDKs (future)
βββ infra/
β βββ docker/ # Docker Compose configurations
βββ package.json # Root workspace config
βββ pnpm-workspace.yaml # PNPM workspace definition
βββ turbo.json # Turborepo configuration
-
Clone the repository
git clone <repository-url> cd obs
-
Install dependencies
# Install frontend dependencies pnpm install # Install backend dependencies cd apps/server uv sync cd ../..
-
Start development servers
# Start all backend services (PostgreSQL, PgBouncer, OTEL Collector, API Server) cd infra/docker docker-compose up -d # Backend API will be available at http://localhost:8000 # Start frontend (in another terminal) cd ../.. pnpm dev:web # Main dashboard on http://localhost:3001 # or pnpm dev:docs # Documentation on http://localhost:4000
Alternative: Run backend locally (without Docker)
cd apps/server PYTHONPATH=src uv run fastapi dev src/main.py
-
web - Main observability dashboard
- Next.js 16 with Turbopack
- React 19
- TailwindCSS 4
- Runs on port 3001
-
docs - Documentation site
- Built with Fumadocs
- Runs on port 4000
-
server - Backend ingestion API
- FastAPI with async PostgreSQL
- OTLP trace ingestion endpoint
- Runs on port 8000
-
collector - OTEL Collector config
- Receives telemetry on ports 4317 (gRPC) and 4318 (HTTP)
Coming soon: SDK packages for Python, JavaScript/TypeScript, and other languages.
# Frontend (from root)
pnpm dev # Start all frontend apps in dev mode
pnpm dev:web # Start main dashboard only
pnpm dev:docs # Start docs site only
pnpm build # Build all apps
pnpm check-types # Type check all apps
# Backend (from apps/server)
PYTHONPATH=src uv run fastapi dev src/main.py # Start dev server
uv run python -m pytest # Run tests
uv sync # Install dependenciesapps/server/
βββ src/
β βββ db/ # Database layer
β β βββ __init__.py
β β βββ connection.py
β β βββ schema.sql
β βββ __init__.py
β βββ main.py # FastAPI app & routes
β βββ models.py # Pydantic models for OTLP
β βββ utils.py # Data transformation utilities
βββ tests/ # Test files
βββ Dockerfile
βββ pyproject.toml
The server uses a simple src-layout pattern with PYTHONPATH pointing to the src directory.
All imports are relative from src/ (e.g., from db.connection import get_db).
## π³ Docker
### Development
```bash
cd infra/docker
docker-compose up -d
This starts all backend services:
- PostgreSQL (port 5432) - Database
- PgBouncer (port 6432) - Connection pooler
- OTEL Collector (ports 4317, 4318) - Telemetry receiver
- Backend Ingestor (port 8000) - FastAPI application
To view logs:
docker-compose logs -f ingestor # Backend API logs
docker-compose logs -f # All servicesTo stop all services:
docker-compose downBuild and run:
cd apps/server
docker build -t observ-server .
docker run -p 8000:8000 -e DATABASE_URL=<url> observ-serverPOST /v1/traces
Accepts OTLP JSON format traces.
Example:
curl -X POST http://localhost:8000/v1/traces \\
-H "Content-Type: application/json" \\
-d @trace.jsonThe platform uses PostgreSQL with the following schema:
spanstable - Stores trace spans with JSONB attributes
See apps/server/src/db/schema.sql for details.
# Backend tests
cd apps/server
uv run pytest
# Frontend tests (coming soon)
pnpm testVisit the docs site at http://localhost:4000 when running locally, or check the apps/docs/content directory.
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
This project is licensed under the terms specified in LICENSE.
Built with: