1. L'interface native de Prometheus #
Un outil d'exploration.
Que permet l'UI Prometheus ? #
L'interface web de Prometheus (port 9090) est conçue pour explorer : tester une requête PromQL, vérifier l'état des cibles (Status > Targets), consulter les règles et les alertes. Elle n'est pas faite pour construire des tableaux de bord durables : pour cela on utilise Grafana.
# Vérifications rapides en ligne de commande
curl -s http://localhost:9090/-/healthy
curl -s 'http://localhost:9090/api/v1/targets' | jq '.data.activeTargets[] | {job: .labels.job, health: .health}'
curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result[] | {instance: .metric.instance, up: .value[1]}'
curl -s 'http://localhost:9090/api/v1/query_range?query=rate(node_cpu_seconds_total[5m])&start=2026-10-18T08:00:00Z&end=2026-10-18T09:00:00Z&step=60'2. Connecter Grafana à Prometheus #
Une stack complète en 2 minutes.
Docker Compose et provisioning #
# docker-compose.yml
services:
prometheus:
image: prom/prometheus:latest
ports: ["9090:9090"]
volumes: ["./prometheus.yml:/etc/prometheus/prometheus.yml"]
node-exporter:
image: prom/node-exporter:latest
ports: ["9100:9100"]
grafana:
image: grafana/grafana:latest
ports: ["3000:3000"]
volumes: ["./provisioning:/etc/grafana/provisioning"]# provisioning/datasources/prometheus.yml
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
isDefault: true
jsonData: { timeInterval: 15s }docker compose up -d
# Grafana : http://localhost:3000 (admin / admin) -> Explore -> Prometheus3. Construire de bons tableaux de bord #
Les méthodes RED et USE.
La méthode USE pour les ressources #
Utilisation, Saturation, Erreurs : à appliquer à chaque ressource (CPU, mémoire, disque, réseau).
# Utilisation CPU (%)
100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[$__rate_interval])) * 100
# Saturation CPU (charge par cœur)
node_load1 / count by (instance) (node_cpu_seconds_total{mode="idle"})
# Mémoire utilisée (%)
(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
# Utilisation disque (%)
100 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes * 100)
# Débit réseau (octets/s)
sum by (instance) (rate(node_network_receive_bytes_total{device!="lo"}[$__rate_interval]))La méthode RED pour les services #
Rate (requêtes/s), Errors (taux d'erreur), Duration (latence) : à appliquer à chaque service.
# Rate
sum by (service) (rate(http_requests_total[$__rate_interval]))
# Errors (%)
100 * sum by (service) (rate(http_requests_total{status=~"5.."}[$__rate_interval]))
/ sum by (service) (rate(http_requests_total[$__rate_interval]))
# Duration p95
histogram_quantile(0.95, sum by (le, service) (rate(http_request_duration_seconds_bucket[$__rate_interval])))Variables et import de dashboards #
# Variable "instance" (Dashboard settings > Variables > Query)
label_values(node_uname_info, nodename)
# Utilisation dans un panneau : node_load1{instance=~"$instance"}
# Importer le dashboard communautaire "Node Exporter Full" (ID 1860)
# Dashboards > New > Import > 1860 > choisir la source PrometheusBonne Pratique : Utilisez$__rate_intervalplutôt qu'une fenêtre fixe comme[5m]: Grafana l'adapte à la résolution du graphe et à l'intervalle de scrape.
Erreur Courante : Éviter les panneaux qui agrègent des centaines de séries à haute cardinalité : le navigateur et Prometheus saturent. Filtrez par variable et utilisez topk(10, ...).