This project provides a ready-to-run observability sandbox with the OpenTelemetry Collector, example telemetry generators, and popular backends (Jaeger, Prometheus, Grafana). It lets you explore traces, metrics, and logs end-to-end with minimal setup.
-
OpenTelemetry Collector (Contrib) Receives OTLP telemetry and exports to Jaeger, Prometheus, and console.
-
Telemetry Generators Containers that continuously emit example traces, metrics, and logs.
-
Jaeger (all-in-one) UI for exploring distributed traces.
-
Prometheus Scrapes Collector metrics and pipeline outputs.
-
Grafana Visualizes Prometheus data with dashboards.
📂
├── 📄docker-compose.yml # Stack definition
├── 📄otel-collector-config.yaml # Collector pipeline config
└── 📄prometheus.yml # Prometheus scrape targets
docker-compose up -ddocker ps -adocker-compose down-
Jaeger UI (Traces): http://localhost:16686 Search for service names like
sample-tracegen. -
Prometheus (Metrics DB): http://localhost:9090
-
Grafana (Dashboards): http://localhost:3000 Login:
admin/admin
Your own apps can send telemetry directly to the Collector:
- gRPC:
localhost:4317 - HTTP:
http://localhost:4318
-
Collector Exporters
otlp/jaeger: sends traces to Jaeger’s OTLP portprometheus: exposes metrics on:8889debug: prints all data to container logs
-
Telemetrygen Flags
--duration=inf: run indefinitely--rate=N: items per second- For logs you must set
--duration(or--logscount), otherwise it exits immediately.
- Collector exited → Check
docker logs otel-collector. Often caused by invalid exporter config. - Telemetrygen logs restart → Ensure
--duration=infor--logs > 0is set. - No traces in Jaeger → Confirm traces pipeline exporter is
otlp/jaegerand the container can reachjaeger:4317. - No metrics in Prometheus → Check Prometheus targets at
http://localhost:9090/targets.