Back
Go
Docker
JavaScript
Published on Docker Hub
go-data
A minimalist, Netdata-like server monitoring dashboard in a single Go binary
Overview
A single Go binary that exposes a JSON API and serves a static web dashboard, with no required dependencies: no database, no external agents, no JS build step. Meant to be spun up on a VPS or homelab with a simple docker compose up -d for instant server visibility.
Everything is opt-in: if you don't mount the Docker socket, /var/log or the host's /proc, those features simply show no data instead of breaking the app.
Highlights
- CPU, RAM, disk, network, temperature, Docker container, SSH login attempt and incoming connection metrics.
- Static frontend (HTML/CSS/JS) served directly by the binary, no framework or build step.
- In-memory metrics persistence by default (short window), with optional InfluxDB for longer history.
- Optional Basic Auth to protect the dashboard and API.
- 100% environment-variable configuration — nothing to edit in files to turn features on or off.
Architecture
- Dependency-free collectors that read /proc, /sys, auth logs and the Docker socket.
- A security module that parses the auth log to detect SSH login attempts and new incoming connections per port.
- Configurable alert thresholds for CPU, RAM, disk, iowait/steal and temperature.
- Swappable storage layer: memory, InfluxDB, or both combined.
- Packaged as a multi-stage Docker image with a static binary, plus a docker-compose.yml with InfluxDB as an optional service.
Quick start
docker-compose.yml (with InfluxDB)
services:
app:
image: gonzxa/go-data:latest
ports:
- "19245:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/log:/var/log:ro
- /proc:/hostproc:ro
- app-data:/app/data
environment:
- USE_INFLUX=true
- INFLUX_URL=http://influx:8086
- INFLUX_TOKEN=${INFLUXDB_ADMIN_TOKEN}
- INFLUX_ORG=${INFLUXDB_ORG}
- INFLUX_BUCKET=${INFLUXDB_BUCKET}
- DOCKER_ENABLED=true
- SSH_WATCH_ENABLED=true
- CONN_WATCH_ENABLED=true
- AUTH_ENABLED=true
- AUTH_USER=${AUTH_USER}
- AUTH_PASSWORD=${AUTH_PASSWORD}
depends_on:
- influx
influx:
image: influxdb:2.7
volumes:
- influx-data:/var/lib/influxdb2
- influx-config:/etc/influxdb2
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=${INFLUXDB_USERNAME}
- DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUXDB_PASSWORD}
- DOCKER_INFLUXDB_INIT_ORG=${INFLUXDB_ORG}
- DOCKER_INFLUXDB_INIT_BUCKET=${INFLUXDB_BUCKET}
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUXDB_ADMIN_TOKEN}
volumes:
app-data:
influx-data:
influx-config:Start the stack
docker compose up -dEnvironment variables
| Variable | Default | Purpose |
|---|---|---|
| USE_INFLUX | false | Enables metrics persistence in InfluxDB instead of memory only. |
| DOCKER_ENABLED | false | Enables the Docker container collector (requires mounting the socket). |
| SSH_WATCH_ENABLED | false | Enables auth log parsing for SSH login attempts. |
| CONN_WATCH_ENABLED | false | Enables detection of new incoming connections per port. |
| AUTH_ENABLED | false | Protects the dashboard and API with Basic Auth. |