Skip to content

sebastiankaizer/log-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Distributed Log Engine

Go Next.js gRPC InfluxDB

Sebuah high-performance log ingestion system yang dirancang untuk menangani traffic log masif secara terdistribusi. Proyek ini saya buat untuk mengeksplorasi bagaimana menangani ribuan request per detik menggunakan Go, gRPC, dan Worker Pools tanpa mengorbankan performa visualisasi di frontend.

Fokus utamanya adalah performa dan skalabilitas: data dikirim sangat cepat via gRPC, diproses secara asynchronous oleh backend, disimpan ke InfluxDB, dan di-push secara real-time ke dashboard Next.js lewat WebSockets.

🏗️ Architecture

Flow datanya didesain se-efisien mungkin, memisahkan proses ingestion (terima data) dan storage (simpan data) agar tidak terjadi blocking.

graph LR
    P[Producer / Simulator] -- "gRPC Stream" --> S[Server / Collector]
    subgraph Server Internals
        S -- "Dispatch Job" --> WP[Worker Pool]
        WP -- "Async Write" --> DB[(InfluxDB 2.0)]
        S -- "Broadcast Event" --> WS[WebSocket Hub]
    end
    WS -- "Live Updates" --> FE[Frontend Dashboard]
    FE -- "Fetch History" --> S
Loading

Bagaimana cara kerjanya?

  1. Producer (Simulator): Service simulasi yang nembakin ribuan log events terus-menerus via gRPC untuk menguji ketahanan server.
  2. Collector (Server): Backend service (Go) yang bertugas menerima stream. Di sini saya pakai Worker Pool pattern supaya server gak "mati" saat traffic melonjak; request diterima dulu, lalu diproses background oleh worker yang tersedia.
  3. Storage: InfluxDB 2.0 dipilih karena kemampuannya menangani time-series data dengan write speed yang jauh lebih cepat dibanding relational DB biasa.
  4. Real-time Dashboard: Frontend (Next.js 14) yang buka koneksi WebSocket ke server. Jadi begitu log masuk ke server, detik itu juga muncul di layar tanpa perlu refresh.

✨ Key Features

  • High-Throughput Ingestion: Gak pakai REST API biasa, tapi full gRPC untuk komunikasi antar service biar payload lebih kecil dan latency rendah.
  • Concurrency Management: Menggunakan native Go concurrency (Goroutines & Channels) dengan Worker Pool. Ini mencegah resource exhaustion kalau tiba-tiba ada spike traffic.
  • Real-time WebSocket: Data log di-stream langsung ke browser. UI-nya otomatis update.
  • Dual Mode Data: Dashboard bisa menampilkan gabungan data live stream (WebSocket) dan data histori (InfluxDB) secara akurat.
  • Filtering: Bisa filter log berdasarkan severity (INFO, ERROR, FATAL) secara instan.

🛠️ Tech Stack

  • Backend: Go (Golang), gRPC, Protobuf
  • Database: InfluxDB 2.0 (Dockerized)
  • Frontend: Next.js 14, Tailwind CSS, Shadcn/UI (opsional/if used), Lucide Icons
  • Infrastructure: Docker Compose

🚀 Cara Menjalankan (Local Dev)

Pastikan di laptop sudah ada Go 1.21+, Node.js, dan Docker.

1. Nyalakan Database

Kita pakai Docker Compose buat jalanin InfluxDB biar praktis, gak perlu install manual di OS.

docker-compose up -d

Tunggu sebentar sampai InfluxDB ready di localhost:8086.

2. Jalankan Backend (Collector)

Ini akan start gRPC server dan WebSocket handler.

go run cmd/server/main.go

Server bakal listen di port 50051 (gRPC) dan 8080 (HTTP).

3. Start Dashboard

Buka terminal baru, masuk ke folder frontend.

cd log-dashboard
npm run dev

Buka http://localhost:3000 di browser.

4. Spam Log (Simulasi Traffic)

Biar kelihatan grafiknya gerak, jalankan producer-nya.

go run cmd/producer/main.go

Sekarang cek dashboard, harusnya log udah mulai masuk deras.


Project ini dibuat oleh Kevin sebagai eksperimen sistem terdistribusi.

About

Saya mensimulasikan sistem e-commerce. Saya memonitor Error Rate dan Latency. Jika Error Rate naik di atas 5% dalam 1 menit, Engine saya akan mengirimkan alert real-time via WebSocket ke Dashboard. Ini membantu tim SRE (Site Reliability Engineering) menemukan masalah sebelum user komplain.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors