A self-contained, single-binary OpenTelemetry Collector with built-in SQLite storage for traces and metrics, featuring a built-in web visualizer for exploring trace data, meant for small deployments and local development.
# Using Docker Compose (includes Grafana)
docker compose up -d
# SQLite DB is created at the repo root:
# ./gotel.db
# Or build from source
go build -o gotel .
./gotelThe binary ships with an embedded default config (OTLP gRPC/HTTP → memory_limiter + batch → SQLite). Drop your own config at
config.yamlor setGOTEL_CONFIG/OTEL_CONFIG_FILEto override.
| Service | Port | Description |
|---|---|---|
| OTLP gRPC | 4317 | Trace ingestion (gRPC) |
| OTLP HTTP | 4318 | Trace ingestion (HTTP) |
| Query API | 3200 | Query API for trace data |
| Web UI | 3000 | Built-in trace visualizer |
The built-in query server provides endpoints for accessing trace data:
# Get trace by ID
curl http://localhost:3200/api/traces/{traceId}
# Search traces
curl http://localhost:3200/api/search?service=my-service
# List services
curl http://localhost:3200/api/services
# List all traces
curl http://localhost:3200/api/traces
# List spans
curl http://localhost:3200/api/spans
# List exceptions
curl http://localhost:3200/api/exceptions# Storage statistics
curl http://localhost:3200/api/status
# Readiness check
curl http://localhost:3200/readyTraces are converted to metrics stored in SQLite:
otel.traces.<service>.<operation>.span_count
otel.traces.<service>.<operation>.duration_ms
otel.traces.<service>.<operation>.error_count
- Configuration - Exporter options and setup
- Web UI - Using the built-in trace visualizer
- Sending Traces - Client examples (Go, Python, Node.js)
- Development - Building and extending
- Troubleshooting - Common issues
MIT