Monitoraggio · 29 min read · Nov 22, 2025

Come installare e monitorare i servizi utilizzando lo strumento di monitoraggio Netdata su Debian 12

Netdata è un sistema di monitoraggio open-source per sistemi operativi basati su Linux. Fornisce prestazioni e monitoraggio in tempo reale utilizzando dashboard belle e dettagliate. Offre centinaia di strumenti per monitorare server, CPU, utilizzo della memoria, processi di sistema, utilizzo del disco, reti IPv4 e IPv6, firewall di sistema e applicazioni come Nginx, MySQL, MongoDB, Redis, ElasticSearch, PostgreSQL, PHP-FPM, ecc. Si integra con altri strumenti di monitoraggio come Prometheus, Graphite, Kafka, Grafana e altro.

Questo tutorial ti mostrerà come installare e monitorare vari servizi utilizzando Netdata su un server Debian 12. Lo utilizzerai anche per tracciare le metriche di uno stack LEMP e del motore Docker.

Prerequisiti

  • Un server che esegue Debian 12.
  • Un utente non root con privilegi sudo.
  • Un Nome di Dominio Completo (FQDN) come netdata.example.com che punta al tuo server.
  • Un account SMTP con un servizio email come Amazon SES o Mailgun.
  • Assicurati che tutto sia aggiornato. $ sudo apt update $ sudo apt upgrade
  • Alcuni pacchetti di cui il tuo sistema ha bisogno. $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y Alcuni di questi pacchetti potrebbero già essere installati sul tuo sistema.

Passo 1 - Configurare il Firewall

Il primo passo è configurare il firewall. Debian viene fornito con ufw (Uncomplicated Firewall) per impostazione predefinita.

Controlla se il firewall è attivo.

$ sudo ufw status

Otterrai il seguente output.

Status: inactive

Consenti la porta SSH in modo che il firewall non interrompa la connessione attuale al momento dell’attivazione.

$ sudo ufw allow OpenSSH

Consenti anche le porte HTTP e HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Abilita il Firewall

$ sudo ufw enable
Il comando potrebbe interrompere le connessioni ssh esistenti. Procedere con l'operazione (y|n)? y
Il firewall è attivo e abilitato all'avvio del sistema

Controlla di nuovo lo stato del firewall.

$ sudo ufw status

Dovresti vedere un output simile.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Passo 2 - Installare NetData

Netdata viene fornito con uno script di installazione che può funzionare su qualsiasi distribuzione Linux. Esegui il seguente comando per scaricare lo script di installazione.

$ wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh

Esegui lo script di installazione utilizzando il seguente comando.

$ sudo sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry

Il flag --stable-channel installa la versione stabile di Netdata. Il flag --disable-telemetry impedisce a Netdata di inviare statistiche anonime al loro server. Ci sono altri flag che puoi utilizzare per personalizzare il tuo installatore.

Inserisci Y per confermare l’aggiunta del repository di Netdata e installarlo sul tuo server. Dovresti ricevere il seguente output in caso di installazione riuscita.

Successfully installed the Netdata Agent.

La documentazione ufficiale può essere trovata online su https://learn.netdata.cloud/docs/.

Vuoi monitorare tutta la tua infrastruttura con Netdata? Dai un'occhiata a Netdata Cloud su https://app.netdata.cloud.

Unisciti alla nostra comunità e connettiti con noi su:
  - GitHub: https://github.com/netdata/netdata/discussions
  - Discord: https://discord.gg/5ygS846fR6
  - I nostri forum comunitari: https://community.netdata.cloud/
[/root]# rm -rf /tmp/netdata-kickstart-wH4pebXveT
 OK

L’installer di Netdata abilita e avvia automaticamente il servizio. Controlla lo stato del servizio.

$ sudo systemctl status netdata
? netdata.service - Monitoraggio delle prestazioni in tempo reale
     Loaded: loaded (/lib/systemd/system/netdata.service; enabled; preset: enabled)
     Active: active (running) since Thu 2023-08-24 10:26:56 UTC; 42s ago
   Main PID: 2811 (netdata)
      Tasks: 82 (limit: 1107)
     Memory: 108.2M
        CPU: 4.271s
     CGroup: /system.slice/netdata.service
             ??2811 /usr/sbin/netdata -D -P /var/run/netdata/netdata.pid
             ??2822 /usr/sbin/netdata --special-spawn-server
             ??3127 bash /usr/libexec/netdata/plugins.d/tc-qos-helper.sh 1
             ??3137 /usr/libexec/netdata/plugins.d/go.d.plugin 1
             ??3142 /usr/libexec/netdata/plugins.d/ebpf.plugin 1
             ??3145 /usr/libexec/netdata/plugins.d/nfacct.plugin 1
             ??3149 /usr/libexec/netdata/plugins.d/systemd-journal.plugin 1
             ??3155 /usr/libexec/netdata/plugins.d/debugfs.plugin 1
             ??3159 /usr/libexec/netdata/plugins.d/apps.plugin 1

Aug 24 10:26:58 netdata ebpf.plugin[3142]: set name of thread 3188 to EBPF SOFTIRQ
.......

Se il tuo servizio non è avviato o abilitato, puoi farlo utilizzando il seguente comando.

$ sudo systemctl enable netdata --now

Esegui il seguente comando per controllare le porte aperte e il processo che le utilizza.

$ sudo ss -plnt | grep netdata

Dovresti ottenere un output simile. Netdata utilizza la porta 19999 per la sua dashboard, come visto nell’output qui sotto. Netdata utilizza la porta 8125 per ricevere statistiche da altre applicazioni.

State  Recv-Q Send-Q      Local Address:Port  Peer Address:Port    Process
LISTEN 0      4096         0.0.0.0:19999      0.0.0.0:*            users:(("netdata",pid=2811,fd=8))
LISTEN 0      4096       127.0.0.1:8125       0.0.0.0:*            users:(("netdata",pid=2811,fd=47))
LISTEN 0      4096           [::1]:8125          [::]:*            users:(("netdata",pid=2811,fd=46))
LISTEN 0      4096            [::]:19999         [::]:*            users:(("netdata",pid=2811,fd=9))

Passo 3 - Installare Nginx

Debian 12 viene fornito con una versione più vecchia di Nginx. Per installare l’ultima versione, devi scaricare il repository ufficiale di Nginx.

Importa la chiave di firma di Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Aggiungi il repository per la versione stabile di Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Aggiorna i repository di sistema.

$ sudo apt update

Installa Nginx e le utility di Apache. Il pacchetto delle utility di Apache è necessario per l’utilità htpasswd.

$ sudo apt install nginx apache2-utils

Verifica l’installazione. Nei sistemi Debian, il seguente comando funzionerà solo con sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Avvia il server Nginx.

$ sudo systemctl start nginx

Controlla lo stato del servizio.

$ sudo systemctl status nginx
? nginx.service - nginx - server web ad alte prestazioni
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Thu 2023-08-24 11:36:34 UTC; 4s ago
       Docs: https://nginx.org/en/docs/
    Process: 3657 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 3658 (nginx)
      Tasks: 2 (limit: 1107)
     Memory: 1.8M
        CPU: 12ms
     CGroup: /system.slice/nginx.service
             ??3658 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??3659 "nginx: worker process"

Passo 4 - Installare SSL

Dobbiamo installare Certbot per generare il certificato SSL. Puoi installare Certbot utilizzando il repository di Debian o scaricare l’ultima versione utilizzando lo strumento Snapd. Utilizzeremo la versione Snapd.

Debian 12 non viene fornito con Snapd installato. Installa il pacchetto Snapd.

$ sudo apt install snapd

Esegui i seguenti comandi per assicurarti che la tua versione di Snapd sia aggiornata.

$ sudo snap install core && sudo snap refresh core

Installa Certbot.

$ sudo snap install --classic certbot

Utilizza il seguente comando per assicurarti che il comando Certbot possa essere eseguito creando un collegamento simbolico nella directory /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifica se Certbot funziona correttamente.

$ certbot --version
certbot 2.6.0

Genera il certificato SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d netdata.example.com

Il comando sopra scaricherà un certificato nella directory /etc/letsencrypt/live/netdata.example.com sul tuo server.

Genera un certificato Diffie-Hellman group.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Controlla il servizio di pianificazione del rinnovo di Certbot.

$ sudo systemctl list-timers

Troverai snap.certbot.renew.service come uno dei servizi programmati per l’esecuzione.

NEXT                        LEFT          LAST                        PASSED      UNIT                         ACTIVATES
.....
Thu 2023-08-24 13:40:00 UTC 1h 59min left -                           -           snap.certbot.renew.timer     snap.certbot.renew.service
Thu 2023-08-24 18:47:23 UTC 7h left       Thu 2023-08-24 09:30:41 UTC 2h 9min ago apt-daily.timer              apt-daily.service
Fri 2023-08-25 00:00:00 UTC 12h left      -                           -           dpkg-db-backup.timer         dpkg-db-backup.service

Fai un tentativo di prova del processo per controllare se il rinnovo SSL funziona correttamente.

$ sudo certbot renew --dry-run

Se non vedi errori, sei a posto. Il tuo certificato si rinnoverà automaticamente.

Passo 5 - Configurare Nginx

Crea e apri il file /etc/nginx/conf.d/netdata.conf per la modifica.

$ sudo nano /etc/nginx/conf.d/netdata.conf

Incolla il seguente codice al suo interno.

# Definisci l'upstream di netdata
upstream netdata {
    server 127.0.0.1:19999;
    keepalive 64;
}

# Reindirizza tutto il non criptato a criptato
server {
    listen 80;
    listen [::]:80;
    server_name netdata.example.com;
    return 301 https://netdata.example.com$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name netdata.example.com;

    ssl_certificate     /etc/letsencrypt/live/netdata.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/netdata.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/netdata.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_prefer_server_ciphers off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
    resolver_timeout 2s;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    access_log /var/log/nginx/netdata.example.com.access.log main;
    error_log  /var/log/nginx/netdata.example.com.error.log;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
     proxy_pass http://netdata;
     proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_set_header Connection "keep-alive";
        proxy_store off;
        auth_basic "NetData Private Area";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Una volta terminato, salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Apri il file /etc/nginx/nginx.conf per la modifica.

$ sudo nano /etc/nginx/nginx.conf

Aggiungi la seguente riga prima della riga include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Esegui il seguente comando per generare un file di password per abilitare l’autenticazione HTTP.

$ sudo htpasswd -c /etc/nginx/.htpasswd netadmin
Nuova password: 
Re-inserisci la nuova password: 
Aggiunta della password per l'utente netadmin

Verifica la sintassi del file di configurazione di Nginx.

$ sudo nginx -t
nginx: il file di configurazione /etc/nginx/nginx.conf ha una sintassi corretta
nginx: il test del file di configurazione /etc/nginx/nginx.conf ha avuto successo

Riavvia il servizio Nginx per abilitare la nuova configurazione.

$ sudo systemctl restart nginx

Passo 6 - Accedere e utilizzare il dashboard di Netdata

Dovresti essere in grado di accedere a Netdata tramite l’URL https://netdata.example.com. La prima volta che vi accedi, ti verrà chiesto di inserire i dettagli di autenticazione HTTP.

Netdata HTTP Authentication

Otterrai il seguente dashboard.

Netdata Dashboard First Time

Puoi mettere in pausa, fermare e avviare il monitoraggio in qualsiasi momento utilizzando il pulsante Play sulla dashboard.

Netdata Play/Pause Button

Puoi accedere a varie dashboard facendo clic sulle opzioni nella barra laterale destra.

Netdata per impostazione predefinita può tracciare correttamente il tuo fuso orario. Se non lo fa, fai clic sul timer e seleziona il fuso orario corretto nel popup per cambiarlo.

Netdata Timezone Change

Passo 7 - Configurare NetData

Netdata memorizza la sua configurazione principale nel file /etc/netdata/netdata.conf. Puoi visualizzare queste impostazioni visitando l’URL https://netdata.example.com/netdata.conf nel tuo browser.

Netdata Configuration File in Browser

Il file è suddiviso in varie sezioni, come [global], [db], [web], [registry] e altro. La configurazione predefinita è sufficiente per iniziare. Netdata raccoglie dati utilizzando due tipi di plugin:

  1. plugin interni sono scritti in linguaggio C e vengono eseguiti come thread all’interno del demone netdata.
  2. plugin esterni sono scritti in vari linguaggi, tra cui Python, Go, ecc., e vengono avviati come processi indipendenti a lungo termine dal demone netdata. Comunicano con il demone Netdata utilizzando pipes.

Configurare l’uso della memoria di NetData

L’uso della RAM di NetData è deciso in base al tempo che desideri mantenere i dati del grafico registrati prima che vengano persi.

  • 3600 secondi o 1 ora di retention dei dati del grafico utilizza 15 MB di RAM.
  • 7200 secondi o 2 ore di retention dei dati del grafico utilizza 30 MB di RAM.
  • 14400 secondi o 4 ore di retention dei dati del grafico utilizza 60 MB di RAM.

Ogni volta che raddoppi il tempo di retention dei dati del grafico, il requisito di RAM raddoppia anche. Questi requisiti di RAM si basano sul numero di grafici utilizzati dalla dashboard predefinita. Aggiungere più grafici e applicazioni cambierà queste stime.

Apri il file di configurazione di Netdata.

$ sudo nano /etc/netdata/netdata.conf

Inserisci la riga history = 14400 sotto la sezione [global].

[global]
    run as user = netdata

    # dimensione predefinita dello storage - aumenta per una retention dei dati più lunga
    page cache size = 32
    dbengine multihost disk space = 256
    history = 14400

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Disattivare la Telemetria

Per impostazione predefinita, Netdata raccoglie informazioni anonime sull’uso utilizzando una piattaforma di analisi dei prodotti, Posthog. Ogni volta che il demone Netdata viene avviato o arrestato, Netdata utilizza lo script delle statistiche anonime per raccogliere le seguenti informazioni di sistema e inviarle a se stesso.

  • Versione di Netdata
  • Nome del sistema operativo, versione, id, id_like
  • Nome del kernel, versione, architettura
  • Tecnologia di virtualizzazione
  • Tecnologia di containerizzazione
  • Ulteriori informazioni sui guasti del client Netdata.

Abbiamo disattivato la Telemetria durante l’installazione, ma se non lo hai fatto, puoi farlo ora. Crea un file vuoto chiamato .opt-out-from-anonymous-statistics nella directory di Netdata.

$ sudo touch /etc/netdata/.opt-out-from-anonymous-statistics

Riavvia Netdata per abilitare la modifica.

$ sudo systemctl restart netdata

Archiviazione a lungo termine

Netdata utilizza la RAM e il disco del tuo sistema per memorizzare i dati storici per impostazione predefinita. Il processo predefinito di Netdata raccoglie circa 2000 metriche al secondo, il che significa che la configurazione predefinita memorizzerà circa due giorni di metriche sulla RAM e sul disco.

Per memorizzare più metriche, hai le seguenti due opzioni:

  1. Configurare Netdata per utilizzare più RAM e spazio su disco
  2. Archiviare le metriche in un database esterno

Discuteremo solo la prima opzione in questo tutorial. Per la seconda opzione, dovresti fare riferimento alla documentazione ufficiale di Netdata.

Configurare Netdata per utilizzare più RAM e spazio su disco

Apri il file /etc/netdata/netdata.conf per la modifica.

$ sudo nano /etc/netdata/netdata.conf

Configura le seguenti righe sotto la sezione [global].

[global]
...
    page cache size = 32
    dbengine multihost disk space = 256

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

La dimensione della cache della pagina determina la quantità di RAM utilizzata, e la variabile dbengine multihost disk space determina l’uso del disco. Per impostazione predefinita, Netdata utilizza 32 MB di RAM e 256 MB di spazio su disco. Puoi cambiare uno dei due valori a tuo piacimento.

Puoi utilizzare il calcolatore delle metriche di storage di Netdata per decidere quanta RAM e spazio su disco hai bisogno.

Ridurre la Frequenza di Raccolta

Puoi ottimizzare le prestazioni di Netdata aumentando il tempo tra la raccolta delle metriche. Per impostazione predefinita, Netdata raccoglie metriche ogni secondo.

Per cambiare ciò, apri il file di configurazione di Netdata per la modifica.

$ sudo nano /etc/netdata/netdata.conf

Inserisci la seguente riga sotto la sezione [global]. Questo aumenta la frequenza a 5 secondi.

[global]
...
    update every = 5

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Passo 8 - Configurare le Notifiche Slack

Il primo passo è creare un’app Slack e collegarla a un canale specifico nel tuo spazio di lavoro per configurare le notifiche Slack.

Visita la pagina API di Slack e fai clic sul pulsante Crea App per iniziare a creare un’applicazione.

Slack API apps

Fai clic sul link From Scratch per creare l’app.

Slack Create App Popup

Seleziona un nome per la tua app e scegli lo spazio di lavoro in cui desideri che la tua App appaia. Se non vuoi associare la tua app allo spazio di lavoro esistente, puoi crearne un’altra e tornare a questo passaggio.

Slack App Name Popup

Apri la pagina Incoming Webhook selezionando l’opzione nel menu Features dalla barra laterale sinistra, e poi attiva il webhook.

Slack Apps Incoming WebHooks

Fai clic sul pulsante Aggiungi Nuovo Webhook al Workspace in fondo alla pagina e seleziona il tuo spazio di lavoro e il canale target per le notifiche.

Add Slack App to WorkSpace

Fai clic sul pulsante Consenti per procedere. Torna alla pagina Incoming Webhooks e copia l’URL del Webhook.

Slack Webhook URL

Torna al terminale e passa alla directory /etc/netdata.

$ cd /etc/netdata

Netdata fornisce uno script edit-config per modificare e creare file di configurazione di Netdata. Esegui il seguente file per creare e aprire il file health_alarm_notify.conf utilizzando l’editor predefinito del tuo sistema.

$ sudo ./edit-config health_alarm_notify.conf

Scorri verso il basso fino alla seguente sezione.

# Abilita la notifica slack
SEND_SLACK="YES"

# Seleziona il webhook slack
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxxxxxx/xxxxxx/xxxxxxxxxxxxx"

# Canale predefinito per la notifica
DEFAULT_RECIPIENT_SLACK="notifications"

Assicurati che la variabile SEND_SLACK sia impostata su yes. Incolla l’URL del webhook copiato nella variabile SLACK_WEBHOOK_URL. Inserisci il nome del tuo canale per la variabile DEFAULT_RECIPIENT_SLACK.

Se il tuo editor è Vim, premi il tasto Escape per uscire dalla modifica, digita :x e premi il tasto Enter per salvare il file ed uscire dall’editor.

Se il tuo editor è Nano, salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Riavvia Netdata per applicare le modifiche.

$ sudo systemctl restart netdata

Passo 9 - Configurare le Notifiche Email

Netdata utilizza sendmail per impostazione predefinita per inviare notifiche email, ma gestire un server email non è un compito facile. Netdata non supporta SMTP, ma puoi installare un pacchetto chiamato msmtp client. Ti consente di inviare email a un server SMTP.

Installa msmtp.

$ sudo apt install msmtp

Crea e apri il file di configurazione per msmtp.

$ sudo nano /etc/msmtprc

Incolla il seguente codice al suo interno.

# Imposta valori predefiniti per tutti i seguenti account.
defaults

# Usa la porta di invio email 587 invece della porta SMTP 25.
port 587

# Usa sempre TLS.
tls on

# Il server SMTP del tuo ISP
account ses
host email-smtp..amazonaws.com
from [email protected]
auth on
user 
password 

# Imposta l'account predefinito su isp
account default: ses

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Netdata fornisce uno script edit-config per modificare e creare file di configurazione di Netdata. Esegui il seguente file per creare e aprire il file health_alarm_notify.conf utilizzando l’editor predefinito del tuo sistema.

$ sudo /etc/netdata/edit-config health_alarm_notify.conf

Scorri verso il basso fino alla seguente sezione e inserisci il percorso per msmtp.

# comandi esterni

# Il percorso completo al comando sendmail.
# Se vuoto, il sistema $PATH verrà cercato per esso.
# Se non trovato, le notifiche email saranno disabilitate (silenziosamente).
sendmail="/usr/bin/msmtp"

Trova la seguente sezione e inserisci i dettagli del mittente e del destinatario e assicurati che l’invio delle email sia abilitato.

# opzioni globali di notifica email

# più destinatari possono essere forniti in questo modo:
#              "[email protected] [email protected] ..."

# l'indirizzo email che invia notifiche email
# il predefinito è l'utente di sistema con cui viene eseguito netdata (di solito: netdata)
# I seguenti formati sono supportati:
# EMAIL_SENDER="user@domain"
# EMAIL_SENDER="User Name "
# EMAIL_SENDER="'User Name' "
# EMAIL_SENDER="\"User Name\" "
EMAIL_SENDER="Server Admin <[email protected]>"

# abilitare/disabilitare l'invio di email
SEND_EMAIL="YES"

# se un destinatario di ruolo non è configurato, verrà inviata un'email a:
DEFAULT_RECIPIENT_EMAIL="[email protected]"
# per ricevere solo allarmi critici, impostalo su "root|critical"

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Riavvia Netdata per applicare le modifiche.

$ sudo systemctl restart netdata

Passo 10 - Testare i Canali di Notifica

Facciamo un test per vedere se le notifiche email funzionano. Accedi come l’utente di sistema netdata creato durante l’installazione.

$ sudo su -s /bin/bash netdata

Esegui lo script di notifica degli allarmi per inviare una notifica di test.

$ /usr/libexec/netdata/plugins.d/alarm-notify.sh test

Riceverai il seguente output.

# INVIO NOTIFICA DI ALLERTA DI TEST A RUOLO: sysadmin
2023-08-24 12:56:00: alarm-notify.sh: INFO: inviata notifica email per: netdata test.chart.test_alarm è WARNING a '[email protected]'
# OK

# INVIO NOTIFICA DI ALLERTA CRITICA DI TEST A RUOLO: sysadmin
2023-08-24 12:56:03: alarm-notify.sh: INFO: inviata notifica email per: netdata test.chart.test_alarm è CRITICAL a '[email protected]'
# OK

# INVIO NOTIFICA DI ALLERTA CHIARA DI TEST A RUOLO: sysadmin
2023-08-24 12:56:06: alarm-notify.sh: INFO: inviata notifica email per: netdata test.chart.test_alarm è CLEAR a '[email protected]'
# OK

Esci dall’utente.

$ exit.

Apri la tua applicazione Slack e dovresti aver ricevuto i seguenti avvisi.

Netdata Slack Test Notifications

Dovresti anche ricevere tre email riguardanti i test di avviso.

Netdata Email Test Notifications

Passo 11 - Configurare il Monitoraggio del Sistema

Ora che abbiamo configurato e testato le notifiche, configuriamo e testiamo le notifiche per il sistema, come l’uso della CPU.

Esegui i seguenti comandi per creare e aprire il file di configurazione della CPU.

$ sudo /etc/netdata/edit-config health.d/cpu.conf

Cambia i valori delle opzioni warn e crit sotto 10min_cpu_usage come mostrato di seguito.

warn: $this > (($status >= $WARNING)  ? (60) : (70))
crit: $this > (($status == $CRITICAL) ? (75) : (85))

Cambia la riga to:silent in to:sysadmin come mostrato.

template: 10min_cpu_usage
       on: system.cpu
    class: Utilization
     type: System
component: CPU
       os: linux
    hosts: *
   lookup: average -10m unaligned of user,system,softirq,irq,guest
    units: %
    every: 1m
     warn: $this > (($status >= $WARNING)  ? (60) : (70))
     crit: $this > (($status == $CRITICAL) ? (75) : (85))
    delay: down 15m multiplier 1.5 max 1h
     info: average CPU utilization over the last 10 minutes (excluding iowait, nice and steal)
       to: sysadmin

Salva il file ed esci dall’editor.

L’impostazione to:silent silenzia le notifiche e quindi per ricevere le notifiche, devi cambiare il valore del monitor in to:sysadmin per quei monitor.

L’impostazione sopra invierà un avviso se l’uso della CPU rientra tra il 60 e il 70% e un avviso critico quando l’uso della CPU rientra tra il 75 e l’85%.

Riavvia il servizio Netdata.

$ sudo systemctl restart netdata

Facciamo un test dell’impostazione installando l’applicazione Stress.

$ sudo apt install stress

Esegui il seguente comando per aumentare l’uso della CPU del tuo server.

$ stress --cpu 2

Lascia il comando in esecuzione per 5-10 minuti e riceverai messaggi di alta utilizzo della CPU. Una volta ricevuti quei messaggi, torna al terminale ed esci dal comando premendo Ctrl + Z.

Dopo aver fermato il servizio, riceverai una notifica di recupero della CPU su Slack.

Slack CPU Usage Notifications

Riceverai i seguenti messaggi email per lo stesso.

Netdata CPU Usage Email Notifications

Passo 12 - Configurare il Monitoraggio di Nginx

Una delle applicazioni più comunemente monitorate utilizzando Netdata è il server e i pacchetti SQL. Monitoriamo il server Nginx utilizzando Netdata.

Per abilitare il monitoraggio del server Nginx, dobbiamo utilizzare il ngx_http_stub_status_module. Di solito viene preinstallato con Nginx. Puoi controllare se il modulo è presente. Il sudo è richiesto sul comando sul sistema Debian.

$ sudo nginx -V 2>&1 | grep -o with-http_stub_status_module
with-http_stub_status_module

Se non ricevi risposta, significa che la tua installazione di Nginx non supporta la funzionalità. In tal caso, dovrai compilare Nginx.

Apri il file di configurazione predefinito di Nginx /etc/nginx/conf.d/default.conf per la modifica. La posizione del file è diversa perché abbiamo installato Nginx dal suo repository ufficiale. Se stai installando Nginx dal repository del sistema operativo, allora la posizione del file sarà /etc/nginx/nginx.conf.

$ sudo nano /etc/nginx/conf.d/default.conf

Inserisci il seguente codice all’interno del blocco server prima dell’ultima parentesi graffa di chiusura.

# Abilita il modulo stub_status
location /stub_status {
    stub_status;
    allow 127.0.0.1;        # consenti solo richieste da localhost
    deny all;               # nega tutti gli altri host
}

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Verifica la configurazione di Nginx.

$ sudo nginx -t
nginx: il file di configurazione /etc/nginx/nginx.conf ha una sintassi corretta
nginx: il test del file di configurazione /etc/nginx/nginx.conf ha avuto successo

Riavvia il server Nginx.

$ sudo systemctl restart nginx

Riavvia il servizio Netdata.

$ sudo systemctl restart netdata

Dovresti vedere i dettagli delle connessioni di Nginx nel tuo dashboard di Netdata.

Netdata Nginx Connection Details

Monitorare i Log di Nginx

Netdata può anche monitorare i log di accesso di Nginx. Per farlo, passa alla directory di Netdata.

$ cd /etc/netdata

Esegui il seguente comando per generare un file di configurazione per monitorare i log di accesso.

$ sudo ./edit-config go.d/web_log.conf

Scorri fino in fondo al file e trova la seguente sezione.

# -------------------------------------------
# log di nginx su varie distribuzioni

# debian, arch
nginx_log:
  name: 'nginx'
  path: '/var/log/nginx/access.log'

# gentoo
nginx_log2:
  name: 'nginx_site'
  path: '/var/log/nginx/localhost.access_log'

Cambia il percorso per monitorare i rispettivi file di log. Puoi aggiungere quante più sezioni per monitorare quanti più host e i loro file di log di accesso. Il nostro file di configurazione appare come segue.

# -------------------------------------------
# log di nginx su varie distribuzioni

# debian, arch
nginx_log:
  name: 'nginx'
  path: '/var/log/nginx/access.log'

nginx_log2:
  name: 'nginx_site1'
  path: '/var/log/nginx/site1.access_log'

nginx_log3:
  name: 'nginx_site2'
  path: '/var/log/nginx/site2.access_log'

nginx_log4:
  name: 'nginx_site3'
  path: '/var/log/nginx/site3.access_log'

Salva ed esci dall’editor.

Per accedere ai file di log, Netdata ha bisogno di permessi per accedere alla directory. Per impostazione predefinita, il gruppo di sistema adm ha permessi per accedere ai file di log. Per dare accesso a Netdata, dobbiamo aggiungere l’utente netdata al gruppo adm.

$ sudo usermod -aG adm netdata

Riavvia Nginx e il servizio Netdata.

$ sudo systemctl restart nginx netdata

Ricarica il dashboard di Netdata per visualizzare i dati del tuo file di log.

Netdata Access Log Dashboard

Passo 13 - Configurare il Monitoraggio di MySQL/MariaDB

Installeremo MariaDB per il nostro tutorial. Utilizzeremo il repository di MariaDB per questo scopo.

Importa la chiave GPG di MariaDB.

$ sudo curl -o /usr/share/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'

Crea e apri il file del repository di MariaDB.

$ sudo nano /etc/apt/sources.list.d/mariadb.sources

Incolla il seguente codice al suo interno.

# Elenco dei repository di MariaDB 10.11 - creato 2023-09-05 11:18 UTC
# https://mariadb.org/download/
X-Repolib-Name: MariaDB
Types: deb
# deb.mariadb.org è un mirror dinamico se il tuo mirror preferito va offline. Vedi https://mariadb.org/mirrorbits/ per dettagli.
# URIs: https://deb.mariadb.org/10.11/debian
URIs: https://mirrors.aliyun.com/mariadb/repo/10.11/debian
Suites: bookworm
Components: main
Signed-By: /usr/share/keyrings/mariadb-keyring.pgp

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Aggiorna l’elenco dei repository di sistema.

$ sudo apt update

Installa il server MariaDB.

$ sudo apt install mariadb-server

MariaDB è abilitato e in esecuzione. Controlla lo stato del servizio.

$ sudo systemctl status mariadb
? mariadb.service - Server di database MariaDB 10.11.5
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/mariadb.service.d
             ??migrated-from-my.cnf-settings.conf
     Active: active (running) since Tue 2023-09-05 11:44:17 UTC; 20s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 9396 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
    Process: 9397 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 9399 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR >
    Process: 9440 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 9442 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
   Main PID: 9428 (mariadbd)
     Status: "Ora sto ricevendo le tue richieste SQL..."
      Tasks: 13 (limit: 1107)
     Memory: 111.8M
        CPU: 663ms
     CGroup: /system.slice/mariadb.service
             ??9428 /usr/sbin/mariadbd

Avvia lo script di installazione sicura di MySQL. Il nome del file è diverso nel caso di MariaDB.

$ sudo mariadb-secure-installation
....
Inserisci la password attuale per root (premi Invio per nessuna): (Premi Invio)
....
Passa all'autenticazione unix_socket [Y/n] Y (Digita Y e premi Invio)
....
Cambia la password di root? [Y/n] Y (Digita Y e premi Invio)
Nuova password: 
Re-inserisci la nuova password: 
Password aggiornata con successo!
....
Rimuovi utenti anonimi? [Y/n] Y (Digita Y e premi Invio)
....
Disabilita l'accesso remoto per root? [Y/n] Y (Digita Y e premi Invio)
....
Rimuovi il database di test e l'accesso ad esso? [Y/n] Y (Digita Y e premi Invio)
....
Ricarica le tabelle di autorizzazione ora? [Y/n] Y (Digita Y e premi Invio)
....
Tutto fatto! Se hai completato tutti i passaggi sopra, la tua installazione di MariaDB dovrebbe ora essere sicura.

Grazie per aver utilizzato MariaDB!

Apri il file /etc/mysql/mariadb.conf.d/50-server.cnf per la modifica.

$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Trova la sezione [mariadb] nel file e incolla la seguente riga come mostrato di seguito per abilitare il plugin Userstats. Questa impostazione funziona solo su MariaDB e non sul server MySQL.

[mariadb]
userstat = 1

Accedi alla shell di MySQL.

$ sudo mysql

Esegui i seguenti comandi per creare un utente SQL per Netdata e dargli privilegi per tracciare le statistiche di MySQL.

MariaDB> create user 'netdata'@'localhost';
MariaDB> GRANT USAGE, REPLICATION CLIENT, PROCESS ON *.* TO 'netdata'@'localhost';
MariaDB> FLUSH PRIVILEGES;
MariaDB> exit

Crea il file di configurazione di MySQL per Netdata.

$ sudo /etc/netdata/edit-config go.d/mysql.conf

Si aprirà un file che mostra tutte le possibili opzioni. Se sei soddisfatto, salva e chiudi il file premendo Ctrl + X e inserendo Y quando richiesto.

Riavvia il server MariaDB.

$ sudo systemctl restart mariadb

Riavvia il servizio Netdata.

$ sudo systemctl restart netdata

Il dashboard di MariaDB/MySQL dovrebbe iniziare ad apparire nel dashboard di Netdata.

NetData MySQL/MariaDB dashboard

Passo 14 - Configurare il Monitoraggio di PHP-FPM

Puoi monitorare una o più istanze di PHP-FPM utilizzando Netdata. Per il nostro tutorial, installeremo PHP 8.2 e poi abiliteremo il suo monitoraggio.

Debian 12 viene fornito con PHP 8.2 per impostazione predefinita. Ma per rimanere sempre sull’ultima versione di PHP utilizzeremo il repository PHP di Ondrej.

Prima, importa la chiave GPG del repository di Sury PHP.

$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

Aggiungi il repository PHP di Ondrej Sury.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

Aggiorna l’elenco dei repository di sistema.

$ sudo apt update   

Ora puoi installare qualsiasi versione di PHP.

$ sudo apt install php8.2-fpm php8.2-cli php8.2-mbstring

Verifica l’installazione.

$ php --version
PHP 8.2.10 (cli) (built: Sep  4 2023 08:12:29) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.10, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.10, Copyright (c), by Zend Technologies

Configurare PHP

Apri il file /etc/php/8.2/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Dobbiamo impostare l’utente/gruppo Unix dei processi PHP su nginx. Trova le righe user=www-data e group=www-data nel file e cambiale in nginx.

....
; Utente/gruppo Unix dei processi figlio. Questo può essere utilizzato solo se l'utente del processo master è root. Viene impostato dopo che il processo figlio è stato creato.
; L'utente e il gruppo possono essere specificati sia dal loro nome che dai loro ID numerici.
; Nota: Se l'utente è root, l'eseguibile deve essere avviato con
;       l'opzione --allow-to-run-as-root per funzionare.
; Valori predefiniti: L'utente è impostato sull'utente del processo master per impostazione predefinita.
;                 Se il gruppo non è impostato, viene utilizzato il gruppo dell'utente.
user = nginx
group = nginx
....

Inoltre, trova le righe listen.owner=www-data e listen.group=www-data nel file e cambiale in nginx.

listen.owner = nginx
listen.group = nginx

Scorri verso il basso nel file per individuare l’opzione ;pm.status_path = /status. Rimuovi il punto e virgola davanti ad essa per decommentare la riga, come mostrato di seguito.

....
; Nota: È disponibile una pagina web di monitoraggio dello stato FPM in tempo reale
;       È disponibile in: /usr/share/php/8.2/fpm/status.html
;
; Nota: Il valore deve iniziare con una barra iniziale (/). Il valore può essere
;       qualsiasi cosa, ma potrebbe non essere una buona idea utilizzare l'estensione .php o
;       potrebbe entrare in conflitto con un vero file PHP.
; Valore predefinito: non impostato
pm.status_path = /status
....

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Riavvia il processo PHP-fpm.

$ sudo systemctl restart php8.2-fpm

Aggiungere le Impostazioni PHP a Nginx

Apri il file di configurazione predefinito di Nginx /etc/nginx/conf.d/default.conf per la modifica.

$ sudo nano /etc/nginx/conf.d/default.conf

Inserisci il seguente codice all’interno del blocco server prima dell’ultima parentesi graffa di chiusura.

# definire il monitoraggio PHP-FPM
location ~ ^/(status|ping)$ {
    allow 127.0.0.1;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Dipende dalla versione di PHP e dalla distribuzione OS
}

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Verifica la configurazione di Nginx.

$ sudo nginx -t
nginx: il file di configurazione /etc/nginx/nginx.conf ha una sintassi corretta
nginx: il test del file di configurazione /etc/nginx/nginx.conf ha avuto successo

Riavvia il server Nginx.

$ sudo systemctl restart nginx

Riavvia il servizio Netdata.

$ sudo systemctl restart netdata

Ricarica il dashboard di Netdata e dovresti vedere le statistiche di PHP-FPM.

NetData PHP-FPM Stats Dashboard

Passo 15 - Configurare il Monitoraggio del Motore Docker e dei Container

Netdata può monitorare sia il motore Docker che i container Docker. Può anche monitorare le app in esecuzione all’interno di questi container, ma non tratteremo questo aspetto in questo tutorial.

Iniziamo installando Docker.

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
$ sudo usermod -aG docker ${USER}
$ su - ${USER}

Il servizio Docker è abilitato e avviato. Puoi controllare lo stato del servizio.

$ sudo systemctl status docker

Per monitorare il motore Docker, devi abilitare la funzionalità delle metriche di Docker.

Crea e apri il file /etc/docker/daemon.json per la modifica.

$ sudo nano /etc/docker/daemon.json

Incolla il seguente codice al suo interno.

{
  "metrics-addr" : "127.0.0.1:9323",
  "experimental" : true
}

Salva il file premendo Ctrl + X e inserendo Y quando richiesto. Questo URL è utilizzato da Prometheus per tracciare le statistiche del motore Docker.

Crea un file di configurazione per il collector Docker.

$ sudo /etc/netdata/edit-config go.d/docker.conf

Crea un altro file di configurazione per il motore Docker per Prometheus.

$ sudo /etc/netdata/edit-config go.d/docker_engine.conf

Riavvia i servizi Netdata e Docker.

$ sudo systemctl restart docker netdata

Ricarica il dashboard di Netdata e puoi vedere le statistiche di Docker.

NetData Docker Container Stats

Vedrai un’altra voce chiamata Prometheus Metrics nel tuo dashboard perché l’opzione delle metriche è stata creata per il dashboard di Prometheus.

NetData Docker Container Prometheus Stats

Il passo successivo è monitorare il container Docker. Netdata utilizza i gruppi di controllo, noti come cgroups, per monitorare i container Docker. I gruppi di controllo sono una funzionalità di Linux che limita e traccia l’uso delle risorse di un insieme di processi, in questo caso, i container. Se hai container Docker in esecuzione quando installi Netdata, vengono monitorati automaticamente. Tuttavia, se esegui un container dopo aver installato Netdata, devi riavviarlo.

Esegui un container di test.

$ docker container run -d nginx

Controlla lo stato del container.

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
9d6cde479224   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 5 seconds   80/tcp    zealous_knuth

Il nome del container è zealous_knuth come mostrato. Poiché il container è stato avviato dopo aver installato Netdata, riavvia il servizio.

$ sudo systemctl restart netdata

Carica il Dashboard e dovresti essere in grado di vedere le statistiche del Container. Puoi vedere l’ID del container nelle statistiche.

NetData Docker Container Statistics

Conclusione

Questo conclude il nostro tutorial sull’installazione e l’uso del sistema di monitoraggio Netdata per monitorare varie app come Nginx, MySQL, PHP-FPM e Docker su un server Debian 12. Se hai domande, postale nei commenti qui sotto.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.