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

Inserisci l'indirizzo della tua istanza


Altri post come questo

Mettere in sicurezza un VPS

2024-12-26 | #crowdsec #fail2ban #firewall #security #self-hosting #server #ssh

In questo articolo esploreremo le migliori pratiche per mettere in sicurezza un VPS (Virtual Private Server). Tratteremo argomenti fondamentali come la configurazione sicura di SSH, l'implementazione di Fail2Ban per proteggere il server da attacchi di forza bruta, e altre misure di sicurezza essenziali per garantire la protezione dei dati e delle applicazioni

Continua a leggere 