A comprehensive, dockerized monitoring solution for Central that visualizes network performance, device health, and client experience data in real-time. This project provides two powerful dashboards (Grafana and a custom Next.js dashboard) connected to an InfluxDB time-series database for historical data analysis.
- Overview
- System Requirements
- Prerequisites
- Initial Setup
- Configuration
- Running the Application
- Accessing the Dashboards
- Troubleshooting
- Data Collection Details
- Stopping and Cleaning Up
This solution automatically collects network monitoring data from HPE Aruba Central and displays it across two complementary dashboards:
- Grafana Dashboard (localhost:3000): Advanced visualizations with customizable panels for network metrics, device health, client experience, and radio performance
- Next.js Custom Dashboard (localhost:3001): Real-time overview dashboard with device counts, health statistics, and alerts
- InfluxDB Web Interface (localhost:8086): Time-series database interface for advanced data queries and management
All data is stored in InfluxDB, a time-series database optimized for monitoring and analytics workloads.
- 5 pre-configured Grafana dashboards (Home, Network, Access Points, Switches, Gateways)
- Real-time data collection from Central APIs
- Automatic dashboard provisioning and setup
- Persistent data storage across container restarts
- Operating System: Linux (Ubuntu 20.04+ recommended), macOS, or Windows with WSL2
- CPU: 4 cores
- RAM: 8 GB
- Storage: 50 GB free disk space (standard HDD acceptable, SSD recommended for better performance)
- Network: Stable internet connection for API calls to HPE Aruba Central
- CPU: 8+ cores
- RAM: 16 GB
- Storage: 100+ GB (InfluxDB data can grow to ~25 GB for several hours of continuous collection)
Note: Storage requirements scale with the number of monitored devices and data retention period.
You need Docker Desktop (recommended) or Docker Engine with Docker Compose.
Download and install Docker Desktop for your operating system:
- Windows: https://docs.docker.com/desktop/install/windows-install/
- macOS: https://docs.docker.com/desktop/install/mac-install/
- Linux: https://docs.docker.com/desktop/install/linux-install/
Docker Desktop includes both Docker Engine and Docker Compose, so you're ready to go after installation.
If you prefer a lightweight installation without Docker Desktop:
Ubuntu/Debian:
Note: The
docker-compose-pluginpackage is not available in the default Ubuntu repositories. You must first add Docker's official repository as shown below.
# Add Docker's official GPG key:
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
# Add the repository to Apt sources:
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
# Install Docker Engine and Docker Compose plugin
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Allow running docker commands without sudo
sudo usermod -aG docker $USER
# Verify installation (log out and back in for the group change to take effect)
docker --version
docker compose versionmacOS (using Homebrew):
# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Docker
brew install docker docker-compose
# Install Docker Machine (required for Docker Engine without Docker Desktop)
brew install docker-machine
# Verify installation
docker --version
docker-compose --versionNote for macOS: Docker Desktop is strongly recommended over the Homebrew installation for ease of use.
Other Linux Distributions: Follow the official installation guide: https://docs.docker.com/engine/install/
- Minimum: Docker Compose v1.29+
- Recommended: Docker Compose v2.0+ (included in Docker Desktop)
To check your version:
docker-compose --version # For V1
docker compose version # For V2If using Docker Compose V2, use docker compose (without hyphen) instead of docker-compose in all commands.
# Verify Git is installed
git --version
# If not installed:
# Ubuntu/Debian: sudo apt install git
# macOS: brew install git
# Windows: Download from https://git-scm.com/You'll need API access to your Central instance. If you don't have credentials yet, follow this guide to generate them:
How to Generate Central API Credentials
You will need:
- Client ID
- Client Secret
- Base URL (your Central instance URL based on your region - see Base URL Reference)
Keep these credentials handy, as you'll use them in the next section.
First, open the command line interface for your operating system:
Windows:
- Press
Windows Key + R - Type
cmdorpowershelland press Enter - Or search for "Command Prompt" or "PowerShell" in the Start menu
macOS:
- Press
Command + Spaceto open Spotlight - Type
terminaland press Enter - Or go to Applications → Utilities → Terminal
Linux:
- Press
Ctrl + Alt + T - Or search for "Terminal" in your applications menu
Navigate to your Desktop and create a new folder for the project:
Windows (Command Prompt):
cd %USERPROFILE%\Desktop
mkdir monitoring-dashboard
cd monitoring-dashboardWindows (PowerShell):
cd $HOME\Desktop
mkdir monitoring-dashboard
cd monitoring-dashboardmacOS/Linux:
cd ~/Desktop
mkdir monitoring-dashboard
cd monitoring-dashboardYou should now be inside a new folder called monitoring-dashboard on your Desktop.
git clone https://github.com/aruba/central-large-campus-monitoring-dashboard.git
cd central-large-campus-monitoring-dashboardBefore running the application, you need to set up your Central API credentials. Sample files are included in the repository as a template.
Copy the sample file and fill in your credentials in the following location:
cp influx/account_credentials.sample.yaml influx/account_credentials.yamlEdit influx/account_credentials.yaml with your Central API credentials:
new_central:
base_url: https://YOUR_CENTRAL_BASE_URL
client_id: YOUR_CLIENT_ID_HERE
client_secret: YOUR_CLIENT_SECRET_HERE- Replace
YOUR_CENTRAL_BASE_URLwith your Central instance URL based on your region (see Base URL Reference) - Replace
YOUR_CLIENT_ID_HEREandYOUR_CLIENT_SECRET_HEREwith your actual API credentials - Do not commit this file to version control — it is already in
.gitignore
Note: The Next.js dashboard also requires these credentials (for floor plan image retrieval). At runtime, Docker automatically maps
influx/account_credentials.yamlinto the Next.js container, so you only need to create this one file.
The file influx/influx_credentials.yaml is pre-configured with defaults that match the Docker Compose configuration. No changes are needed unless you customize the InfluxDB token in docker-compose.yml.
If you do change the InfluxDB token, update it in influx/influx_credentials.yaml to match.
The application comes pre-configured with sensible defaults:
| Service | Port | Default Credentials |
|---|---|---|
| Grafana | 3000 | Username: adminPassword: admin |
| Next.js Dashboard | 3001 | No authentication |
| InfluxDB | 8086 | Username: adminPassword: password |
If you want to change default passwords or settings, edit docker-compose.yml:
Change Grafana Credentials:
grafana:
environment:
- GF_SECURITY_ADMIN_USER=your_username
- GF_SECURITY_ADMIN_PASSWORD=your_passwordChange InfluxDB Credentials:
influxdb:
environment:
- DOCKER_INFLUXDB_INIT_USERNAME=your_username
- DOCKER_INFLUXDB_INIT_PASSWORD=your_password
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=your-secure-token-hereImportant: If you change the InfluxDB token, update it in influx/influx_credentials.yaml as well.
By default, the system refreshes data every 10 minutes. To change this, edit influx/fetch.py:
File Location:
- Windows:
%USERPROFILE%\Desktop\monitoring-dashboard\central-large-campus-monitoring-dashboard\influx\fetch.py - macOS/Linux:
~/Desktop/monitoring-dashboard/central-large-campus-monitoring-dashboard/influx/fetch.py
REFRESH_INTERVAL_MINUTES = 10 # Change to desired interval in minutesFrom the project root directory, run:
docker-compose up --buildWhat happens:
- InfluxDB starts and initializes the database
- The data collection service connects to HPE Aruba Central and begins collecting metrics
- Grafana starts and automatically imports the 5 pre-configured dashboards
- The Next.js custom dashboard builds and starts
First-time startup takes 2-5 minutes as Docker downloads images and builds containers.
To run the services in the background:
docker-compose up --build -dCheck logs at any time:
docker-compose logs -fdocker-compose psYou should see 5 services running:
influxdbinflux-service(data collector)grafananext-dashboarddashboard-importer(runs once and exits)
Open your browser and navigate to: http://localhost:3000
Login Credentials:
- Username:
admin - Password:
admin
Available Dashboards:
- Home Dashboard: Overview of all sites, devices, and network health
- Network Dashboard: Comprehensive network metrics and client data
- Access Points Dashboard: AP-specific metrics (CPU, memory, power, radio performance)
- Switches Dashboard: Switch health, hardware status, and port metrics
- Gateways Dashboard: Gateway status and performance
First-time Login: Grafana will prompt you to change the default password. You can skip this for lab environments.
Open your browser and navigate to: http://localhost:3001
This dashboard provides:
- Real-time device counts (APs, Switches, Gateways)
- Device health statistics (Good/Fair/Poor)
- Total alerts and critical alerts
- System status overview
Open your browser and navigate to: http://localhost:8086
Login Credentials:
- Username:
admin - Password:
password
Use this interface to:
- Query raw data using Flux query language
- View data buckets and measurements
- Monitor database performance
Check Docker is running:
docker --version
docker-compose --versionCheck if ports are already in use:
# Linux/macOS
lsof -i :3000
lsof -i :3001
lsof -i :8086
# Windows
netstat -ano | findstr :3000Solution: Stop any services using these ports or change the ports in docker-compose.yml.
Verify credentials are correct:
- Check
influx/account_credentials.yamlhas valid API credentials - Test API access: https://developer.arubanetworks.com/new-central/docs/api-getting-started
Check data collection logs:
docker-compose logs influx-serviceLook for successful API calls and data writes. Common issues:
- Invalid credentials
- Network connectivity problems
- API rate limiting
Wait for initial data collection: The first data collection cycle takes 2-5 minutes. Refresh dashboards after waiting.
Verify InfluxDB connection:
- Go to Grafana → Configuration → Data Sources
- Click on "InfluxDB"
- Click "Save & Test"
- Should show "Data source is working"
Check if data exists in InfluxDB:
docker exec -it $(docker ps -qf "name=influxdb") influx query 'from(bucket:"venue_data") |> range(start: -1h) |> limit(n:10)'If you see errors about unsupported syntax or version:
Update Docker Compose:
# For Docker Compose V1
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# For Docker Compose V2 (recommended)
sudo apt install docker-compose-pluginThen use docker compose (no hyphen) instead of docker-compose.
Check container logs:
docker-compose logs [service-name]
# Examples:
docker-compose logs influx-service
docker-compose logs grafana
docker-compose logs next-dashboardCommon fixes:
- Insufficient memory: Increase Docker memory limit in Docker Desktop settings
- Permission issues: Ensure Docker has access to the project directory
By default, services only listen on localhost. To access from another machine:
- Find your host machine's IP address
- Update
docker-compose.ymlport bindings:ports: - "0.0.0.0:3000:3000" # Makes Grafana accessible on all network interfaces
- Restart services:
docker-compose down && docker-compose up -d - Access via
http://YOUR_IP:3000
Security Warning: Only expose services on trusted networks.
The system automatically collects the following metrics from Central:
Network Infrastructure:
- Site health and location data
- Device inventory (APs, Switches, Gateways)
- Device status and uptime
Access Points:
- CPU and memory utilization
- Power consumption
- Radio metrics (channel quality, utilization, interference)
- Tunnel statistics (MOS, throughput, latency, packet loss)
- WLAN throughput trends
Switches:
- Health status and hardware metrics
- CPU, memory, temperature
- Fan and power supply status
- Port statistics
Gateways:
- Status and uptime
- Configuration synchronization
- Cluster information
Clients:
- Client counts and locations
- Connection quality and experience scores
- Web application usage
- Default retention: Unlimited (data persists until manually deleted)
- To configure retention policies, access InfluxDB UI at http://localhost:8086
- Average data growth: ~25 GB for several hours of continuous collection (varies by network size)
- Default: Every 10 minutes
- Configurable in
influx/fetch.pyby changingREFRESH_INTERVAL_MINUTES
docker-compose downThis stops all containers but keeps data volumes intact. Next time you run docker-compose up, your historical data will still be there.
Warning: This deletes all collected data and configurations.
docker-compose down -vThe -v flag removes Docker volumes (InfluxDB and Grafana data).
To free up disk space by removing unused Docker resources:
docker system prune -aWarning: This removes all unused images, containers, and networks. Only run this if you want to completely clean your Docker environment.
docker-compose restartOr restart a specific service:
docker-compose restart influx-serviceFor production deployments:
- Change default passwords in
docker-compose.yml - Protect credential files: Never commit
account_credentials.yamlto version control - Use HTTPS: Configure reverse proxy (nginx/Apache) with SSL certificates
- Enable authentication: Configure Grafana authentication (LDAP, OAuth, SAML)
- Network isolation: Use Docker networks to isolate services
- Regular updates: Keep Docker images updated with security patches
For large-scale deployments (100+ devices):
- Increase Docker resources: Allocate more CPU and RAM in Docker Desktop settings
- Use SSDs: Significantly improves InfluxDB query performance
- Adjust collection interval: Reduce frequency for fewer devices, increase for more
- Configure data retention: Set up InfluxDB retention policies to manage storage
- Scale horizontally: Run multiple instances with load balancing
- Central API Documentation: https://developer.arubanetworks.com/new-central/
- InfluxDB Documentation: https://docs.influxdata.com/
- Grafana Documentation: https://grafana.com/docs/
- Docker Documentation: https://docs.docker.com/
Happy Monitoring!