Con il crescere dell’infrastruttura aumenta il numero di componenti da tenere sotto controllo e diventa rapidamente impraticabile verificarne manualmente lo stato.

Il monitoraggio assume quindi un ruolo fondamentale nella gestione dell’infrastruttura. Tra le diverse soluzioni disponibili, Zabbix non si limita al semplice controllo della disponibilità degli host, ma permette di raccogliere metriche a diversi livelli, correlare gli eventi e definire condizioni di allarme basate sullo stato reale dei sistemi.

zabbix-homepage

Creazione della VM

Come descritto nell’articolo dedicato, il primo passaggio consiste nella creazione di una macchina virtuale Debian all’interno di Proxmox VE, utilizzando preferibilmente un template preconfigurato oppure una delle immagini ufficiali in formato qcow2.

La VM verrà inserita nella VLAN di Management (10.0.5.0/24) e configurata automaticamente tramite Cloud-Init con i seguenti parametri di rete:

  • Indirizzo IP: 10.0.5.22/24
  • Gateway: 10.0.5.254
  • DNS: 10.0.5.254

Risulta superfluo specificare che indirizzi, subnet, VLAN, ecc. dipendono dal proprio laboratorio.

Dopo la creazione della macchina virtuale, è consigliabile includerla immediatamente nel piano di backup di Proxmox.

Zabbix dietro reverse proxy

Per consentire l’accesso al servizio in HTTPS, Zabbix viene pubblicato dietro un reverse proxy. Nella nostra infrastruttura, viene utilizzato Nginx Proxy Manager Plus, con un certificato self-signed.

Creare un nuovo Proxy Host seguendo le proprie specifiche:

reverse-proxy-zabbix

self-signed-certs

Per una maggior sicurezza, possiamo anche impostare delle Access List, limitando l’accesso a soli determinati indirizzi IP.

acl

Bisogna creare la seguente regola di firewall affinché NPM possa raggiungere Zabbix sulla porta 80.

zabbix-fw-rules

Infine, creare un DNS override in OPNsense da Services > Unbound DNS > Overrides, in modo che zabbix.home.lan punti all’indirizzo IP del reverse proxy (10.0.70.1 nel nostro homelab).

Installazione del server Zabbix

Accedere alla VM tramite SSH. Scaricare e installare il pacchetto del repository ufficiale di Zabbix, quindi aggiornare l’indice dei pacchetti:

wget https://repo.zabbix.com/zabbix/7.4/release/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.4+debian13_all.deb
dpkg -i zabbix-release_latest_7.4+debian13_all.deb
apt update

Installare PostgreSQL con il seguente comando:

apt install -y postgresq

Installare il server Zabbix con tutti i componenti necessari:

apt install zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2 zabbix-agent2-plugin-postgresql

Creazione del database

Assicurarsi che il servizio PostgreSQL sia attivo. Creare l’utente e il database dedicati a Zabbix:

sudo -u postgres createuser --pwprompt zabbix

password: *******************

sudo -u postgres createdb -O zabbix zabbix

Sul server Zabbix, importare lo schema e i dati iniziali. Durante l’operazione verrà richiesta la password appena impostata:

zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | \
sudo -u zabbix psql zabbix

Modificare il file di configurazione del server Zabbix per impostare la password del database:

nano /etc/zabbix/zabbix_server.conf

Impostare la password del database nel parametro seguente:

DBPassword=password

Al posto di password deve essere inserita la password dell’utente zabbix appena creato.

Avvio dei servizi

Abilitare e riavviare servizi seguenti:

systemctl enable -now zabbix-server zabbix-agent2 nginx php8.4-fpm
systemctl restart zabbix-server zabbix-agent2 nginx php8.4-fpm

Accesso all’interfaccia web

Aprire quindi l’URL https://zabbix.home.lan (o qualsiasi altro URL configurato) in un browser per completare la configurazione iniziale.

zabbix-4-installation

Assicurarsi che tutti i requisiti siano soddisfatti prima di procedere.

check-prerequisites

configure-db-connection

configure-other-settings

Primo accesso e configurazione utenti

Eseguire il primo accesso con l’utente di default:

username: Admin
password: zabbix

Una volta effettuato l’accesso, creare un nuovo utente amministratore con ruolo Super Admin dal menu Users. Eseguire il login con il nuovo utente e disabilitare gli account predefiniti Admin e Guest, inserendoli nel gruppo Disabled per impedire il loro utilizzo.

super-admin-role

disable-default-admin-user

Configurazione della MFA

Il passaggio successivo consiste nella configurazione dell’autenticazione multifattore (MFA) nell’interfaccia web di Zabbix. La relativa sezione è disponibile in Users > Authentication > MFA settings.

enable-2fa

Per applicare l’autenticazione a due fattori a un gruppo, è possibile utilizzare un gruppo già esistente oppure crearne uno nuovo. In questo esempio viene creato un nuovo gruppo dalla sezione Users > User groups > Create user group.

Assegnare un nome appropriato al gruppo. Nella sezione Multi-factor authentication, selezionare il metodo MFA precedentemente creato, denominato nell’esempio Zabbix-2FA. Aggiungere al gruppo gli utenti che dovranno utilizzare il secondo fattore di autenticazione.

2fa-settings

La configurazione MFA è ora completa e può essere verificata effettuando l’accesso a Zabbix con le credenziali di un utente inserito nel gruppo. Dopo l’inserimento di nome utente e password, verrà visualizzata la richiesta di scansionare un codice QR tramite un’applicazione di autenticazione installata sullo smartphone, come Aegis Authenticator.

Abilitare le notifiche via e-mail

Per abilitare l’invio delle notifiche via e-mail, accedere alla sezione Alerts > Media types e configurare il metodo di notifica corrispondente.

email-media-types

Successivamente, per ogni utente, accedere alla sezione Users > Media e selezionare email come metodo di notifica.

email-notification

Configurare le notifiche via ntfy

Scaricare il file ntfy.yaml sul proprio dispositivo. Importare il file in Zabbix dalla sezione Alerts > Media types > Import.

Configurazione del media type

Selezionare il media type importato e configurare l’URL della propria istanza e altri eventuali parametri di autenticazione.

Abilitazione delle notifiche per un utente

Accedere alla sezione Users > Users, selezionare un utente e recarsi nella scheda Media. Impostare i seguenti valori:

  • Type: ntfy
  • Send to: il topic ntfy da utilizzare

ntfy-config

Test della notifica

Per verificare il corretto funzionamento della configurazione, spostarsi nella sezione Alerts > Media types. Nella riga relativa a ntfy, fare clic su Test e compilare i campi nel modo seguente:

  • Message: This is a disaster message!
  • Severity: Disaster
  • Subject: Danger
  • To: il topic ntfy da utilizzare

Infine, fare clic su Test per inviare una notifica di prova. Bisognerà aver configurato l’applicazione ntfy sullo smartphone.

ntfy-notification

Monitorare PVE tramite il template Proxmox VE by HTTP

Il template Proxmox VE by HTTP consente di monitorare in modo completo un ambiente Proxmox VE tramite l’API REST ufficiale. Non è necessario installare l’agente Zabbix sulle macchine virtuali o sull’host Proxmox, poiché il template si occupa di raccogliere diverse metriche relative a:

  • macchine virtuali e container LXC;
  • attività di backup;
  • stato degli storage;
  • task;
  • interfacce di rete;
  • stato di salute dei dischi;
  • servizi Proxmox VE;
  • pool ZFS

Creazione dell’utente

Creare un nuovo utente dalla sezione Datacenter > Permissions > Users.

Impostare i seguenti valori:

  • User: zabbix@pve
  • Password: definire una password per l’utente

Accedere a Datacenter > Permissions > User Permission.

Configurare i parametri come segue:

  • Path: /
  • User: zabbix@pve
  • Role: PVEAuditor
  • Propagate: abilitato

Creazione del token API

Accedere a Datacenter > Permissions > API Tokens.

Utilizzare i seguenti valori:

  • User: zabbix@pve
  • Token ID: zabbix
  • Privilege Separation: abilitata

Assegnare esplicitamente i privilegi al token accedendo a Datacenter > Permissions > API Token Permission.

Configurare:

  • Path: /
  • Token: zabbix@pve!Zabbix
  • Role: PVEAuditor
  • Propagate: abilitato

Installazione del template

  • Creare un nuovo host da Data collection > Hosts > Create host

  • Configurare l’host, ad esempio, con i seguenti valori:

    • Host name: pve01
    • Template: Proxmox VE by HTTP
    • Host Groups: Hypervisors, Linux Servers Virtual machines

Configurazione delle macro

Impostare sull’host le macro richieste dal template:

  • {$PVE.URL.HOST}: 10.0.5.1
  • {$PVE.URL.PORT}: 8006
  • {$PVE_NODE}: pve01
  • {$PVE.TOKEN.ID}: zabbix@pve!zabbix
  • {$PVE_API_TOKEN_ID}: zabbix
  • {$PVE.TOKEN.SECRET}: Secret

Da Monitoring > Hosts si dovrebbe visualizzare una dashboard con i dati del nodo PVE.

pve-dashboard

Monitorare PBS

Per monitorare Proxmox Backup Server (o un qualsiasi altro host Linux) tramite Zabbix:

  • Installare su PBS l’agent: apt install zabbix-agent2
  • Assicurarsi che il servizio sia abilitato: systemctl enable --now zabbix-agent2.service
  • Configurare l’agent coi parametri richiesti, modificando il file /etc/zabbix/zabbix_agent2.conf:
Server=zabbix.home.lan
ListenPort=10050
ServerActive=zabbix.home.lan
Hostname=pbs01.home.lan
HostMetadataItem=Linux
Timeout=10
  • Riavviare il servizio: systemctl restart zabbix-agent2.service

  • Accedere all’interfaccia web di Zabbix e creare un nuovo host da Data collection > Hosts > Create host, impostando i seguenti valori:

    1. Host name: pbs01
    2. Host Groups: Linux Servers
    3. Interfaces: Agent IP, Port 10050

Dopo qualche secondo, Zabbix dovrebbe incominciare a ricevere i dati dall’host.

pbs-latest-data

Per configurare l’autoregistrazione degli host con agent, seguire questa guida.

host-autoregistration

Riferimenti