Start the Phoenix collector locally
Arize Phoenix is a local-first trace viewer that speaks OpenTelemetry. You run it on your laptop or in a container, your app sends spans to it, and you click through a timeline UI that understands LLM-specific attributes. Free, open source, no account.
Where Phoenix sits in your stack
Your Python app emits OTel spans through the OpenInference instrumentation. Phoenix is the collector, the storage, and the UI all in one.
git clone https://github.com/learnwithparam/llm-observability-phoenix.git
cd llm-observability-phoenix
# Install everything, including phoenix and openinference
make setup
# Copy env template and set your keys
cp .env.example .env
# Edit .env with OPENAI_API_KEY and SERPER_API_KEYClone the repo, install dependencies, and wire your keys. Phoenix ships with the workshop so you do not install anything separately.
services:
phoenix:
image: arizephoenix/phoenix:latest
container_name: phoenix
ports:
- "6006:6006" # UI and OTLP gRPC
- "4317:4317" # OTLP HTTP
environment:
- PHOENIX_WORKING_DIR=/mnt/phoenix
volumes:
- ./phoenix-data:/mnt/phoenixPhoenix runs fine with uv alone, but a Compose service is the cleanest way to keep traces persistent across restarts.
# Option 1: start Phoenix via uv
uv run phoenix serve
# Option 2: docker compose
docker compose up -d phoenix
# Then open the UI
open http://localhost:6006Either path exposes the UI on port 6006 and the OTel ingest on 4317. The course uses the uv path by default.
Validation checklist: Phoenix is online
Loading practice…