🚀 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
- Cliquez sur le "+" dans la sidebar
- Sélectionnez "Dashboard"
- Cliquez sur "Add new panel"
- Configurez votre visualisation
- 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 :
- Un panel "Stat" pour l'uptime système
- Un panel "Time series" pour l'utilisation CPU
- Un panel "Gauge" pour l'utilisation mémoire
- 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
- Configuration → Data sources
- Cliquez "Add data source"
- Choisissez le type (Prometheus, InfluxDB, MySQL...)
- Configurez la connexion
- 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 :
- Alerting → Notification channels
- Cliquez "Add channel"
- Choisissez le type (Email, Slack, Teams...)
- Configurez les paramètres
- 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
- Éditez un panel de type "Time series"
- Onglet "Alert" → "Create Alert"
- 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
- Configurez les notifications
- 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 :
- Configurez Prometheus comme datasource
- 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]) - Configurez des alertes pour CPU > 80% et Disk > 90%
- 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 :
- Dashboard settings → Variables
- Créez une variable "server" avec la query :
label_values(node_uname_info, instance) - Créez une variable "interface" avec :
label_values(node_network_receive_bytes_total{instance="$server"}, device) - 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.