Back
Published on Docker Hub

go-data

A minimalist, Netdata-like server monitoring dashboard in a single Go binary

Go Go Docker Docker JavaScript JavaScript

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 -d

Environment variables

VariableDefaultPurpose
USE_INFLUXfalseEnables metrics persistence in InfluxDB instead of memory only.
DOCKER_ENABLEDfalseEnables the Docker container collector (requires mounting the socket).
SSH_WATCH_ENABLEDfalseEnables auth log parsing for SSH login attempts.
CONN_WATCH_ENABLEDfalseEnables detection of new incoming connections per port.
AUTH_ENABLEDfalseProtects the dashboard and API with Basic Auth.