CopyPrompt.id

Monitor Your
GPU Servers
in Real Time

Lightweight agent collects NVIDIA & AMD GPU metrics every 5 seconds. The dashboard visualizes utilization, memory, temperature, power, processes, users & Docker containers.

✦ FEATURES

What's Inside the Chest

Everything you need to monitor GPU fleets without paying for commercial tools.

Unlimited
Servers
Unlimited
GPU Cards
5s
Poll Interval
NVIDIA
+ AMD ROCm
📊

Live Dashboard

All GPU cards across all servers in one view. KPI totals, utilization, memory, temperature, power draw, and fan speed.

🔍

Per-GPU Detail

Click any GPU card to see live stats, history charts, and running processes. Drill down by server and GPU index.

👤

User Tracking

See GPU memory grouped by Linux user. Know exactly who is using which GPU and how much VRAM they consume.

🐳

Docker Detection

Automatically detects Docker containers using GPUs. Shows container name and ID per process.

📈

Time-Series History

Query historical data with custom time ranges and sample intervals. Built on QuestDB for fast analytics.

🔐

Auth & Settings

Admin login, non-admin user management, custom brand name and logo. Light/dark mode built in.

✦ ARCHITECTURE

How It Works

Data pipeline from GPU servers to your browser — three lightweight components.

📡
Go Agent
Runs on each GPU server.
Collects nvidia-smi / rocm-smi.
Zero external deps.
ILP TCP :9009
🗄️
QuestDB
Time-series database.
Auto-creates tables.
Fast SQL queries.
REST :9000
🖥️
SvelteKit Frontend
Web dashboard.
Svelte 5 + Tailwind CSS 4.
Server-side QuestDB proxy.
HTTP :5173
🌐
Your Browser
Responsive dashboard.
Dark/light mode.
Real-time updates.
✦ SCREENSHOTS

Dashboard Preview

Click any image to see full-size view.

✦ DOCS

Quick Start Guide

Get from zero to monitoring in 5 minutes.

📋 Prerequisites

Dashboard server — any machine with Docker + Docker Compose (v2.24+), 1 GB RAM, 10 GB disk.

GPU servers — Linux with NVIDIA drivers (nvidia-smi) or AMD ROCm (rocm-smi), network access to QuestDB.

⚡ Try It Now (Local)

Run everything on one machine to see the UI. You won't see GPU data yet, but you can explore the dashboard.

git clone https://github.com/luthfiemka/gpu-server-monitoring.git
cd gpu-server-monitoring
docker compose up -d
# Open http://localhost:5173 — login: admin / admin

QuestDB web console available at http://localhost:9000.

🚀 Production Setup

1
Deploy QuestDB + Frontend

On your dashboard server (no GPU needed):

git clone https://github.com/luthfiemka/gpu-server-monitoring.git
cd gpu-server-monitoring
docker compose up -d

For custom credentials, create .env:

echo "ADMIN_USER=myadmin" >> .env
echo "ADMIN_PASS=mysecret" >> .env
echo "ORIGIN=http://your-server:5173" >> .env
docker compose up -d
2
Install Agent on GPU Servers

Download binary from release/ folder, copy to each GPU server:

# On the GPU server:
sudo mv gpu-monitoring-agent-linux-amd64 /usr/local/bin/gpu-monitoring-agent
sudo chmod +x /usr/local/bin/gpu-monitoring-agent

# Create config:
sudo mkdir -p /etc/gpu-monitoring
sudo tee /etc/gpu-monitoring/gpu-monitoring-agent.conf <
3
Verify Data Flow

Open http://your-server:5173. You should see GPU cards with live metrics.

Check QuestDB directly:

SELECT count() FROM gpu_metrics;
SELECT * FROM gpu_processes LIMIT 5;

If empty, check agent logs: journalctl -u gpu-monitoring-agent -f

4
Configure & Scale

Go to /settings to set brand name, logo, and add non-admin users. Repeat Step 2 for every additional GPU server — all point to the same QuestDB.

📊 Dashboard Pages

RouteDescription
/All GPU cards across all servers, KPI totals, process table
/gpus/{server}/{id}Per-GPU live stats + history chart + processes
/usersGPU memory grouped by Linux user
/containersGPU usage grouped by Docker container
/historyTime-range query with sample-by interval
/settingsBrand name, logo, manage non-admin users

🧱 Tech Stack

Go 1.23+ SvelteKit 2 + Svelte 5 QuestDB 8.2.3 Docker Compose

Agent written in Go with zero external dependencies. Frontend uses Svelte 5 runes, Tailwind CSS 4, and server-side QuestDB proxy. Database auto-creates tables — no migrations needed.

🔧 Key Config

VariableDefaultDescription
QUESTDB_URLhttp://localhost:9000QuestDB REST API endpoint
ADMIN_USERadminDashboard admin login
ADMIN_PASSadminDashboard admin password
ORIGINhttp://localhost:5173Public URL of dashboard
interval5Agent collection interval (seconds)

🛟 Troubleshooting

  • Dashboard empty? Wait 15s (rolling window). Check agent: systemctl status gpu-monitoring-agent. Check QuestDB: SELECT count() FROM gpu_metrics.
  • Agent won't start? Run nvidia-smi to verify drivers. Check config file path.
  • Can't write to QuestDB? Verify port 9009 is open between agent and QuestDB. Test: nc -zv questdb-ip 9009.
  • Login issues? Default admin / admin. Custom via ADMIN_USER/ADMIN_PASS env vars.

Read full README on GitHub →