Monitoraggio · 13 min read · Oct 27, 2025

Come installare e configurare il sistema di monitoraggio Graphite su Ubuntu 22.04

Graphite è uno strumento open-source utilizzato per monitorare e rappresentare graficamente le prestazioni dei sistemi informatici. Puoi usarlo per monitorare le prestazioni di siti web, applicazioni, servizi aziendali e server in rete. È altamente flessibile e può essere configurato in modo da ottenere i vantaggi sia di una rappresentazione dettagliata che di una panoramica generale delle prestazioni e della salute delle metriche che stai monitorando.

Graphite è composto da diversi componenti: l’applicazione web, un backend di archiviazione chiamato Carbon e la libreria del database chiamata whisper. In questo tutorial, imparerai a installare e configurare Graphite su un server Ubuntu 22.04.

Prerequisiti

  • Un server che esegue Ubuntu 22.04.
  • Un nome di dominio completamente qualificato (FQDN) che punta al server. Per il nostro tutorial, utilizzeremo il dominio graphite.example.com.
  • Un utente non root con privilegi sudo.
  • Il firewall semplice (UFW) è abilitato e in esecuzione.
  • Assicurati che tutto sia aggiornato. $ sudo apt update && sudo apt upgrade
  • Installa i pacchetti di utilità di base. Alcuni di essi potrebbero già essere installati. $ sudo apt install wget curl nano unzip -y

Passo 1 - Configurare il Firewall

Prima di installare qualsiasi pacchetto, il primo passo è configurare il firewall per consentire le connessioni HTTP e HTTPS.

Controlla lo stato del firewall.

$ sudo ufw status

Dovresti vedere qualcosa di simile a quanto segue.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Consenti le porte HTTP e HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Controlla di nuovo lo stato per confermare.

$ sudo ufw status
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 i pacchetti richiesti

Installeremo Graphite utilizzando il gestore di pacchetti PIP di Python. Il primo passo è installare i pacchetti necessari per l’installazione.

$ sudo apt install vim python3-dev python3-pip libcairo2-dev libffi-dev build-essential

Passo 3 - Installare Graphite e Graphite Web

Installeremo Graphite nella directory /opt/graphite.

$ export PYTHONPATH="/opt/graphite/lib/:/opt/graphite/webapp/"
$ sudo pip install --no-binary=:all: https://github.com/graphite-project/whisper/tarball/master
$ sudo pip install --no-binary=:all: https://github.com/graphite-project/carbon/tarball/master
$ sudo pip install --no-binary=:all: https://github.com/graphite-project/graphite-web/tarball/master

Passo 4 - Installare e configurare PostgreSQL

Utilizzeremo il repository APT ufficiale di PostgreSQL per l’installazione. Esegui il seguente comando per aggiungere la chiave GPG di PostgreSQL.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

Aggiungi il repository APT alla tua lista di sorgenti.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Aggiorna il repository di sistema.

$ sudo apt update

Ora puoi installare PostgreSQL e i pacchetti di supporto utilizzando il seguente comando.

$ sudo apt install postgresql postgresql-contrib libpq-dev

Controlla lo stato del servizio PostgreSQL.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Tue 2022-09-27 10:09:35 UTC; 4s ago
    Process: 4456 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4456 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Sep 27 10:09:35 matrix systemd[1]: Starting PostgreSQL RDBMS...
Sep 27 10:09:35 matrix systemd[1]: Finished PostgreSQL RDBMS.

Puoi vedere che il servizio è abilitato e in esecuzione per impostazione predefinita.

Accedi alla shell di PostgreSQL.

$ sudo -su postgres psql

Crea un utente del database per Graphite.

postgres=# CREATE USER graphite WITH PASSWORD 'your_password';

Crea un database per Graphite e assegna la proprietà all’utente graphite.

postgres=# CREATE DATABASE graphitedb WITH OWNER graphite;

Esci dalla shell di PostgreSQL.

postgres=# \q

Passo 5 - Configurare Graphite Carbon e Web

Il passo successivo è configurare Graphite Carbon e Graphite web.

Configurare Carbon

Carbon è composto da tre servizi:

  • carbon-cache: accetta metriche e le scrive su disco.
  • carbon-relay: replica i dati.
  • carbon-aggregator: funziona davanti al servizio carbon-cache per memorizzare le metriche nel tempo prima di inoltrarle a Whisper.

Configurare carbon-cache è necessario, ma carbon-relay e carbon-aggregator sono facoltativi.

Crea il file carbon.conf utilizzando il file di esempio fornito.

$ sudo cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf

Successivamente, crea la configurazione degli schemi di archiviazione.

$ sudo cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf

Apri il file di configurazione dello schema di archiviazione.

$ sudo nano /opt/graphite/conf/storage-schemas.conf

All’interno, troverai voci come

[carbon]
pattern = ^carbon\.
retentions = 60:90d

Questo implica che un pattern che corrisponde a un’espressione regolare ^carbon\. dovrebbe mantenere i dati con una politica di retention 60:90d che significa

  • quanto spesso una metrica viene registrata: 60 secondi
  • durata del tempo per memorizzare quei valori: 90 giorni

Puoi aggiungere la tua voce. Prendiamo ad esempio test, cioè monitorare i punti dati e le nostre voci di punti dati inizieranno con la stringa test. Questa voce dovrebbe essere aggiunta prima della voce predefinita menzionata in fondo al file.

[test]
pattern = ^test\.
retentions = 10s:10m,1m:1h

Questo corrisponderà a qualsiasi metrica che inizia con test. Memorizzerà i dati che raccoglie due volte, con dettagli variabili. La prima definizione (1s:10m) creerà un punto dati ogni dieci secondi. Memorizzerà i dati solo per dieci minuti. La seconda definizione creerà un punto dati ogni minuto. Raccoglierà tutti i dati dell’ultimo minuto (sei punti, poiché la definizione precedente crea un punto ogni dieci secondi) e li aggrega per creare il punto. Memorizza i dati a questo livello di dettaglio per un’ora.

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

Avvia il servizio carbon-cache.

$ sudo /opt/graphite/bin/carbon-cache.py start

Configurare il Graphite Web

Il passo successivo è configurare l’app web di Graphite.

Genera una chiave segreta per l’applicazione Graphite. Copia la chiave visualizzata per un uso successivo.

$ python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
sp%71)6b$%^bc(7xpz1d!)x3(azog01&k^8l02*!y0#)72p07y

Crea il file di impostazioni dell’app web.

$ sudo cp /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py

Devi configurare l’applicazione web di Graphite con le impostazioni del database. Apri il local_settings.py per la modifica.

$ sudo nano /opt/graphite/webapp/graphite/local_settings.py

Decommenta la variabile SECRET_KEY e inserisci un valore casuale per essa.

SECRET_KEY = 'your-secret-key'

Decommenta la variabile ALLOWED_HOSTS.

ALLOWED_HOSTS = [ '*' ]

Decommenta la variabile TIME_ZONE e impostala sul valore appropriato.

TIME_ZONE = 'Asia/Kolkata'

Decommenta la variabile USE_REMOTE_USER_AUTHENTICATION e impostala su TRUE in modo che l’utente remoto venga autenticato prima di apportare modifiche al database.

USE_REMOTE_USER_AUTHENTICATION = True

Cambia le impostazioni del database.

DATABASES = {
    'default': {
        'NAME': 'graphitedb',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'graphite',
        'PASSWORD': 'your_password',
        'HOST': '127.0.0.1',
        'PORT': ''
    }
}

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

Installa alcuni prerequisiti per il wrapper PostgreSQL di Python.

$ sudo pip install psycopg2-binary

Esegui il seguente comando per importare lo schema del database.

$ sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py migrate --settings=graphite.settings

Riceverai il seguente output.

Operations to perform:
  Apply all migrations: account, admin, auth, contenttypes, dashboard, events, sessions, tagging, tags, url_shortener
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying account.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying dashboard.0001_initial... OK
  Applying events.0001_initial... OK
  Applying sessions.0001_initial... OK
  Applying tagging.0001_initial... OK
  Applying tagging.0002_on_delete... OK
  Applying tags.0001_initial... OK
  Applying url_shortener.0001_initial... OK

Successivamente, raccogli i file statici.

$ sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py collectstatic --settings=graphite.settings

Imposta le corrette impostazioni di proprietà.

$ sudo chown -R www-data:www-data /opt/graphite/storage/
$ sudo chown -R www-data:www-data /opt/graphite/static/
$ sudo chown -R www-data:www-data /opt/graphite/webapp/

Crea un utente root per il login.

$ sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py createsuperuser --settings=graphite.settings
Username (leave blank to use 'root'): navjot
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.

Ti verrà chiesto di creare un superutente. Questo utente sarà utilizzato in seguito per connettersi all’applicazione Graphite.

Passo 6 - Configurare Apache

Graphite viene fornito con file di configurazione di Apache per impostazione predefinita. Installa il server Apache.

$ sudo apt install apache2 libapache2-mod-wsgi-py3

Crea il file mod_wsgi.

$ sudo cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi

Copia il file di configurazione di esempio di graphite nella posizione di Apache.

$ sudo cp /opt/graphite/examples/example-graphite-vhost.conf /etc/apache2/sites-available/graphite.conf

Apri il file di configurazione di Graphite per la modifica.

$ sudo nano /etc/apache2/sites-available/graphite.conf

Cambia il numero di porta nella prima riga da 80 a 127.0.0.1:8080. Mettere 127.0.0.1 davanti ad esso lo rende non accessibile tramite il web.


Aggiungi il tuo nome di dominio.

ServerName graphite.example.com #Sostituisci con il tuo dominio

Aggiungi le seguenti righe sotto la riga Alias /static/ /opt/graphite/static/.

#Aggiungi le righe sotto

     Require all granted

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

Disabilita il virtual host predefinito e abilita il file del virtual host di Graphite.

$ sudo a2dissite 000-default
$ sudo a2ensite graphite

Dobbiamo anche dire ad Apache di ascoltare sulla porta 8080 e smettere di ascoltare sulla porta 80 perché utilizzeremo Nginx come server proxy.

Apri il file /etc/apache2/ports.conf per la modifica.

$ sudo nano /etc/apache2/ports.conf

Trova la riga Listen 80 e sostituiscila con quanto segue.

Listen 127.0.0.1:8080

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

Riavvia il server Apache.

$ sudo systemctl restart apache2

Per verificare che Graphite funzioni correttamente e sia accessibile, esegui il seguente comando.

$ curl 127.0.0.1:8080

Riceverai il seguente output.





  
    Graphite Browser
  



  

    



Questo conferma che funziona correttamente.

Passo 7 - Installare Nginx

Utilizzeremo Nginx come server proxy per Apache. In questo modo possiamo raccogliere i benefici della sicurezza e dell’oscurità, utilizzando nel contempo la configurazione esistente fornita da Graphite.

Ubuntu 22.04 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 arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Aggiorna i repository di sistema.

$ sudo apt update

Installa Nginx.

$ sudo apt install nginx

Verifica l’installazione.

$ nginx -v
nginx version: nginx/1.22.0

Avvia il server Nginx.

$ sudo systemctl start nginx

Passo 8 - Installare SSL

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

Ubuntu 22.04 viene fornito con Snapd installato per impostazione predefinita. 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

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

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

Esegui il seguente comando per generare un certificato SSL.

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

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

Genera un certificato di gruppo Diffie-Hellman.

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

Controlla il servizio del programma di 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              

.................................................................................................................................
Wed 2022-09-28 00:00:00 UTC 7h left       Tue 2022-09-27 00:00:01 UTC 16h ago  logrotate.timer                logrotate.service
Wed 2022-09-28 02:39:09 UTC 10h left      Tue 2022-09-27 09:42:42 UTC 6h ago   apt-daily.timer                apt-daily.service
Wed 2022-09-28 06:02:00 UTC 13h left      n/a                         n/a      snap.certbot.renew.timer       snap.certbot.renew.service

Per controllare se il rinnovo SSL funziona correttamente, esegui un tentativo di prova del processo.

$ sudo certbot renew --dry-run

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

Passo 9 - Configurare Nginx

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.

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

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

Incolla il seguente codice in esso.

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

    access_log  /var/log/nginx/graphite.access.log;
    error_log   /var/log/nginx/graphite.error.log;

    # SSL
    ssl_certificate      /etc/letsencrypt/live/graphite.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/graphite.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/graphite.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    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;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location / {
       proxy_set_header Connection "upgrade";
       proxy_set_header Upgrade $http_upgrade;
       proxy_http_version 1.1;

       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-NginX-Proxy true;

       proxy_pass http://127.0.0.1:8080;
       proxy_redirect off;
    }
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  graphite.example.com;
    return 301   https://$host$request_uri;
}

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

Verifica la sintassi del file di configurazione di Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Riavvia il servizio Nginx.

$ sudo systemctl restart nginx

Passo 10 - Accedere e utilizzare Graphite

Visita l’URL https://graphite.example.com nel tuo browser e vedrai la seguente schermata.

Dashboard di Graphite

Clicca sul link Login in alto a destra per aprire la pagina di accesso. Inserisci le tue credenziali di superutente create nel passo 5 e premi il pulsante login per procedere.

Ci sono diversi metodi per alimentare dati a Graphite. Abbiamo aggiunto un matcher di pattern nello schema di archiviazione, secondo il quale qualsiasi pattern che inizia con test, sarà registrato come il nostro pattern. Aggiungiamo alcuni dati casuali utilizzando il seguente comando.

$ echo "test.count 9 `date +%s`" | nc -q0 127.0.0.1 2003;

Questo aggiungerà una metrica di dati di valore 9 al sistema. Aggiungiamo alcuni altri dati eseguendo un ciclo attraverso i valori.

$ for i in 4 6 8 16 2; do echo "test.count $i `date +%s`" | nc -q0 127.0.0.1 2003; sleep 6; done

Torna alla dashboard di Graphite e apri Metrics >> test >> count dalla barra laterale sinistra. Dovresti vedere qualcosa di simile a quanto segue.

Graphite Mostra dati nella Dashboard

Ora puoi iniziare a usarlo per il monitoraggio. Puoi anche combinarlo con Grafana per ottenere un alto livello di personalizzazione.

Conclusione

Questo conclude il nostro tutorial su come installare e configurare Graphite su un server Ubuntu 22.04 insieme a Nginx come server proxy. 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.