1. Concevoir de bonnes métriques #
Nommage et labels.
Conventions #
| Règle | Exemple correct | Exemple à éviter |
|---|---|---|
| Unités de base | http_request_duration_seconds | request_time_ms |
Compteurs en _total | http_requests_total | http_requests_count |
| Préfixe d'application | shop_orders_created_total | orders |
| Un nom, plusieurs labels | http_requests_total{method="GET"} | http_get_requests_total |
| Labels à faible cardinalité | status="500", route="/orders" | user_id="4821", url="/orders/9921" |
Erreur Courante : Chaque combinaison unique de labels est une série temporelle stockée en mémoire. Un label commeuser_idourequest_idpeut multiplier le nombre de séries par des millions.
Détecter les problèmes de cardinalité #
# Séries les plus nombreuses par métrique
topk(10, count by (__name__) ({__name__=~".+"}))
prometheus_tsdb_head_series
rate(prometheus_tsdb_head_series_created_total[1h])
curl -s localhost:9090/api/v1/status/tsdb | jq '.data.seriesCountByMetricName[:5]'
promtool tsdb analyze /prometheus | head -402. Collecte et règles #
Scrape, relabeling et recording rules.
prometheus.yml #
global:
scrape_interval: 30s # un seul intervalle commun ; 15 s si nécessaire
evaluation_interval: 30s
external_labels: { cluster: prod-eu, replica: A }
scrape_configs:
- job_name: api
scrape_timeout: 10s
sample_limit: 20000 # protège contre une explosion de séries
label_limit: 30
static_configs: [{ targets: ["api-1:8080", "api-2:8080"] }]
metric_relabel_configs:
- { source_labels: [__name__], regex: "go_gc_.*|go_memstats_.*", action: drop } # supprimer le bruit à la source
- { regex: "session_id", action: labeldrop }Recording rules #
groups:
- name: api.rules
interval: 30s
rules:
- record: job:http_requests:rate5m
expr: sum by (job) (rate(http_requests_total[5m]))
- record: job:http_errors:ratio_rate5m
expr: sum by (job) (rate(http_requests_total{status=~"5.."}[5m])) / sum by (job) (rate(http_requests_total[5m]))promtool check config prometheus.yml && promtool check rules rules/*.yml
curl -s localhost:8080/metrics | promtool check metrics # linter de métriques (nommage)
promtool test rules tests/*.yml3. Alertes utiles #
Symptômes plutôt que causes.
Règles d'or #
- Alertez sur ce que l'utilisateur ressent (erreurs, latence, saturation) plutôt que sur chaque cause (CPU à 80 %).
- Utilisez
for:pour éviter les alertes sur des pics brefs ; ajoutez une description et un lien vers un runbook. - Chaque alerte doit déclencher une action : sinon, supprimez-la ou transformez-la en tableau de bord.
- alert: ApiHighErrorRate
expr: job:http_errors:ratio_rate5m{job="api"} > 0.05
for: 10m
labels: { severity: critical, team: backend }
annotations:
summary: "Plus de 5 % d'erreurs sur {{ $labels.job }}"
runbook_url: https://wiki.exemple.fr/runbooks/api-errors
- alert: Watchdog
expr: vector(1) # doit toujours être active : vérifie la chaîne d'alerte4. Stockage, haute disponibilité et sécurité #
Exploiter durablement.
Dimensionnement et HA #
# espace ≈ rétention (s) × échantillons/s × ~1,5 octet
rate(prometheus_tsdb_head_samples_appended_total[2h])
prometheus --storage.tsdb.retention.time=30d --storage.tsdb.retention.size=200GB --storage.tsdb.wal-compression
du -sh /prometheus; curl -s localhost:9090/api/v1/status/runtimeinfo | jq '.data.storageRetention'- HA : deux Prometheus identiques (label
replicadifférent) + Alertmanager en cluster ; déduplication avec Thanos/Mimir. - Long terme :
remote_writevers Mimir, Thanos Receive ou VictoriaMetrics ; rétention locale courte. - Sécurité : TLS et authentification basique via
--web.config.file, API admin désactivée si inutile.
# web.yml
tls_server_config: { cert_file: /etc/prometheus/tls.crt, key_file: /etc/prometheus/tls.key }
basic_auth_users: { admin: "$2y$10$..." }
prometheus --web.config.file=/etc/prometheus/web.ymlSchéma de référence et vérification rapide #
Visualiser le principe et le contrôler en ligne de commande.
Schéma de référence #
topk(10, count by (__name__) ({__name__=~".+"}))Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
💬 Discussions récentes de la formation
- Prometheus consomme 12 Go de RAM : comment trouver les métriques coupables ?✓ résolu · 2 réponse(s)
- PromQL : quelle différence entre rate() et irate() ?✓ résolu · 1 réponse(s)
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...
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
Thanos : étendre Prometheus (haute disponibilité, vue globale et rétention longue)
Comprendre pourquoi et comment utiliser Thanos : limites de Prometheus, composants (Sidecar, Quer...
Bonnes pratiques d'alerting : Prometheus, Alertmanager et astreinte
Check-list pour un alerting efficace : règles sur les symptômes, sévérités, routage par équipe, r...
Prometheus sur Kubernetes et l'interface web de Prometheus
Déployer Prometheus sur Kubernetes avec kube-prometheus-stack (Prometheus Operator, ServiceMonito...
Haute disponibilité et exploitation d'Alertmanager
Monter un cluster Alertmanager hautement disponible (gossip), configurer Prometheus pour tous les...
Générer ses SLO Prometheus avec Sloth
Décrire un SLO en quelques lignes avec Sloth et générer automatiquement règles d'enregistrement m...
Thanos Ruler : règles et alertes sur la vue globale
Évaluer des règles d'enregistrement et d'alerte sur l'ensemble des clusters avec Thanos Ruler : c...
Bonnes pratiques Thanos : architecture, stockage, requêtes et exploitation
Bonnes pratiques Thanos : adopter les composants progressivement, labels externes, objstore, comp...
Traefik : les métriques avec Prometheus et OpenTelemetry
Exposer les métriques de Traefik (Prometheus ou OTLP), comprendre les séries par entrypoint, rout...
Prometheus dans le monde Kubernetes (Operator, ServiceMonitor, kube-prometheus-stack)
Superviser Kubernetes avec Prometheus : service discovery, kube-prometheus-stack, Prometheus Oper...