Central Large Campus Dashboard
Large Public Venue Dashboard
A dockerized monitoring solution for HPE Aruba Central that visualizes network performance, device health, and client experience data in real-time. The stack consists of a Grafana dashboard (port 3000), a custom Next.js dashboard (port 3001), and an InfluxDB time-series database (port 8086), all orchestrated via Docker Compose.
Out of the box you get five pre-configured Grafana dashboards (Home, Network, Access Points, Switches, and Gateways), automatic data collection from Central APIs every 10 minutes, and persistent storage across container restarts.
GitHub Repository & Full Setup Guide: https://github.com/aruba/central-large-campus-monitoring-dashboard
System Requirements
For a lab environment, plan for at least 4 CPU cores, 8 GB RAM, 50 GB of storage, and a stable internet connection to reach Central. Linux (Ubuntu 20.04+), macOS, and Windows with WSL2 are all supported. For production or extended use, 8+ cores, 16 GB RAM, and 100+ GB of disk (preferably SSD) are recommended. InfluxDB data can grow to roughly 25 GB over several hours of continuous collection depending on the size of your network.
Prerequisites
Docker
The easiest path is Docker Desktop for Windows, macOS, or Linux: it bundles Docker Engine and Compose in a single installer. If you prefer a lighter footprint on Linux, install Docker Engine and the Compose plugin from Docker's official APT repository:
# Add Docker's official GPG key and repository (Ubuntu/Debian)
sudo apt update && sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER # lets you run docker without sudo
On macOS via Homebrew: brew install docker docker-compose. For other distributions, see the official install guide. You need Compose v1.29+ at minimum (v2.0+ recommended). If you have Compose V2, use docker compose (no hyphen) in place of docker-compose throughout this guide.
Git
Verify Git is installed with git --version. If it isn't, install it via your system's package manager (apt install git, or brew install git).
Central API Credentials
You'll need a Client ID, Client Secret, and Base URL for your Central instance. If you don't have these yet, follow the Generating and Managing Access Tokens guide. Determine the correct Base URL for your region from the Base URL Reference. Keep these values handy for the setup steps below.
Initial Setup
Open a terminal and create a working directory:
mkdir ~/Desktop/monitoring-dashboard && cd ~/Desktop/monitoring-dashboard
git clone https://github.com/aruba/central-large-campus-monitoring-dashboard.git
cd central-large-campus-monitoring-dashboard
On Windows, replace
~/Desktopwith%USERPROFILE%\Desktop(Command Prompt) or$HOME\Desktop(PowerShell).
Configure Central API Credentials
A sample credentials file is included as a template. Copy it and fill in your values:
cp influx/account_credentials.sample.yaml influx/account_credentials.yaml
Edit influx/account_credentials.yaml:
new_central:
base_url: https://YOUR_CENTRAL_BASE_URL
client_id: YOUR_CLIENT_ID_HERE
client_secret: YOUR_CLIENT_SECRET_HERE
This is the only credential file you need to create. Docker automatically maps it into the Next.js container at runtime (for floor-plan image retrieval), so a second copy is not required. The file is already listed in .gitignore to prevent accidental commits.
InfluxDB Connection Settings
The file influx/influx_credentials.yaml ships pre-configured to match the default Docker Compose environment. No changes are needed unless you customize the InfluxDB admin token in docker-compose.yml, in which case, update the token value in both files to match.
Configuration
The application ships with the following defaults:
| Service | Port | Credentials |
|---|---|---|
| Grafana | 3000 | admin / admin |
| Next.js Dashboard | 3001 | none |
| InfluxDB | 8086 | admin / password |
To change Grafana or InfluxDB credentials, update the corresponding environment variables in docker-compose.yml. If you change the InfluxDB token, remember to mirror the change in influx/influx_credentials.yaml.
Data is collected every 10 minutes by default. To adjust the interval, edit REFRESH_INTERVAL_MINUTES in influx/fetch.py.
Running the Application
From the project root, start all services:
docker-compose up --build
This launches InfluxDB, the data-collection service (which connects to Central and begins writing metrics), Grafana (with all five dashboards auto-imported), and the Next.js dashboard. The first build takes 2–5 minutes while Docker pulls images and compiles containers.
To run in detached (background) mode, add -d. You can follow logs at any time with docker-compose logs -f and verify all services are running with docker-compose ps. You should see five services: influxdb, influx-service, grafana, next-dashboard, and dashboard-importer (which runs once at startup and then exits).
Accessing the Dashboards
Grafana is available at http://localhost:3000. Log in with admin / admin (you'll be prompted to change the password, feel free to skip in a lab). Five dashboards are pre-loaded: Home (site-level overview), Network (client and traffic metrics), Access Points (CPU, memory, power, radio stats), Switches (hardware health and port stats), and Gateways (status, uptime, cluster info).
The Next.js Dashboard at http://localhost:3001 provides a real-time summary of device counts, health status breakdowns (Good/Fair/Poor), and active alerts.
The InfluxDB UI at http://localhost:8086 (login: admin / password) is available for advanced users who want to run Flux queries or inspect raw measurements directly.
Troubleshooting
Services won't start: Confirm Docker is running (docker --version) and that ports 3000, 3001, and 8086 are not already in use. On Linux/macOS, lsof -i :3000 will show conflicts; on Windows, use netstat -ano | findstr :3000. Either stop the conflicting process or remap ports in docker-compose.yml.
No data in dashboards: Double-check that influx/account_credentials.yaml contains valid credentials, then inspect the collector logs with docker-compose logs influx-service. Look for successful API calls and InfluxDB writes. The most common causes are incorrect credentials, network connectivity issues, or API rate limiting. The first data cycle takes 2–5 minutes, so allow time before refreshing.
Grafana shows "No Data": Navigate to Grafana → Configuration → Data Sources → InfluxDB and click Save & Test to verify the connection. You can also confirm data exists by running:
docker exec -it $(docker ps -qf "name=influxdb") influx query \
'from(bucket:"venue_data") |> range(start: -1h) |> limit(n:10)'
Docker Compose version errors: If you see unsupported-syntax errors, upgrade to Compose V2 with sudo apt install docker-compose-plugin (Linux) and use docker compose instead of docker-compose.
Container crashes: Check per-service logs (docker-compose logs grafana, etc.). The usual culprits are insufficient Docker memory (increase the limit in Docker Desktop settings) or filesystem permission issues.
Remote access: By default, services bind to localhost. To expose them on your LAN, change the port mapping in docker-compose.yml (e.g., "0.0.0.0:3000:3000"), restart with docker-compose down && docker-compose up -d, and access via your host's IP. Only do this on trusted networks.
Data Collection Details
The collector pulls a broad set of metrics from Central on each cycle. For network infrastructure, this includes site health, device inventory (APs, switches, gateways), and uptime data. Access point metrics cover CPU/memory utilization, power consumption, radio performance (channel quality, utilization, interference), tunnel statistics (MOS, throughput, latency, packet loss), and WLAN throughput trends. Switch data includes hardware health, CPU/memory/temperature readings, fan and power supply status, and port statistics. Gateway data tracks status, uptime, config sync state, and cluster membership. Client metrics capture counts, locations, connection quality scores, and web-application usage.
Data retention is unlimited by default, records persist until you manually delete them or configure a retention policy via the InfluxDB UI. The collection interval defaults to 10 minutes and can be changed in influx/fetch.py.
Stopping and Cleaning Up
Stop all services while preserving data volumes:
docker-compose down
Your historical data will still be available the next time you bring the stack up. To stop and delete all stored data (InfluxDB measurements, Grafana config), add the -v flag: docker-compose down -v. To restart a single service without tearing everything down, use docker-compose restart influx-service (or whichever service name).
For a full Docker cleanup (removes all unused images, containers, and networks system-wide), run docker system prune -a.
Security and Performance Notes
For anything beyond a lab deployment, change the default Grafana and InfluxDB passwords in docker-compose.yml, place a reverse proxy (nginx or Apache) in front of the stack with TLS termination, and consider enabling Grafana's built-in LDAP, OAuth, or SAML authentication. The credential file influx/account_credentials.yaml should never be committed to version control.
For large networks (100+ devices), allocate additional CPU and RAM to Docker, use SSD-backed storage for InfluxDB, and tune the collection interval to balance freshness against API load. InfluxDB retention policies can be configured through its web UI to cap long-term storage growth.
Further Reading
Updated 1 day ago