Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

img.png

🔭 Yeager - A Distributed Tracing System

This project is a simplified, educational implementation of a distributed tracing system like CNCF Jaeger or Google Dapper, built from scratch in Go.

✨ Features

  • 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.

Architecture

Architecture

🚀 Getting Started

Option 1: Docker Compose

  1. Prerequisites: Docker and Docker Compose must be installed.
  2. Build & Run:
docker-compose up --build
  1. View the UI: Open your browser to http://localhost:8080.

Option 2: Local Development

  1. Prerequisites: Go (version 1.21 or later) must be installed.
  2. Run the collector
go run cmd/collector/main.go
  1. View the UI: Open your browser to http://localhost:8080.

⚙️ How to Generate Traces

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

About

A Distributed Tracing System, built from scratch in Go. Inspired by Google Dapper and Jaeger.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages