Introduzione
Se possedete un server, piccolo o grande che sia, vi sarete chiesti almeno una volta come monitorarne l'andamento, il carico, i servizi e perché no, valutare se la potenza è o meno sufficiente per il suo caso d'uso specifico, magari in vista di un upgrade o un downgrade.Molti provider di hosting, specie con le VPS, forniscono spesso un sistema di monitoring proprio, talvolta a pagamento, talvolta fornito gratuitamente, che però quasi mai è in grado di darvi una panoramica completa, limitandosi a visualizzare il carico approssimativo sulla CPU e sulla Ram.
Ma se volessimo sapere di più? Ad esempio quanto un particolare programma sta incidendo sulla CPU? O analizzare il traffico ipv4 e ipv6?
In rete si trovano molti software specifici, usati sia a livello professionale che privato. Molto dipende dal sistema operativo installato sul server (o l'infrastruttura) in questione.
Fra questi, non possiamo non citarne alcuni, come Sematext Monitoring, l'usatissima combo Prometheus e Grafana, Nagios, Pingdom Synthetic Monitoring, Zabbix, Netdata e molti altri!
In questa guida ci concentreremo su Netdata, ovvero un sistema di monitoring open-source, web-based. Questo software può essere installato praticamente su qualsiasi distro Linux, in qualsiasi ambiente, che sia un server, multi-server, docker o il proprio computer domestico. Con una granularità al secondo, un esiguo uso delle risorse e un livello di dettaglio elevatissimo, è uno strumento ottimo e soprattutto la sua installazione è semplicissima!
Indice
- Preparazione
- Installazione
- Come proteggere l'interfaccia web di Netdata
Preparazione
Prima di continuare, suggerisco una lettura della guida: Guida Verificata - [Server] Come proteggere il tuo server LinuxQuesta guida può essere utilizzata su qualsiasi distro con i dovuti accorgimenti. Per comodità, seguiremo la sintassi del sistema debian.
Netdata dispone di molti tutorial ufficiali su come installarlo e configurarlo, è presente su github e gli sviluppatori rispondono spesso a dubbi o domande degli utenti (lo trovate qui)
IMPORTANTE: Netdata può essere consultato sia direttamente, connettendosi a
http://il-tuo-ip:19999
, sia tramite Netdata Cloud, che raccoglie i dati in streaming trasmessi dalla tua installazione ai server di Netdata. L'agente può essere disattivato sia in fase di installazione che post-installazione, in questo caso sarete in grado di monitorare il server solo connettendovi direttamente. In questa guida installeremo normalmente netdata e poi disabiliteremo l'agente post-installazione. Per maggiori informazioni: Get started with Netdata Cloud | Learn NetdataInstallazione
Come suggerito nella guida ufficiale, per installare Netdata è sufficiente lanciare il comando
Bash:
wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh && sh /tmp/netdata-kickstart.sh
Inoltre è presente nelle repository ufficiali di mostre distribuzioni, ad esempio su Debian possiamo installarlo anche con
Bash:
sudo apt-get install netdata -y
Una volta installato, verifichiamo se il servizio è già attivo con
sudo systemctl status netdata
.Nel caso non lo fosse, lanciamolo noi
Bash:
sudo systemctl start netdata
Bash:
sudo systemctl enable netdata
Il servizio è disponibile sulla porta 19999, quindi se usate un firewall dovrete aprire questa porta. Assumendo di avere ufw, eseguite
Bash:
sudo ufw allow 19999
Bash:
sudo ufw reload
Se Netdata è stato installato localmente, non dovete fare altro, altrimenti è necessario indicare il proprio IP. Per farlo, apriamo con un editor di testo il file di configurazione principale
Bash:
nano /etc/netdata/netdata.conf
ip addr
)Se volete disattivare l'agente che permette di connette il vostro server (nodo) a Netdata Cloud, modifichiamo il file
/var/lib/netdata/cloud.d/cloud.conf
in questo modo
Codice:
[global]
enabled = no
Bash:
cd /var/lib/netdata/cloud.d
Bash:
cat > cloud.conf << EOF
Codice:
[global]
enabled = no
cloud base url = https://app.netdata.cloud
EOF
Bash:
sudo chmod 0770 cloud.conf
sudo chown netdata:netdata cloud.conf
sudo systemctl restart netdata
Netdata raccoglie anonimamente alcune informazioni statistiche per aiutare a migliorare il servizio. Nel caso volessimo negare questo consenso, basta creare un file nella directory /etc/netdata.
Bash:
cd /etc/netdata
touch .opt-out-from-anonymous-statistics
FINE! Il servizio è già attivo e per consultarlo basterà connettervi su
http://il-tuo-ip:19999
.MA, c'è sempre un ma.. netdata permette di fare molto altro, come inviare una mail (o addirittura un sms, messaggio su discord, telegram e molto altro) nel caso qualcosa non torna, come ad esempio un livello di CPU elevato. Molti avvisi sono preconfigurati e basta semplicemente indicare COME essere avvisati. Poiché questo dipende esclusivamente da voi e le differenti esigenze portano a molte configurazioni diverse, vi invito ad affidarvi alla guida ufficiale per quanto riguarda la gestione degli avvisi: View active health alarms | Learn Netdata
Inoltre, anche se l'interfaccia web è sicura, nel senso che l'accesso è in sola lettura, espone comunque importanti informazioni sulla macchina in uso (nel caso il servizio giri su ip pubblico).
Come proteggere l'interfaccia web di Netdata
Disattivare l'interfaccia WebCi sono diversi modi per proteggere l'accesso all'interfaccia web di netdata, il più semplice è disabilitare interamente l'interfaccia e monitorare il tutto SOLO attraverso Netdata Cloud. Naturalmente questo metodo funziona solo se avete scelto di collegare l'agent a Netdata Cloud.
Per disattivare l'interfaccia, apriamo il file di configurazione
Bash:
./edit-config netdata.conf
Codice:
[web]
mode = none
Limitare l'accesso all'interfaccia Web
Possiamo decidere di consentire l'accesso SOLO a determinati indirizzi IP o FQDN, seguendo la guida ufficiale, riportiamo gli esempi che sfruttano il comando allow connections from.
Codice:
[web]
# Allow only localhost connections
allow connections from = localhost
# Allow only from management LAN running on `10.X.X.X`
allow connections from = 10.*
# Allow connections only from a specific FQDN/hostname
allow connections from = example*
ATTENZIONE: Questa seconda parte della guida è indicata a utenti con una conoscenza media della rete. Inoltre molto dipenderà dalla configurazione della vostra macchina.
Usare un reverse proxy
Essendo questa tecnica molto specifica, la procedura cambia in base al server web che state usando (apache, nginx etc..). Quanto segue prende come esempio l'uso di Apache e un dominio da voi posseduto.
Il nostro obiettivo è rendere disponibile Netdata su un host virtuale e proteggere il tutto con un sistema di autenticazione.
Devono essere installati i pacchetti mod_proxy e mod_proxy_http, solitamente presenti all'interno del pacchetto apache2.
Intanto, rendiamo disponibile Netdata solo in locale, quindi nel file di configurazione, alla voce bind socket to IP lasciamo pure localhost o 127.0.0.1
Usando Apache, possiamo sfruttare il funzionamento del file .htpasswd, quindi dobbiamo creare il file e specificare user e password da utilizzare per connettersi all'interfaccia.
Per prima cosa installiamo il pacchetto che ci permetterà di generare il file
Bash:
sudo apt-get install apache2-utils
Il file va creato in una directory privata, come esempio scegliamo la directory di apache2, quindi lanciamo
Bash:
htpasswd -c /etc/apache2/.htpasswd nomeuser
In alternativa, possiamo generare con un tool online il contenuto da inserire nel file .htpasswd, che a quel punto dovremmo creare manualmente nella directory da noi scelta.
Ora, dobbiamo creare un sottodominio per la nostra interfaccia web, ad esempio netdata.domain.tld. Quindi creiamo un A Record che punta all'IP della nostra macchina. Naturalmente questo passaggio va fatto attraverso il vostro provider DNS.
Creiamo l'host virtuale aggiungendo un nuovo sito
Bash:
nano /etc/apache2/sites-available/netdata.conf
Codice:
<VirtualHost *:80>
RewriteEngine On
ProxyRequests Off
ProxyPreserveHost On
ServerName netdata.domain.tld
<Proxy *>
AllowOverride None
AuthType Basic
AuthName "Protected site"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Proxy>
ProxyPass "/" "http://localhost:19999/" connectiontimeout=5 timeout=30 keepalive=on
ProxyPassReverse "/" "http://localhost:19999/"
ErrorLog ${APACHE_LOG_DIR}/netdata-error.log
CustomLog ${APACHE_LOG_DIR}/netdata-access.log combined
</VirtualHost>
In aggiunta, per prevenire il rischio di sovraccarichi o attacchi DDoS, possiamo utilizzare il modulo mod_evasive se è già nel sistema. Per farlo, inseriamo al codice sopra questa linea, prima del tag di chiusura </VirtualHost>
Codice:
<IfModule mod_evasive20.c>
DOSPageCount 30
</IfModule>
Bash:
sudo a2ensite netdata.conf && service apache2 reload
Nel caso usassimo un pannello tipo Plesk, il contenuto dell'host virtuale può essere aggiunto manualmente come direttiva apache, stando attenti a non sovrascrivere il contenuto già presente.
Siamo giunti alla fine, spero questa guida vi sia stata utile e magari vi abbia fatto risparmiare qualche soldo in costosi strumenti di monitoraggio.
Fatemi sapere cosa ne pensate!