721 lines
15 KiB
Markdown
721 lines
15 KiB
Markdown
# Glances - System Monitoring Dashboard
|
|
|
|
## Table of Contents
|
|
- [Overview](#overview)
|
|
- [What is Glances?](#what-is-glances)
|
|
- [Why Use Glances?](#why-use-glances)
|
|
- [How It Works](#how-it-works)
|
|
- [Configuration in AI-Homelab](#configuration-in-ai-homelab)
|
|
- [Official Resources](#official-resources)
|
|
- [Educational Resources](#educational-resources)
|
|
- [Docker Configuration](#docker-configuration)
|
|
- [Using Glances](#using-glances)
|
|
- [Advanced Topics](#advanced-topics)
|
|
- [Troubleshooting](#troubleshooting)
|
|
|
|
## Overview
|
|
|
|
**Category:** Infrastructure Monitoring
|
|
**Docker Image:** [nicolargo/glances](https://hub.docker.com/r/nicolargo/glances)
|
|
**Default Stack:** `infrastructure.yml`
|
|
**Web UI:** `https://glances.${DOMAIN}`
|
|
**Authentication:** Protected by Authelia (SSO)
|
|
**Purpose:** Real-time system resource monitoring
|
|
|
|
## What is Glances?
|
|
|
|
Glances is a cross-platform system monitoring tool that provides a comprehensive overview of your system's resources. It displays CPU, memory, disk, network, and process information in a single interface, accessible via CLI, Web UI, or API.
|
|
|
|
### Key Features
|
|
- **Comprehensive Monitoring:** CPU, RAM, disk, network, sensors, processes
|
|
- **Real-Time Updates:** Live statistics updated every few seconds
|
|
- **Web Interface:** Beautiful responsive dashboard
|
|
- **REST API:** Export metrics for other tools
|
|
- **Docker Support:** Monitor containers and host system
|
|
- **Alerts:** Configurable thresholds for warnings
|
|
- **Historical Data:** Short-term data retention
|
|
- **Extensible:** Plugins for additional monitoring
|
|
- **Export Options:** InfluxDB, Prometheus, CSV, JSON
|
|
- **Lightweight:** Minimal resource usage
|
|
- **Cross-Platform:** Linux, macOS, Windows
|
|
|
|
## Why Use Glances?
|
|
|
|
1. **Quick Overview:** See system health at a glance
|
|
2. **Resource Monitoring:** Track CPU, RAM, disk usage
|
|
3. **Process Management:** Identify resource-heavy processes
|
|
4. **Container Monitoring:** Monitor Docker containers
|
|
5. **Network Analysis:** Track network bandwidth
|
|
6. **Temperature Monitoring:** Hardware sensor data
|
|
7. **Disk I/O:** Identify disk bottlenecks
|
|
8. **Easy Access:** Web interface from any device
|
|
9. **No Complex Setup:** Works out of the box
|
|
10. **Free & Open Source:** No licensing costs
|
|
|
|
## How It Works
|
|
|
|
```
|
|
Host System (CPU, RAM, Disk, Network)
|
|
↓
|
|
Glances Container (accesses host metrics via /proc, /sys)
|
|
↓
|
|
Data Collection & Processing
|
|
↓
|
|
┌─────────────┬──────────────┬────────────┐
|
|
│ Web UI │ REST API │ CLI │
|
|
│ (Port 61208)│ (JSON/Export)│ (Terminal)│
|
|
└─────────────┴──────────────┴────────────┘
|
|
```
|
|
|
|
### Monitoring Architecture
|
|
|
|
**Host Access:**
|
|
- `/proc` - Process and system info
|
|
- `/sys` - Hardware information
|
|
- `/var/run/docker.sock` - Docker container stats
|
|
- `/etc/os-release` - System information
|
|
|
|
**Data Flow:**
|
|
1. **Collect:** Gather metrics from system files
|
|
2. **Process:** Calculate rates, averages, deltas
|
|
3. **Store:** Keep short-term history in memory
|
|
4. **Display:** Render in web UI or export
|
|
5. **Alert:** Check thresholds and warn if exceeded
|
|
|
|
## Configuration in AI-Homelab
|
|
|
|
### Directory Structure
|
|
|
|
```
|
|
/opt/stacks/infrastructure/glances/
|
|
└── config/
|
|
└── glances.conf # Optional configuration file
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
```bash
|
|
# Web server mode
|
|
GLANCES_OPT=-w
|
|
|
|
# Timezone
|
|
TZ=America/New_York
|
|
|
|
# Update interval (seconds)
|
|
# GLANCES_OPT=-w -t 2
|
|
|
|
# Disable web password (use Authelia)
|
|
# GLANCES_OPT=-w --disable-webui
|
|
```
|
|
|
|
## Official Resources
|
|
|
|
- **Website:** https://nicolargo.github.io/glances/
|
|
- **GitHub:** https://github.com/nicolargo/glances
|
|
- **Docker Hub:** https://hub.docker.com/r/nicolargo/glances
|
|
- **Documentation:** https://glances.readthedocs.io
|
|
- **Wiki:** https://github.com/nicolargo/glances/wiki
|
|
|
|
## Educational Resources
|
|
|
|
### Videos
|
|
- [Glances - System Monitoring Tool (Techno Tim)](https://www.youtube.com/watch?v=3dT1LEVhdJM)
|
|
- [Server Monitoring with Glances](https://www.youtube.com/results?search_query=glances+system+monitoring)
|
|
- [Linux System Monitoring Tools](https://www.youtube.com/watch?v=5JHwNjX6FKs)
|
|
|
|
### Articles & Guides
|
|
- [Glances Official Documentation](https://glances.readthedocs.io)
|
|
- [Glances Configuration Guide](https://glances.readthedocs.io/en/stable/config.html)
|
|
- [System Monitoring Best Practices](https://www.brendangregg.com/linuxperf.html)
|
|
|
|
### Concepts to Learn
|
|
- **/proc filesystem:** Linux process information
|
|
- **CPU Load Average:** 1, 5, and 15-minute averages
|
|
- **Memory Types:** RAM, swap, cache, buffers
|
|
- **Disk I/O:** Read/write operations per second
|
|
- **Network Metrics:** Bandwidth, packets, errors
|
|
- **Process States:** Running, sleeping, zombie
|
|
- **System Sensors:** Temperature, fan speeds, voltages
|
|
|
|
## Docker Configuration
|
|
|
|
### Complete Service Definition
|
|
|
|
```yaml
|
|
glances:
|
|
image: nicolargo/glances:latest
|
|
container_name: glances
|
|
restart: unless-stopped
|
|
pid: host # Required for accurate process monitoring
|
|
networks:
|
|
- traefik-network
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
- /etc/os-release:/etc/os-release:ro
|
|
- /opt/stacks/infrastructure/glances/config:/glances/conf:ro
|
|
environment:
|
|
- GLANCES_OPT=-w
|
|
- TZ=America/New_York
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.glances.rule=Host(`glances.${DOMAIN}`)"
|
|
- "traefik.http.routers.glances.entrypoints=websecure"
|
|
- "traefik.http.routers.glances.tls.certresolver=letsencrypt"
|
|
- "traefik.http.routers.glances.middlewares=authelia@docker"
|
|
- "traefik.http.services.glances.loadbalancer.server.port=61208"
|
|
```
|
|
|
|
### Important Mount Points
|
|
|
|
```yaml
|
|
volumes:
|
|
# Docker container monitoring
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
|
|
# System information
|
|
- /etc/os-release:/etc/os-release:ro
|
|
|
|
# Host filesystem (optional, for disk monitoring)
|
|
# - /:/rootfs:ro
|
|
|
|
# Configuration file (optional)
|
|
- /opt/stacks/infrastructure/glances/config:/glances/conf:ro
|
|
```
|
|
|
|
### Network Modes
|
|
|
|
**For better host monitoring, use host network:**
|
|
```yaml
|
|
glances:
|
|
network_mode: host
|
|
# Then access via: http://SERVER_IP:61208
|
|
# Or still use Traefik but with host networking
|
|
```
|
|
|
|
## Using Glances
|
|
|
|
### Dashboard Overview
|
|
|
|
**Web Interface Sections:**
|
|
|
|
1. **Header:**
|
|
- Hostname
|
|
- System uptime
|
|
- Linux distribution
|
|
- Current time
|
|
|
|
2. **CPU:**
|
|
- Overall CPU usage (%)
|
|
- Per-core utilization
|
|
- Load average (1, 5, 15 min)
|
|
- Context switches
|
|
|
|
3. **Memory:**
|
|
- Total RAM
|
|
- Used/Free
|
|
- Cache/Buffers
|
|
- Swap usage
|
|
|
|
4. **Disk:**
|
|
- Partition information
|
|
- Space used/free
|
|
- Mount points
|
|
- Disk I/O rates
|
|
|
|
5. **Network:**
|
|
- Interface names
|
|
- Upload/Download rates
|
|
- Total transferred
|
|
- Errors and drops
|
|
|
|
6. **Sensors:**
|
|
- CPU temperature
|
|
- Fan speeds
|
|
- Other hardware sensors
|
|
|
|
7. **Docker:**
|
|
- Container list
|
|
- Container CPU/Memory
|
|
- Container I/O
|
|
|
|
8. **Processes:**
|
|
- Top CPU/Memory processes
|
|
- Process details
|
|
- Sort options
|
|
|
|
### Color Coding
|
|
|
|
Glances uses colors to indicate resource usage:
|
|
|
|
- **Green:** OK (< 50%)
|
|
- **Blue:** Caution (50-70%)
|
|
- **Magenta:** Warning (70-90%)
|
|
- **Red:** Critical (> 90%)
|
|
|
|
### Sorting Options
|
|
|
|
Click on column headers to sort:
|
|
- **CPU:** CPU usage
|
|
- **MEM:** Memory usage
|
|
- **TIME:** Process runtime
|
|
- **NAME:** Process name
|
|
- **PID:** Process ID
|
|
|
|
### Keyboard Shortcuts (CLI Mode)
|
|
|
|
If accessing via terminal:
|
|
```
|
|
a - Sort by automatic (CPU + memory)
|
|
c - Sort by CPU
|
|
m - Sort by memory
|
|
p - Sort by process name
|
|
i - Sort by I/O rate
|
|
t - Sort by time (cumulative)
|
|
d - Show/hide disk I/O
|
|
f - Show/hide filesystem
|
|
n - Show/hide network
|
|
s - Show/hide sensors
|
|
k - Kill process
|
|
h - Show help
|
|
q - Quit
|
|
```
|
|
|
|
## Advanced Topics
|
|
|
|
### Configuration File
|
|
|
|
Create custom configuration for alerts and thresholds:
|
|
|
|
**glances.conf:**
|
|
```ini
|
|
[global]
|
|
refresh=2
|
|
check_update=false
|
|
|
|
[cpu]
|
|
# CPU thresholds (%)
|
|
careful=50
|
|
warning=70
|
|
critical=90
|
|
|
|
[memory]
|
|
# Memory thresholds (%)
|
|
careful=50
|
|
warning=70
|
|
critical=90
|
|
|
|
[load]
|
|
# Load average thresholds
|
|
careful=1.0
|
|
warning=2.0
|
|
critical=5.0
|
|
|
|
[diskio]
|
|
# Disk I/O hide regex
|
|
hide=loop.*,ram.*
|
|
|
|
[fs]
|
|
# Filesystem hide regex
|
|
hide=/boot.*,/snap.*
|
|
|
|
[network]
|
|
# Network interface hide regex
|
|
hide=lo,docker.*
|
|
|
|
[docker]
|
|
# Show all containers
|
|
all=true
|
|
# Max containers to display
|
|
max_name_size=20
|
|
|
|
[alert]
|
|
# Alert on high CPU
|
|
cpu_careful=50
|
|
cpu_warning=70
|
|
cpu_critical=90
|
|
```
|
|
|
|
Mount config:
|
|
```yaml
|
|
volumes:
|
|
- /opt/stacks/infrastructure/glances/config/glances.conf:/glances/conf/glances.conf:ro
|
|
```
|
|
|
|
### Export to InfluxDB
|
|
|
|
Send metrics to InfluxDB for long-term storage:
|
|
|
|
**glances.conf:**
|
|
```ini
|
|
[influxdb]
|
|
host=influxdb
|
|
port=8086
|
|
protocol=http
|
|
user=glances
|
|
password=glances
|
|
db=glances
|
|
prefix=localhost
|
|
tags=environment:homelab
|
|
```
|
|
|
|
### Export to Prometheus
|
|
|
|
Make metrics available for Prometheus scraping:
|
|
|
|
```yaml
|
|
glances:
|
|
environment:
|
|
- GLANCES_OPT=-w --export prometheus
|
|
ports:
|
|
- "9091:9091" # Prometheus exporter port
|
|
```
|
|
|
|
**Prometheus config:**
|
|
```yaml
|
|
scrape_configs:
|
|
- job_name: 'glances'
|
|
static_configs:
|
|
- targets: ['glances:9091']
|
|
```
|
|
|
|
### REST API
|
|
|
|
Access metrics programmatically:
|
|
|
|
```bash
|
|
# Get all stats
|
|
curl http://glances:61208/api/3/all
|
|
|
|
# Get specific stat
|
|
curl http://glances:61208/api/3/cpu
|
|
curl http://glances:61208/api/3/mem
|
|
curl http://glances:61208/api/3/docker
|
|
|
|
# Get process list
|
|
curl http://glances:61208/api/3/processlist
|
|
|
|
# Full API documentation
|
|
curl http://glances:61208/docs
|
|
```
|
|
|
|
### Alerts and Actions
|
|
|
|
Configure alerts in glances.conf:
|
|
|
|
```ini
|
|
[alert]
|
|
disable=False
|
|
|
|
[process]
|
|
# Alert if process not running
|
|
list=sshd,nginx,docker
|
|
# Alert if process running
|
|
disable_pattern=.*badprocess.*
|
|
|
|
[action]
|
|
# Execute script on alert
|
|
critical_action=script:/scripts/alert.sh
|
|
```
|
|
|
|
### Multi-Server Monitoring
|
|
|
|
Monitor multiple servers:
|
|
|
|
**On each remote server:**
|
|
```yaml
|
|
glances:
|
|
image: nicolargo/glances
|
|
environment:
|
|
- GLANCES_OPT=-s # Server mode
|
|
ports:
|
|
- "61209:61209"
|
|
```
|
|
|
|
**On main server:**
|
|
```yaml
|
|
glances:
|
|
environment:
|
|
- GLANCES_OPT=-w --browser
|
|
# Or use client mode to connect
|
|
```
|
|
|
|
Access via web UI: "Remote monitoring" section
|
|
|
|
### Custom Plugins
|
|
|
|
Create custom monitoring plugins:
|
|
|
|
```python
|
|
# /opt/stacks/infrastructure/glances/config/plugins/custom_plugin.py
|
|
from glances.plugins.glances_plugin import GlancesPlugin
|
|
|
|
class Plugin(GlancesPlugin):
|
|
def update(self):
|
|
# Your custom monitoring code
|
|
stats = {}
|
|
stats['custom_metric'] = get_custom_data()
|
|
return stats
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Glances Not Showing Host Metrics
|
|
|
|
```bash
|
|
# Verify host access
|
|
docker exec glances ls /proc
|
|
docker exec glances cat /proc/cpuinfo
|
|
|
|
# Check pid mode
|
|
docker inspect glances | grep -i pid
|
|
|
|
# Ensure proper mounts
|
|
docker inspect glances | grep -A10 Mounts
|
|
|
|
# Try host network mode
|
|
# In compose: network_mode: host
|
|
```
|
|
|
|
### Docker Containers Not Visible
|
|
|
|
```bash
|
|
# Verify Docker socket mount
|
|
docker exec glances ls -la /var/run/docker.sock
|
|
|
|
# Check permissions
|
|
docker exec glances docker ps
|
|
|
|
# Ensure docker section enabled in config
|
|
# Or no config file hiding it
|
|
```
|
|
|
|
### High CPU Usage from Glances
|
|
|
|
```bash
|
|
# Increase refresh interval
|
|
GLANCES_OPT=-w -t 5 # Update every 5 seconds
|
|
|
|
# Disable modules you don't need
|
|
# In glances.conf:
|
|
# disable=sensors,raid
|
|
|
|
# Check if something is hammering the API
|
|
docker logs traefik | grep glances
|
|
```
|
|
|
|
### Temperature Sensors Not Showing
|
|
|
|
```bash
|
|
# Need access to /sys
|
|
volumes:
|
|
- /sys:/sys:ro
|
|
|
|
# Install lm-sensors on host
|
|
sudo apt install lm-sensors
|
|
sudo sensors-detect
|
|
|
|
# Verify sensors work on host
|
|
sensors
|
|
```
|
|
|
|
### Web Interface Not Loading
|
|
|
|
```bash
|
|
# Check if Glances is running
|
|
docker ps | grep glances
|
|
|
|
# View logs
|
|
docker logs glances
|
|
|
|
# Test direct access
|
|
curl http://SERVER_IP:61208
|
|
|
|
# Check Traefik routing
|
|
docker logs traefik | grep glances
|
|
|
|
# Verify web mode enabled
|
|
docker exec glances ps aux | grep glances
|
|
```
|
|
|
|
### Disk Information Incomplete
|
|
|
|
```bash
|
|
# Mount host root filesystem
|
|
volumes:
|
|
- /:/rootfs:ro
|
|
|
|
# In glances.conf:
|
|
[fs]
|
|
hide=/rootfs/boot.*,/rootfs/snap.*
|
|
```
|
|
|
|
### Memory Information Incorrect
|
|
|
|
```bash
|
|
# Use host PID namespace
|
|
pid: host
|
|
|
|
# Check /proc/meminfo access
|
|
docker exec glances cat /proc/meminfo
|
|
|
|
# Restart container
|
|
docker restart glances
|
|
```
|
|
|
|
## Performance Optimization
|
|
|
|
### Reduce Update Frequency
|
|
|
|
```yaml
|
|
environment:
|
|
- GLANCES_OPT=-w -t 5 # Update every 5 seconds (default is 2)
|
|
```
|
|
|
|
### Disable Unnecessary Modules
|
|
|
|
**glances.conf:**
|
|
```ini
|
|
[global]
|
|
# Disable modules you don't need
|
|
disable=raid,sensors,hddtemp
|
|
```
|
|
|
|
### Limit Process List
|
|
|
|
```ini
|
|
[processlist]
|
|
# Max number of processes to display
|
|
max=50
|
|
```
|
|
|
|
### Resource Limits
|
|
|
|
```yaml
|
|
glances:
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: '0.5'
|
|
memory: 256M
|
|
```
|
|
|
|
## Security Considerations
|
|
|
|
1. **Protect with Authelia:** Exposes sensitive system info
|
|
2. **Read-Only Mounts:** Use `:ro` for all mounted volumes
|
|
3. **Limited Socket Access:** Consider Docker Socket Proxy
|
|
4. **No Public Access:** Never expose without authentication
|
|
5. **API Security:** Restrict API access if enabled
|
|
6. **Process Info:** Can reveal application details
|
|
7. **Network Monitoring:** Shows internal network traffic
|
|
8. **Regular Updates:** Keep Glances container updated
|
|
9. **Audit Logs:** Monitor who accesses the interface
|
|
10. **Minimal Permissions:** Only mount what's necessary
|
|
|
|
## Integration with Other Tools
|
|
|
|
### Grafana Dashboard
|
|
|
|
Export to Prometheus, then visualize in Grafana:
|
|
|
|
1. **Enable Prometheus export** in Glances
|
|
2. **Add Prometheus datasource** in Grafana
|
|
3. **Import Glances dashboard:** https://grafana.com/grafana/dashboards/
|
|
|
|
### Home Assistant
|
|
|
|
Monitor via REST API:
|
|
|
|
```yaml
|
|
sensor:
|
|
- platform: rest
|
|
resource: http://glances:61208/api/3/cpu
|
|
name: Server CPU
|
|
value_template: '{{ value_json.total }}'
|
|
unit_of_measurement: '%'
|
|
```
|
|
|
|
### Uptime Kuma
|
|
|
|
Monitor Glances availability:
|
|
|
|
- Type: HTTP(s)
|
|
- URL: https://glances.yourdomain.com
|
|
- Heartbeat: Every 60 seconds
|
|
|
|
## Comparison with Alternatives
|
|
|
|
### Glances vs htop/top
|
|
|
|
**Glances:**
|
|
- Web interface
|
|
- Historical data
|
|
- Docker monitoring
|
|
- Remote access
|
|
- Exportable metrics
|
|
|
|
**htop:**
|
|
- Terminal only
|
|
- No web interface
|
|
- Lower overhead
|
|
- More detailed process tree
|
|
|
|
### Glances vs Netdata
|
|
|
|
**Glances:**
|
|
- Simpler setup
|
|
- Lighter weight
|
|
- Better for single server
|
|
- Python-based
|
|
|
|
**Netdata:**
|
|
- More detailed metrics
|
|
- Better long-term storage
|
|
- Complex setup
|
|
- Better for multiple servers
|
|
|
|
### Glances vs Prometheus + Grafana
|
|
|
|
**Glances:**
|
|
- All-in-one solution
|
|
- Easier setup
|
|
- Less powerful
|
|
- Short-term data
|
|
|
|
**Prometheus + Grafana:**
|
|
- Enterprise-grade
|
|
- Long-term storage
|
|
- Complex setup
|
|
- Powerful querying
|
|
|
|
## Summary
|
|
|
|
Glances provides real-time system monitoring in a simple, accessible interface. It:
|
|
- Shows comprehensive system metrics at a glance
|
|
- Monitors Docker containers alongside host
|
|
- Provides web UI and REST API
|
|
- Uses minimal resources
|
|
- Requires minimal configuration
|
|
- Perfect for quick system health checks
|
|
|
|
**Best For:**
|
|
- Homelab monitoring
|
|
- Quick troubleshooting
|
|
- Resource usage overview
|
|
- Docker container monitoring
|
|
- Single-server setups
|
|
|
|
**Not Ideal For:**
|
|
- Long-term metric storage
|
|
- Complex alerting
|
|
- Multi-server enterprise monitoring
|
|
- Detailed performance analysis
|
|
|
|
**Remember:**
|
|
- Protect with Authelia
|
|
- Use host PID mode for accurate monitoring
|
|
- Mount Docker socket for container stats
|
|
- Configure thresholds for alerts
|
|
- Complement with Grafana for long-term analysis
|
|
- Lightweight alternative to complex monitoring stacks
|