3. Écrire ses premières règles #
La syntaxe, un exemple complet et les options du groupe.
Un fichier de règles #
Déclarez le fichier dans prometheus.yml, puis écrivez les règles. Ces exemples portent sur les métriques de Prometheus lui-même, pour pouvoir les essayer immédiatement :
global:
scrape_interval: 5s
evaluation_interval: 15s
rule_files:
- /etc/prometheus/rules.yml
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]groups:
- name: http_prometheus
rules:
- record: job_handler:prometheus_http_requests:rate5m
expr: sum by (job, handler) (rate(prometheus_http_requests_total[5m]))
- record: job:prometheus_http_requests:rate5m
expr: sum by (job) (job_handler:prometheus_http_requests:rate5m)
- record: job:prometheus_http_requests_errors:rate5m
expr: sum by (job) (rate(prometheus_http_requests_total{code=~"5.."}[5m]))
- record: job:prometheus_http_requests_errors:ratio_rate5m
expr: |
(job:prometheus_http_requests_errors:rate5m or job:prometheus_http_requests:rate5m * 0)
/ job:prometheus_http_requests:rate5m
- record: job:prometheus_http_request_duration_seconds:p95_rate5m
expr: |
histogram_quantile(0.95,
sum by (job, le) (rate(prometheus_http_request_duration_seconds_bucket[5m])))Dans Grafana, la requête devient très simple :
# Avant : recalculé à chaque actualisation de chaque panneau
sum by (job) (rate(http_requests_total[5m]))
# Après : simple lecture de la série enregistrée
job:http_requests:rate5mLes options d'un groupe #
groups:
- name: agregats_http
interval: 30s # sinon : evaluation_interval du fichier global
query_offset: 30s # évalue un peu dans le passé, si les données arrivent en retard
limit: 1000 # échec de la règle si elle produit plus de 1000 séries
labels:
equipe: plateforme # ajouté à toutes les règles du groupe
rules:
- record: job:http_requests:rate5m
expr: sum by (job) (rate(http_requests_total[5m]))4. Bien nommer ses règles #
La convention niveau:métrique:opérations.
La convention officielle #
La documentation de Prometheus recommande le format niveau:métrique:opérations. Le nom dit ainsi ce que contient la série, sans ouvrir le fichier de règles. Les deux-points sont réservés à cet usage : les exporteurs ne doivent pas en utiliser.
| Partie | Sens | Exemple |
|---|---|---|
| niveau | Étiquettes conservées par l’agrégation | job, instance_path |
| métrique | Nom d’origine, sans le suffixe _total après un rate | http_requests |
| opérations | Opérations appliquées, la plus récente en premier | rate5m, ratio_rate5m, p95_rate5m |
5. Les pièges à éviter #
Ratios, séries absentes, ordre des opérations.
Ne jamais faire la moyenne de ratios #
Un service à 10 requêtes par seconde avec 50 % d'erreurs et un autre à 1000 requêtes par seconde avec 0 % n'ont pas 25 % d'erreurs en moyenne, mais environ 0,5 %. Enregistrez donc le numérateur et le dénominateur, puis divisez leurs sommes :
# Faux : moyenne de ratios, un petit service pèse autant qu'un gros
avg by (job) (instance:http_requests_errors:ratio_rate5m)
# Juste : on agrège le numérateur et le dénominateur séparément
sum by (job) (instance:http_requests_errors:rate5m)
/ sum by (job) (instance:http_requests:rate5m)Le ratio qui disparaît quand tout va bien #
C'est le piège le plus sournois, constaté en préparant ce chapitre. Si aucune série 5xx n'existe, le filtre ne renvoie rien, et une division par un résultat vide donne un résultat vide, pas 0. Le tableau de bord affiche « No data » : impossible alors de distinguer « aucune erreur » d'une panne de la collecte.
# Vide tant qu'aucune erreur 5xx n'a été observée
job:requests_errors:rate5m / job:requests:rate5m
# Vaut 0 quand il n'y a aucune erreur
(job:requests_errors:rate5m or job:requests:rate5m * 0) / job:requests:rate5mLes autres erreurs fréquentes #
rated'abord,sumensuite :sum(rate(x[5m])). Additionner des compteurs avant leratefausse la détection de leurs remises à zéro.- Histogrammes : gardez l'étiquette
ledans lesum by, sinonhistogram_quantilene peut rien calculer. - Trop d'étiquettes : une règle qui conserve
instanceoupodgarde presque toute la cardinalité. - Changer une règle : si l'expression change de sens, changez aussi le nom : sinon l'ancienne et la nouvelle logique se mélangent dans la même série.
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
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...
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...
Architecture
Conception globale et structurelle d'un système informatique, définissant ses différents composants, leurs relations et les principes guidant son évol...
OpenTelemetry
Framework open source fournissant des standards, APIs et SDKs pour collecter et exporter des données d'observabilité (traces, métriques, logs) de mani...
Articles recommandés
Prometheus sur Kubernetes et l'interface web de Prometheus
Déployer Prometheus sur Kubernetes avec kube-prometheus-stack (Prometheus Operator, ServiceMonito...
Les conventions sémantiques OpenTelemetry (semconv) : nommer la télémétrie
Comprendre et appliquer les conventions sémantiques OpenTelemetry : attributs de ressource, HTTP,...
Prometheus : visualiser ses métriques (UI, Grafana et dashboards)
Visualiser les données Prometheus : interface web, graphes PromQL, connexion à Grafana, dashboard...
Les types de métriques dans Prometheus
Découvrez en détail les quatre types de métriques supportés par Prometheus (Counter, Gauge, Histo...
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...
Prometheus dans le monde Kubernetes (Operator, ServiceMonitor, kube-prometheus-stack)
Superviser Kubernetes avec Prometheus : service discovery, kube-prometheus-stack, Prometheus Oper...
Métriques Dynatrace : Data Explorer, sélecteurs de métriques, API et tableaux de bord
Exploiter les métriques dans Dynatrace : métriques intégrées et personnalisées, Data Explorer, sy...
Traefik : les métriques avec Prometheus et OpenTelemetry
Exposer les métriques de Traefik (Prometheus ou OTLP), comprendre les séries par entrypoint, rout...
Observabilité sur Azure : Azure Monitor, Log Analytics, Application Insights, Prometheus et Grafana managés
Panorama complet de l'observabilité sur Azure : Azure Monitor (métriques, journaux et Log Analyti...