RousselTMLEARNING

Article · Grafana : de la découverte à l'expertise

Maîtriser les requêtes : PromQL, LogQL, SQL et expressions

1. L'éditeur de requêtes #

Explore, panneaux et Query Inspector.

Où écrire une requête ? #

Disponible dans : ✓ OSS ✓ Enterprise ✓ Cloud

Cycle de vie d'une requête Grafana
Les expressions et transformations s'exécutent après les requêtes.
  • Explore : écrire et tester des requêtes sans créer de dashboard, comparer deux sources côte à côte.
  • Panneau : chaque panneau contient une ou plusieurs requêtes (A, B, C...) sur une ou plusieurs sources (mode Mixed).
  • Query Inspector : onglets Stats, JSON, Data, Query pour comprendre ce qui est réellement envoyé.
# Variables de requête utiles (Prometheus)
$__interval        # intervalle calculé selon la largeur du graphique
$__rate_interval   # fenêtre sûre pour rate() : max(4 x scrape, $__interval)
$__range           # durée de la plage de temps sélectionnée
$instance          # variable du dashboard
${instance:regex}  # format de variable pour les expressions régulières

2. Interroger Prometheus (PromQL) #

Les patterns de base.

Quelques requêtes typiques #

# Taux de requêtes par statut
sum by (status) (rate(http_requests_total{job="api"}[$__rate_interval]))

# Top 5 des instances par CPU
topk(5, 100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[$__rate_interval])) * 100)

# Disponibilité sur la plage affichée
avg_over_time(up{job="api"}[$__range]) * 100
Bonne Pratique : Activez l'option Format : Time series / Table / Heatmap et l'option Type : Range / Instant adaptée : un Stat ou une Table doit utiliser Instant pour limiter la charge.

3. Interroger Loki (LogQL) et les bases SQL #

Logs et données relationnelles.

LogQL #

# Logs d'une application contenant "error"
{app="checkout", env="prod"} |= "error" != "healthcheck"

# Parser du JSON et filtrer
{app="checkout"} | json | level="error" | line_format "{{.method}} {{.path}} {{.status}}"

# Transformer des logs en métrique : erreurs par minute
sum by (app) (rate({env="prod"} |= "error" [1m]))

# Top 10 des chemins les plus lents (quantile)
quantile_over_time(0.95, {app="api"} | json | unwrap duration_ms [5m]) by (path)

SQL (PostgreSQL, MySQL) #

-- Série temporelle : commandes par heure
SELECT $__timeGroupAlias(created_at, '1h'),
       count(*) AS commandes
FROM orders
WHERE $__timeFilter(created_at)
GROUP BY 1
ORDER BY 1;

-- Table : top clients
SELECT customer, sum(total) AS chiffre_affaires
FROM orders
WHERE $__timeFilter(created_at)
GROUP BY customer ORDER BY 2 DESC LIMIT 10;
Erreur Courante : Utilisez un compte de base de données en lecture seule pour la source de données Grafana et limitez les requêtes coûteuses (LIMIT, index sur la colonne de temps).

4. Combiner et optimiser #

Mixed, expressions et performances.

Mixed datasource et expressions #

La source -- Mixed -- permet d'interroger plusieurs sources dans un même panneau. Les expressions (Math, Reduce, Resample) calculent à partir des résultats des requêtes précédentes, par exemple le ratio entre deux sources :

A : sum(rate(http_requests_total{status=~"5.."}[$__rate_interval]))    (Prometheus)
B : sum(rate(http_requests_total[$__rate_interval]))                   (Prometheus)
C (Math) : $A / $B * 100                                                (expression)

Optimiser #

  • Limiter la plage de temps et l'intervalle de rafraîchissement des dashboards.
  • Utiliser Max data points et Min interval pour réduire le volume de points retournés.
  • Activer Query caching (Grafana Enterprise/Cloud) ou les recording rules Prometheus pour les requêtes lourdes.
  • Remplacer une dizaine de panneaux identiques par un panneau Repeat basé sur une variable.
# Recording rule Prometheus pour précalculer une requête lourde
groups:
  - name: precalcul
    rules:
      - record: job:http_requests:rate5m
        expr: sum by (job) (rate(http_requests_total[5m]))

📄 Grafana : maîtriser les requêtes (PromQL, LogQL, SQL et expressions) →

Mon suivi

  • ⏱ Durée estimée : ≈ 10 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Discussions récentes de la formation

Poser une question sur cette leçon →Voir toutes les discussions de la formation

Glossaire de la formation

Observabilité

La capacité à connaître l'état interne d'un système à partir des données qu'il émet.Ces données sont classées en 3 piliers : logsmétriquestracesprofil...

Grafana

Plateforme open source de visualisation de données et d'analyse de métriques interactives.

Prometheus

Système open source de surveillance et d'alerte, particulièrement adapté pour la collecte de métriques dans des environnements dynamiques (comme Kuber...

APM (Application Performance Monitoring)

Surveillance des performances applicatives pour identifier, diagnostiquer et résoudre les problèmes complexes liés aux performances et à la disponibil...

k6

Outil open source de test de charge (load testing) conçu pour l'ingénierie de performance, permettant d'évaluer la fiabilité et la scalabilité des sys...

Traces distribuées

Technique (issue du pilier des Traces) permettant de suivre le cheminement complet d'une requête à travers de multiples micro-services pour identifier...

Métriques

Mesures numériques collectées à intervalles réguliers (ex: CPU, RAM, temps de réponse) utilisées pour évaluer l'état de santé global d'un système au f...

Alerting

Processus consistant à notifier les équipes (via email, Slack, Teams) lorsqu'un événement spécifique, un dépassement de seuil ou une anomalie est déte...

HTTP Code

Codes de statut HTTP standardisés indiquant le résultat du traitement d'une requête.1xx (Information) : 100 Continue, 101 Switching Protocols.2xx (Suc...

Access Log

Fichier de journalisation enregistrant les requêtes traitées par un serveur web (Apache, Nginx, Lighttpd, etc.). Il permet de tracer l'activité du ser...

Client IP

L'adresse IP de l'utilisateur effectuant la requête vers le serveur web. Lorsqu'un utilisateur passe par un Load Balancer ou un proxy (ex: Cloudflare)...

Timestamp

La date et l'heure exactes auxquelles la requête a été reçue par le serveur.Configuration : %t dans Apache, $time_local ou $time_iso8601 dans Nginx.

Request

La ligne de requête initiale du client. Elle comprend généralement la méthode HTTP (ex: GET), l'URL demandée et la version du protocole HTTP.Configura...

Status Code

Le code de statut HTTP final renvoyé par le serveur au client (ex : 200 pour un succès, 404 pour ressource non trouvée).Configuration : %>s dans Apach...

Size

Le volume des données renvoyées au client, mesuré en octets (généralement sans les en-têtes HTTP).Configuration : %b ou %O dans Apache, $body_bytes_se...

Referrer

L'URL de la page web depuis laquelle le client a cliqué ou suivi un lien pour accéder à la ressource actuelle.Configuration : %{Referer}i dans Apache,...

User-Agent

Les informations d'identification fournies par le client concernant son navigateur, son système d'exploitation et son appareil. Sa structure standard ...

Response Time

La durée totale prise par le serveur pour traiter la requête et renvoyer la réponse au client.Configuration : %D (microsecondes) ou %T (secondes) dans...

Grafana Loki

Système de journalisation (logs) multi-tenant, hautement disponible et inspiré de Prometheus. Il est conçu pour être très économe en ressources en n'i...

Articles recommandés

PromQL : introduction au langage de requête de Prometheus

Apprendre PromQL, le langage de requête de Prometheus : sélecteurs, rate, sum by, histogrammes et...

Grafana Assistant : L'IA au service de l'observabilité

Découvrez Grafana Assistant, l'intelligence artificielle intégrée à Grafana Cloud. Apprenez comme...

Bonnes pratiques Grafana Loki : labels, requêtes, stockage et coûts

Bonnes pratiques Loki : choix des labels et cardinalité, structured metadata, requêtes LogQL perf...

Explorer ses données dans OpenObserve : SQL, PromQL et VRL

Chercher en SQL, interroger les métriques en PromQL, optimiser un flux (index, partitions, rétent...

Maîtriser les Variables dans Grafana : Dynamisez vos Tableaux de Bord

Apprenez à utiliser les variables pour créer des tableaux de bord interactifs et réutilisables. D...

Utiliser SigNoz : APM, traces, logs, dashboards et alertes

Exploiter SigNoz au quotidien : vue APM des services, explorateur de traces et de logs, query bui...

Recording rules Prometheus : accélérer ses requêtes et ses tableaux de bord

Comprendre et maîtriser les recording rules de Prometheus : évaluation, convention de nommage, pi...

Mimir : le chemin de lecture (query-frontend, querier, store-gateway et caches)

Comment Mimir répond à une requête PromQL : découpage et cache du query-frontend, file d'attente,...

Maîtriser les Transformations dans Grafana : Manipulez vos données avec agilité

Apprenez à utiliser les transformations Grafana pour reformater, calculer et combiner vos données...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !