# 🎓 Cours sur **Grafana** et **PromQL** BASICS
---
## 🔹 Partie 1 – Introduction à Grafana
### 📌 1.1. Qu’est-ce que Grafana ?
Grafana est un outil open-source de visualisation et de surveillance des données de séries temporelles. Il est très utilisé pour observer des métriques système, serveur, application ou encore des flux personnalisés via des bases comme :
- **Prometheus**
- InfluxDB
- Elasticsearch
- MySQL/PostgreSQL (pour du SQL)
- Loki (logs)
### 📌 1.2. Cas d’usage typiques
- Visualisation en **dashboard dynamique**
- Alerting : création d'alertes basées sur des métriques
- Observabilité système : CPU, mémoire, réseau
- Monitoring applicatif (APM)
- Surveillance réseau et IoT
### 📌 1.3. Fonctionnement global
1. **Source de données** → comme Prometheus
2. **Dashboards** → avec panels : graphiques, jauges, tables...
3. **Alertes** → sur conditions personnalisées
4. **Users & Auth** → gestion fine des accès
---
## 🔹 Partie 2 – Premiers pas avec Prometheus et PromQL
### ℹ️ Note : Utilisation avec VictoriaMetrics
Grafana est ici connecté à **VictoriaMetrics** comme source de données. VictoriaMetrics est compatible avec **PromQL**, vous pouvez donc utiliser toutes les requêtes PromQL exactement comme avec Prometheus.
### 📌 2.1. Qu’est-ce que Prometheus ?
Prometheus est un système de monitoring et base de données de séries temporelles développé par SoundCloud. Il collecte des métriques à intervalle régulier via **des endpoints HTTP `/metrics`**.
### 📌 2.2. PromQL – Prometheus Query Language
PromQL est un langage conçu pour interroger Prometheus. Il sert à **interroger, transformer et agréger** les métriques.
---
## 🔹 Partie 3 – Bases de **PromQL**
### 📌 3.1. Types de données
- **Instant Vector** : snapshot d’une métrique à un instant précis
- **Range Vector** : métrique sur une période `[5m]`, `[1h]`…
- **Scalars** : un seul nombre
- **Strings** (rarement utilisés directement)
### 📌 3.2. Les **requêtes simples**
#### 🔹 1. Retourner la valeur actuelle d’une métrique :
```promql
up
```
#### 🔹 2. Filtrer une métrique :
```promql
node_cpu_seconds_total{mode="idle", instance="localhost:9100"}
```
### 📌 3.3. Les **fonctions PromQL utiles**
| Fonction | Description |
|------------------|----------------------------------------|
| `rate()` | Taux de croissance par seconde |
| `increase()` | Croissance totale sur une période |
| `avg()` | Moyenne |
| `sum()` | Somme |
| `max()`, `min()` | Maximum, minimum |
| `count()` | Nombre de séries |
#### 🔹 Exemple :
```promql
rate(http_requests_total[5m])
```
#### 🔹 Moyenne CPU idle par instance :
```promql
avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)
```
---
## 🔹 Partie 4 – Aller plus loin avec PromQL
### 📌 4.1. Les opérateurs
| Opérateur | Description | Exemple |
|----------|------------------|------------------------------------|
| `+ - * /` | Arithmétiques | `node_memory_MemFree_bytes / node_memory_MemTotal_bytes` |
| `and`, `or`, `unless` | Logiques/vector match |
| `==`, `!=`, `>`, `<` | Comparaisons |
#### 🔹 Exemple :
```promql
(node_memory_MemFree_bytes / node_memory_MemTotal_bytes) * 100
```
---
## 🔹 Partie 5 – Création de dashboards dans Grafana
### 📌 5.2. Créer un dashboard. Créer un dashboard
1. Cliquer sur **"Dashboards > New"**
2. Ajouter un **panel**
3. Choisir **Prometheus comme source**
4. Saisir une requête PromQL dans le champ de métrique
5. Configurer le type de visualisation : **Graph, Gauge, Table**, etc.
6. Sauvegarder
---
## 🔹 Partie 6 – Alerting dans Grafana
### 📌 6.1. Création d'une alerte simple
1. Aller sur un **panel** → cliquer sur **"Alert > Create alert"**
2. Définir la requête PromQL
3. Définir une condition (ex: `value > 80`)
4. Définir la fréquence de vérification (ex: toutes les 30s)
5. Configurer les notifications : Email, Slack, Teams…
---
## 🔹 Partie 7 – Bonnes pratiques
- Regrouper les requêtes par `job`, `instance`, ou `pod` pour analyser à différents niveaux
- Utiliser des périodes cohérentes : `[1m]`, `[5m]`, etc.
- Nester les fonctions intelligemment : `avg(rate(...))`
- Annoter les panels avec des événements pour comprendre les pics
- Tester les requêtes dans Prometheus avant de les mettre dans Grafana