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.

beszel_dashboard

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

beszel_metrics

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

beszel_dashboard_vps

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.

Riferimenti