Graphite Monitoring · 13 min read · Oct 27, 2025

Comment installer et configurer le système de surveillance Graphite sur Ubuntu 22.04

Graphite est un outil open-source utilisé pour suivre et représenter graphiquement les performances des systèmes informatiques. Vous pouvez l’utiliser pour suivre les performances des sites Web, des applications, des services commerciaux et des serveurs en réseau. Il est très flexible et peut être configuré de manière à vous permettre de bénéficier à la fois d’une représentation détaillée et d’une vue d’ensemble des performances et de la santé des métriques que vous suivez.

Graphite est composé de plusieurs composants : l’application web, un backend de stockage appelé Carbon, et la bibliothèque de base de données appelée whisper. Dans ce tutoriel, vous apprendrez à installer et configurer Graphite sur un serveur Ubuntu 22.04.

Prérequis

  • Un serveur exécutant Ubuntu 22.04.
  • Un nom de domaine entièrement qualifié (FQDN) pointant vers le serveur. Pour notre tutoriel, nous utiliserons le domaine graphite.example.com.
  • Un utilisateur non-root avec des privilèges sudo.
  • Le pare-feu uncomplicated (UFW) est activé et en cours d’exécution.
  • Assurez-vous que tout est à jour. $ sudo apt update && sudo apt upgrade
  • Installez des paquets utilitaires de base. Certains d’entre eux peuvent déjà être installés. $ sudo apt install wget curl nano unzip -y

Étape 1 - Configurer le pare-feu

Avant d’installer des paquets, la première étape consiste à configurer le pare-feu pour autoriser les connexions HTTP et HTTPS.

Vérifiez l’état du pare-feu.

$ sudo ufw status

Vous devriez voir quelque chose comme ce qui suit.

Status: active

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

Autorisez les ports HTTP et HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Vérifiez à nouveau l’état pour confirmer.

$ 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)

Étape 2 - Installer les paquets requis

Nous allons installer Graphite en utilisant le gestionnaire de paquets PIP Python. La première étape consiste à installer les paquets requis pour l’installation.

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

Étape 3 - Installer Graphite et Graphite Web

Nous allons installer Graphite dans le répertoire /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

Étape 4 - Installer et configurer PostgreSQL

Nous allons utiliser le dépôt APT officiel de PostgreSQL pour installer. Exécutez la commande suivante pour ajouter la clé GPG de PostgreSQL.

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

Ajoutez le dépôt APT à votre liste de sources.

$ 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'

Mettez à jour le dépôt système.

$ sudo apt update

Maintenant, vous pouvez installer PostgreSQL et les paquets d’assistance en utilisant la commande suivante.

$ sudo apt install postgresql postgresql-contrib libpq-dev

Vérifiez l’état du service 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.

Vous pouvez voir que le service est activé et en cours d’exécution par défaut.

Connectez-vous à l’interface en ligne de commande PostgreSQL.

$ sudo -su postgres psql

Créez un utilisateur de base de données pour Graphite.

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

Créez une base de données pour Graphite et donnez la propriété à l’utilisateur graphite.

postgres=# CREATE DATABASE graphitedb WITH OWNER graphite;

Quittez l’interface en ligne de commande PostgreSQL.

postgres=# \q

Étape 5 - Configurer Graphite Carbon et Web

L’étape suivante consiste à configurer Graphite Carbon et Graphite web.

Configurer Carbon

Carbon se compose de trois services :

  • carbon-cache : accepte les métriques et les écrit sur le disque.
  • carbon-relay : réplique les données.
  • carbon-aggregator : fonctionne devant le service carbon-cache pour mettre en mémoire tampon les métriques au fil du temps avant de les transmettre à Whisper.

Configurer carbon-cache est nécessaire, mais carbon-relay et carbon-aggregator sont optionnels.

Créez le fichier carbon.conf en utilisant le fichier exemple donné.

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

Ensuite, créez la configuration des schémas de stockage.

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

Ouvrez le fichier de configuration du schéma de stockage.

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

À l’intérieur, vous trouverez des entrées comme

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

Cela implique qu’un motif qui correspond à une expression régulière ^carbon\. doit conserver les données avec une politique de rétention 60:90d, ce qui signifie

  • à quelle fréquence une métrique est enregistrée : 60 secondes
  • durée de stockage de ces valeurs : 90 jours

Vous pouvez ajouter votre propre entrée. Prenons un exemple test, c’est-à-dire des points de données de surveillance et nos entrées de points de données commenceront par la chaîne test. Cette entrée doit être ajoutée avant l’entrée par défaut mentionnée en bas du fichier.

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

Cela correspondra à toutes les métriques commençant par test. Il stockera les données qu’il collecte deux fois, avec des détails variés. La première définition (1s:10m) créera un point de données toutes les dix secondes. Elle ne stockera les données que pendant dix minutes. La deuxième définition créera un point de données chaque minute. Elle rassemblera toutes les données de la minute précédente (six points, puisque la définition précédente crée un point toutes les dix secondes) et les agrégera pour créer le point. Elle stocke les données à ce niveau de détail pendant une heure.

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Démarrez le service carbon-cache.

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

Configurer le Web de Graphite

L’étape suivante consiste à configurer l’application web Graphite.

Générez une clé secrète pour l’application Graphite. Copiez la clé affichée pour une utilisation ultérieure.

$ 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

Créez le fichier de paramètres de l’application web.

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

Vous devez configurer l’application web Graphite avec les paramètres de la base de données. Ouvrez le local_settings.py pour l’édition.

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

Décommentez la variable SECRET_KEY et entrez une valeur aléatoire pour celle-ci.

SECRET_KEY = 'your-secret-key'

Décommentez la variable ALLOWED_HOSTS.

ALLOWED_HOSTS = [ '*' ]

Décommentez la variable TIME_ZONE et définissez-la sur la valeur appropriée.

TIME_ZONE = 'Asia/Kolkata'

Décommentez la variable USE_REMOTE_USER_AUTHENTICATION et définissez-la sur TRUE afin que l’utilisateur distant soit authentifié avant d’apporter des modifications à la base de données.

USE_REMOTE_USER_AUTHENTICATION = True

Modifiez les paramètres de la base de données.

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

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Installez quelques prérequis pour le wrapper PostgreSQL de Python.

$ sudo pip install psycopg2-binary

Exécutez la commande suivante pour importer le schéma de la base de données.

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

Vous obtiendrez la sortie suivante.

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

Ensuite, collectez les fichiers statiques.

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

Définissez les paramètres de propriété corrects.

$ 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/

Créez un utilisateur root pour la connexion.

$ 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.

Il vous sera demandé de créer un superutilisateur. Cet utilisateur sera utilisé plus tard pour se connecter à l’application Graphite.

Étape 6 - Configurer Apache

Graphite est livré avec des fichiers de configuration Apache par défaut. Installez le serveur Apache.

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

Créez le fichier mod_wsgi.

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

Copiez le fichier de configuration exemple de graphite à l’emplacement Apache.

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

Ouvrez le fichier de configuration Graphite pour l’édition.

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

Changez le numéro de port dans la première ligne de 80 à 127.0.0.1:8080. Mettre 127.0.0.1 devant restreint l’accès depuis le web.


Ajoutez votre nom de domaine.

ServerName graphite.example.com #Remplacez par votre domaine

Ajoutez les lignes suivantes sous la ligne Alias /static/ /opt/graphite/static/.

#Ajoutez les lignes ci-dessous

     Require all granted

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Désactivez l’hôte virtuel par défaut et activez le fichier d’hôte virtuel Graphite.

$ sudo a2dissite 000-default
$ sudo a2ensite graphite

Nous devrons également dire à Apache d’écouter le port 8080 et d’arrêter d’écouter le port 80 car nous utiliserons Nginx comme serveur proxy.

Ouvrez le fichier /etc/apache2/ports.conf pour l’édition.

$ sudo nano /etc/apache2/ports.conf

Trouvez la ligne Listen 80 et remplacez-la par ce qui suit.

Listen 127.0.0.1:8080

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Redémarrez le serveur Apache.

$ sudo systemctl restart apache2

Pour vérifier que Graphite fonctionne correctement et est accessible, exécutez la commande suivante.

$ curl 127.0.0.1:8080

Vous obtiendrez la sortie suivante.





  
    Graphite Browser
  



  

    



Cela confirme que cela fonctionne bien.

Étape 7 - Installer Nginx

Nous allons utiliser Nginx comme serveur proxy pour Apache. De cette façon, nous pouvons tirer parti de la sécurité et de l’obscurité tout en utilisant la configuration existante fournie par Graphite.

Ubuntu 22.04 est livré avec une version plus ancienne de Nginx. Pour installer la dernière version, vous devez télécharger le dépôt officiel de Nginx.

Importez la clé de signature de Nginx.

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

Ajoutez le dépôt pour la version stable de 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

Mettez à jour les dépôts système.

$ sudo apt update

Installez Nginx.

$ sudo apt install nginx

Vérifiez l’installation.

$ nginx -v
nginx version: nginx/1.22.0

Démarrez le serveur Nginx.

$ sudo systemctl start nginx

Étape 8 - Installer SSL

Nous devons installer Certbot pour générer le certificat SSL. Vous pouvez soit installer Certbot en utilisant le dépôt d’Ubuntu, soit obtenir la dernière version en utilisant l’outil Snapd. Nous allons utiliser la version Snapd.

Ubuntu 22.04 est livré avec Snapd installé par défaut. Exécutez les commandes suivantes pour vous assurer que votre version de Snapd est à jour.

$ sudo snap install core
$ sudo snap refresh core

Installez Certbot.

$ sudo snap install --classic certbot

Utilisez la commande suivante pour vous assurer que la commande Certbot peut être exécutée en créant un lien symbolique vers le répertoire /usr/bin.

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

Exécutez la commande suivante pour générer un certificat SSL.

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

La commande ci-dessus téléchargera un certificat dans le répertoire /etc/letsencrypt/live/graphite.example.com sur votre serveur.

Générez un certificat de groupe Diffie-Hellman.

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

Vérifiez le service de planification de renouvellement de Certbot.

$ sudo systemctl list-timers

Vous trouverez snap.certbot.renew.service comme l’un des services programmés pour s’exécuter.

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

Pour vérifier si le renouvellement SSL fonctionne correctement, effectuez un essai à sec du processus.

$ sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes prêt. Votre certificat se renouvellera automatiquement.

Étape 9 - Configurer Nginx

Ouvrez le fichier /etc/nginx/nginx.conf pour l’édition.

$ sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Créez et ouvrez le fichier /etc/nginx/conf.d/uvdesk.conf pour l’édition.

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

Collez le code suivant dedans.

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;
}

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité une fois terminé.

Vérifiez la syntaxe du fichier de configuration 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

Redémarrez le service Nginx.

$ sudo systemctl restart nginx

Étape 10 - Accéder et utiliser Graphite

Visitez l’URL https://graphite.example.com dans votre navigateur et vous obtiendrez l’écran suivant.

Tableau de bord Graphite

Cliquez sur le lien Connexion en haut à droite pour ouvrir la page de connexion. Entrez vos identifiants de superutilisateur créés à l’étape 5 et appuyez sur le bouton connexion pour continuer.

Il existe plusieurs méthodes pour alimenter des données dans Graphite. Nous avons ajouté un correspondance de motif dans le schéma de stockage, selon lequel tout motif qui commence par test sera enregistré comme notre motif. Ajoutons quelques données aléatoires en utilisant la commande suivante.

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

Cela ajoutera une métrique de données d’une valeur de 9 au système. Ajoutons quelques données supplémentaires en parcourant les valeurs.

$ 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

Retournez au tableau de bord Graphite et ouvrez Metrics >> test >> count dans la barre latérale gauche. Vous devriez voir quelque chose comme ce qui suit.

Graphite Affiche les données dans le tableau de bord

Vous pouvez maintenant commencer à l’utiliser pour la surveillance. Vous pouvez également le combiner avec Grafana pour obtenir un niveau élevé de personnalisation.

Conclusion

Cela conclut notre tutoriel sur l’installation et la configuration de Graphite sur un serveur Ubuntu 22.04 avec Nginx comme serveur proxy. Si vous avez des questions, posez-les dans les commentaires ci-dessous.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.