Monitorare le risorse di un VPS
2025-01-01
Monitorare lo stato e le risorse di un server è un’attività fondamentale per garantire la continuità e l’affidabilità dei servizi che offre. Che si tratti di un server fisico o virtuale, il monitoraggio consente di rilevare tempestivamente eventuali problemi, come rallentamenti, guasti hardware o sovraccarichi delle risorse, prima che possano compromettere l’operatività del sistema.
Prima di procedere, si consiglia la lettura dell’articolo: Mettere in sicurezza un VPS
Beszel
Beszel
è un sistema di monitoraggio facile da installare, semplice e leggero.
È composto da due componenti principali: l’hub e l’agent. L’hub è un’applicazione web che permette di visualizzare e gestire i sistemi monitorati, mentre l’agent è un servizio che raccoglie i dati dai server e li invia all’hub per l’elaborazione e la visualizzazione.
Permette di monitorare anche le prestazioni e l’utilizzo delle risorse dei container Docker in esecuzione. Le statistiche possono includere informazioni su CPU, memoria, rete e utilizzo del disco.
Beszel tiene traccia dei dati storici: questo è utile per analizzare le tendenze, identificare problemi ricorrenti e prendere decisioni informate sulla gestione delle risorse.
Il sistema è inoltre dotato di funzionalità di avviso che notifica gli utenti quando si verificano determinate condizioni, come un utilizzo eccessivo delle risorse o un malfunzionamento.
Metriche Supportate
- Utilizzo della CPU: sistema host e container Docker/Podman
- Utilizzo della RAM: sistema host e container. Include swap e ZFS ARC
- Utilizzo e I/O del disco: sistema host. Supporta più partizioni e dispositivi
- Utilizzo della rete: sistema host e container.
- Temperatura
- GPU
Installazione dell’hub
- Collegarsi al server remoto
- Creare la cartella
beszel
e spostarsi al suo interno - Creare il file
docker-compose.yml
:
services:
beszel:
image: henrygd/beszel:latest
container_name: beszel
restart: unless-stopped
mem_limit: 256m
extra_hosts:
- host.docker.internal:host-gateway
ports:
- 127.0.0.1:3013:8090
volumes:
- ./beszel_data:/beszel_data
- Avviare il container col comando
docker compose up -d
- Configurare Caddy:
# BESZEL
https://my.domain.it {
reverse_proxy localhost:3013
}
- Riavviare il servizio:
systemctl restart caddy.service
- Assicurarsi che il servizio non abbia errori
Creazione della chiave condivisa
- Effettuare l’accesso a https://my.domain.it, quindi creare l’utente admin
- Aggiungere un nuovo sistema, selezionando
Binario
- Impostare la porta, lasciando anche quella di default
- Copiare il comando da eseguire
Installazione dell’agent
- Eseguire il comando copiato sul VPS
curl -sL https://raw.githubusercontent.com/henrygd/beszel/main/supplemental/scripts/install-agent.sh -o install-agent.sh && chmod +x install-agent.sh && ./install-agent.sh -p 45876 -k "ssh-ed25519 {YOUR_KEY}
- Abilitare l’aggiornamento automatico dell’agent
Lo script si occupa di
- Creare la directory
/opt/beszel-agent/
, contenente i seguenti file
ll /opt/beszel-agent/
Permissions Size User Group Date Modified Name
.rwxr-xr-x 7,3M beszel beszel 18 dic 2024 beszel-agent
.rwxr-xr-x 12k root root 26 dic 2024 install-agent.sh
- Creare i seguenti servizi e timer
# /etc/systemd/system/beszel-agent.service
[Unit]
Description=Beszel Agent Service
After=network.target
[Service]
Environment="PORT=45876"
Environment="KEY={YOUR_KEY}"
ExecStart=/opt/beszel-agent/beszel-agent
User=beszel
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/beszel-agent-update.service
[Unit]
Description=Update beszel-agent if needed
Wants=beszel-agent.service
[Service]
Type=oneshot
ExecStart=/opt/beszel-agent/beszel-agent update | grep -q "Successfully updated" && systemctl restart beszel-agent
# /etc/systemd/system/beszel-agent-update.timer
[Unit]
Description=Run beszel-agent update daily
[Timer]
OnCalendar=daily
Persistent=true
RandomizedDelaySec=4h
[Install]
WantedBy=timers.target
- Avviare i servizi e controllarne lo status:
systemctl daemon-reload
systemctl enable --now beszel-agent.service
systemctl enable --now beszel-agent-update.service
- Fatto questo, tornare sulla dashboard e aggiungere il sistema
- Sul VPS, stoppare e riavviare il container coi comandi
cd /path/to/beszel && docker compose down && docker compose up -d
- Collegandosi alla dashboard, il server dovrebbe essere visibile in verde. Questo significa che viene correttamente monitorato
IMPORTANTE: la porta 45876 deve essere libera e il traffico deve essere consentito dal firewall:
ufw allow 45876
Limitazione delle risorse
Grazie a Beszel, ora possiamo avere una visione chiara e dettagliata dell’utilizzo delle risorse da parte del sistema host e dei container in esecuzione. Questo ci aiuta a prendere delle decisioni, anche osservando le tendenze e i dati storici.
Risulta utile, ad esempio, impostare dei limiti alla memoria RAM e alla CPU che un container può utilizzare. Bisogna modificare il file docker-compose.yml
nel modo seguente:
services:
ntfy:
image: binwiederhier/ntfy:latest
container_name: ntfy
[...]
ports:
- [...]
mem_limit: 512m
cpus: 0.4 # al max 40% cpu
Per verificare, in real-time, le risorse utilizzate dai vari container, basta eseguire il comando docker stats
Monitee
Un’alternativa a Beszel, altrettanto facile da installare, potrebbe essere Monitee. Anche questa soluzione è composta da due parti: il client (un’app) e il server, sys-API.