This project is a simplified, educational implementation of a distributed tracing system like CNCF Jaeger or Google Dapper, built from scratch in Go.
- Concurrent, Scalable Backend Collector: A Go service that ingests spans via an HTTP API. It uses a worker pool (goroutines) and a buffered channel to process and save spans asynchronously without blocking incoming requests.
- Pluggable Storage Backend: Built on a generic storage.Storage interface with two implementations:
- In-Memory
- Sqlite
- Async Go Client SDK: A library to instruct applications to buffer spans and send them to the collector without blocking the main application thread
- Web UI & Visualization: A vanilla HTML/CSS/JS frontend showing the traces and spans

- Dependency Graph: A dynamic map show how services interact.

- Prerequisites: Docker and Docker Compose must be installed.
- Build & Run:
docker-compose up --build- View the UI: Open your browser to http://localhost:8080.
- Prerequisites: Go (version 1.21 or later) must be installed.
- Run the collector
go run cmd/collector/main.go- View the UI: Open your browser to http://localhost:8080.
While the collector is running (using either Docker or local-dev), open a second terminal and run the example application.
go run cmd/example-app/main.go
