🎯 Formation Grafana

Guide complet pour TSSR débutants - Durée estimée : 1 semaine

🚀 Introduction à Grafana

Qu'est-ce que Grafana ?

Grafana est une plateforme de visualisation et d'analyse de données open-source qui permet de créer des tableaux de bord interactifs pour surveiller et analyser les métriques de votre infrastructure.

Pourquoi utiliser Grafana ?

  • Visualisation claire : Graphiques, jauges, tableaux personnalisables
  • Multi-sources : Support de nombreuses bases de données
  • Alerting : Notifications en temps réel
  • Collaboration : Partage de dashboards
  • Gratuit : Version open-source complète

Cas d'usage en entreprise

  • Monitoring infrastructure : CPU, RAM, réseau, stockage
  • Applications : Performance, erreurs, utilisateurs connectés
  • Business : Ventes, KPIs, métriques métier
  • Sécurité : Logs, tentatives d'intrusion
Grafana est l'outil de référence pour la visualisation de métriques. Il est utilisé par Netflix, Uber, PayPal et des milliers d'entreprises.

🔧 Installation de Grafana

Installation sur Ubuntu/Debian

# Mise à jour du système sudo apt update && sudo apt upgrade -y # Installation des dépendances sudo apt install -y software-properties-common wget # Ajout de la clé GPG Grafana wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - # Ajout du repository Grafana echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list # Mise à jour des repos sudo apt update # Installation de Grafana sudo apt install grafana # Démarrage du service sudo systemctl start grafana-server # Activation au démarrage sudo systemctl enable grafana-server

Installation avec Docker

# Téléchargement de l'image Grafana docker pull grafana/grafana:latest # Création d'un volume pour la persistance docker volume create grafana-storage # Démarrage du conteneur docker run -d --name=grafana -p 3000:3000 -v grafana-storage:/var/lib/grafana grafana/grafana:latest # Vérification du statut docker ps | grep grafana

Installation sur CentOS/RHEL

# Création du fichier repo sudo tee /etc/yum.repos.d/grafana.repo << EOF [grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt EOF # Installation via yum sudo yum install grafana # Démarrage et activation sudo systemctl start grafana-server sudo systemctl enable grafana-server
Par défaut, Grafana écoute sur le port 3000. L'accès se fait via http://localhost:3000 avec admin/admin comme identifiants initiaux.

Vérification de l'installation

# Vérifier le statut du service sudo systemctl status grafana-server # Consulter les logs sudo journalctl -u grafana-server -f # Tester la connectivité curl -s http://localhost:3000/api/health

🖥️ Interface et Navigation

Premier accès

Connectez-vous avec :

  • URL : http://localhost:3000
  • Utilisateur : admin
  • Mot de passe : admin

Grafana vous demandera de changer le mot de passe au premier accès.

Structure de l'interface

  • Sidebar gauche : Menu principal de navigation
  • Home Dashboard : Page d'accueil personnalisable
  • Search : Recherche de dashboards
  • Create : Création de dashboards, dossiers
  • Dashboards : Gestion des tableaux de bord
  • Explore : Exploration des données
  • Alerting : Configuration des alertes
  • Configuration : Paramètres système

Configuration de base

# Édition du fichier de configuration sudo nano /etc/grafana/grafana.ini # Redémarrage après modification sudo systemctl restart grafana-server

Paramètres importants :

  • [server] http_port : Port d'écoute (défaut: 3000)
  • [server] domain : Nom de domaine
  • [security] admin_password : Mot de passe admin
  • [database] : Configuration BDD (SQLite par défaut)
Explorez l'interface en cliquant sur chaque menu. La documentation intégrée est accessible via le "?" en haut à droite.

📊 Création de Dashboards

Créer votre premier dashboard

  1. Cliquez sur le "+" dans la sidebar
  2. Sélectionnez "Dashboard"
  3. Cliquez sur "Add new panel"
  4. Configurez votre visualisation
  5. Sauvegardez avec Ctrl+S

Types de panels (visualisations)

  • Time series : Graphiques temporels classiques
  • Stat : Valeur unique avec seuils
  • Gauge : Jauge circulaire
  • Bar gauge : Barres horizontales
  • Table : Tableau de données
  • Pie chart : Camembert
  • Heatmap : Carte de chaleur
  • Text : Texte et markdown

Configuration des panels

Options générales :

  • Title : Nom du panel
  • Description : Tooltip explicatif
  • Transparent : Arrière-plan transparent
  • Links : Liens vers autres dashboards

Axes et légendes :

  • Unit : Unité d'affichage (bytes, %, ms...)
  • Min/Max : Valeurs limites
  • Decimals : Nombre de décimales
  • Legend : Position et format

Création d'un dashboard système

Créez un dashboard avec :

  1. Un panel "Stat" pour l'uptime système
  2. Un panel "Time series" pour l'utilisation CPU
  3. Un panel "Gauge" pour l'utilisation mémoire
  4. Un panel "Table" pour les processus
Utilisez les variables de dashboard ($__timeFilter, $__interval) pour rendre vos requêtes dynamiques avec la sélection de temps.

🔌 Configuration des Sources de Données

Ajout d'une datasource

  1. Configuration → Data sources
  2. Cliquez "Add data source"
  3. Choisissez le type (Prometheus, InfluxDB, MySQL...)
  4. Configurez la connexion
  5. Testez avec "Save & test"

Prometheus (recommandé pour le monitoring)

# Installation de Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.40.0/prometheus-2.40.0.linux-amd64.tar.gz tar xvfz prometheus-2.40.0.linux-amd64.tar.gz cd prometheus-2.40.0.linux-amd64 # Démarrage de Prometheus ./prometheus --config.file=prometheus.yml

Configuration dans Grafana :

  • URL : http://localhost:9090
  • Access : Server (par défaut)
  • HTTP Method : GET

InfluxDB (pour métriques temporelles)

# Installation d'InfluxDB wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - echo "deb https://repos.influxdata.com/ubuntu bionic stable" | sudo tee /etc/apt/sources.list.d/influxdb.list sudo apt update sudo apt install influxdb # Démarrage du service sudo systemctl start influxdb sudo systemctl enable influxdb

Configuration dans Grafana :

  • URL : http://localhost:8086
  • Database : Nom de votre base
  • User/Password : Si authentification activée

MySQL/PostgreSQL

# Test de connexion MySQL mysql -h localhost -u grafana_user -p -e "SELECT 1 as test;" # Test de connexion PostgreSQL psql -h localhost -U grafana_user -d grafana_db -c "SELECT 1 as test;"

Configuration recommandée :

  • Utilisateur dédié : Créez un utilisateur spécifique pour Grafana
  • Permissions limitées : SELECT uniquement
  • SSL : Activez si possible

Configuration Multi-datasources

# Création d'un utilisateur MySQL pour Grafana mysql -u root -p CREATE USER 'grafana'@'localhost' IDENTIFIED BY 'password123'; GRANT SELECT ON *.* TO 'grafana'@'localhost'; FLUSH PRIVILEGES; # Test de la connexion mysql -u grafana -p -e "SHOW DATABASES;"
Testez toujours vos datasources après configuration. Un indicateur vert confirme la connectivité.

🚨 Système d'Alertes

Configuration des notifications

Avant de créer des alertes, configurez les canaux de notification :

  1. Alerting → Notification channels
  2. Cliquez "Add channel"
  3. Choisissez le type (Email, Slack, Teams...)
  4. Configurez les paramètres
  5. Testez la notification

Configuration Email (SMTP)

# Configuration SMTP dans grafana.ini sudo nano /etc/grafana/grafana.ini # Section [smtp] [smtp] enabled = true host = smtp.company.com:587 user = [email protected] password = your_password from_address = [email protected] from_name = Grafana Alerts # Redémarrage après modification sudo systemctl restart grafana-server

Création d'alertes

  1. Éditez un panel de type "Time series"
  2. Onglet "Alert" → "Create Alert"
  3. Définissez les conditions :
    • Query : Requête à surveiller
    • Condition : IS ABOVE, IS BELOW, IS OUTSIDE RANGE...
    • Threshold : Valeur seuil
    • Evaluation : Fréquence de vérification
  4. Configurez les notifications
  5. Sauvegardez

Exemples d'alertes critiques

CPU élevé :

  • Métrique : cpu_usage_percent
  • Condition : IS ABOVE 90
  • Durée : 5 minutes

Espace disque faible :

  • Métrique : disk_free_percent
  • Condition : IS BELOW 10
  • Durée : 1 minute

Service arrêté :

  • Métrique : service_up
  • Condition : IS BELOW 1
  • Durée : 30 secondes

Configuration d'un système d'alerte complet

# Test d'envoi d'email via ligne de commande echo "Test Grafana Alert" | mail -s "Test Alert" [email protected] # Simulation d'une charge CPU élevée stress --cpu 4 --timeout 300s # Monitoring des logs d'alertes sudo tail -f /var/log/grafana/grafana.log | grep -i alert
Évitez le spam d'alertes en définissant des durées appropriées et des seuils réalistes. Utilisez la fonction "No Data" pour gérer les pannes de datasource.

🏋️ Exercices Pratiques

Exercice 1 : Dashboard de monitoring système

Objectif : Créer un dashboard complet pour surveiller un serveur Linux

Prérequis : Node Exporter installé

# Installation de Node Exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz tar xvfz node_exporter-1.4.0.linux-amd64.tar.gz cd node_exporter-1.4.0.linux-amd64 # Démarrage en arrière-plan nohup ./node_exporter & # Vérification curl http://localhost:9100/metrics | head

Tâches :

  1. Configurez Prometheus comme datasource
  2. Créez les panels suivants :
    • CPU Usage : 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
    • Memory Usage : 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))
    • Disk Usage : 100 - ((node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes)
    • Network Traffic : rate(node_network_receive_bytes_total[5m])
  3. Configurez des alertes pour CPU > 80% et Disk > 90%
  4. Organisez le dashboard avec des rows

Exercice 2 : Dashboard applicatif avec MySQL

Objectif : Surveiller une base de données MySQL

# Configuration MySQL pour monitoring mysql -u root -p # Création d'un utilisateur de monitoring CREATE USER 'grafana'@'localhost' IDENTIFIED BY 'monitoring123'; GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO 'grafana'@'localhost'; FLUSH PRIVILEGES; # Requêtes de monitoring à utiliser SELECT COUNT(*) as connections FROM information_schema.processlist; SELECT COUNT(*) as slow_queries FROM mysql.slow_log WHERE start_time > NOW() - INTERVAL 1 HOUR;

Panels à créer :

  • Connexions actives
  • Requêtes lentes par heure
  • Taille des bases de données
  • Temps de réponse moyen

Exercice 3 : Dashboard business avec variables

Objectif : Créer un dashboard avec des variables dynamiques

Configuration des variables :

  1. Dashboard settings → Variables
  2. Créez une variable "server" avec la query : label_values(node_uname_info, instance)
  3. Créez une variable "interface" avec : label_values(node_network_receive_bytes_total{instance="$server"}, device)
  4. Utilisez ces variables dans vos requêtes

Exemple de requête avec variables :

# Utilisation des variables dans les requêtes rate(node_network_receive_bytes_total{instance="$server", device="$interface"}[5m]) # Variable pour filtrer par environnement up{environment="$env", instance=~"$server"}

Solutions et bonnes pratiques

Organisation des dashboards :

  • Dossiers : Organisez par équipe ou service
  • Tags : Utilisez des tags cohérents
  • Naming : Convention de nommage claire
  • Templates : Réutilisez les patterns communs

Performance :

  • Intervalles : Adaptez la granularité
  • Limites : Limitez le nombre de séries
  • Cache : Utilisez le cache pour les requêtes lourdes
  • Timeouts : Configurez des timeouts appropriés
Commencez simple puis enrichissez progressivement. Un dashboard utile avec 4 panels vaut mieux qu'un dashboard complexe inutilisable.