1. Les limites de Prometheus #
Ce que Thanos résout.
Trois besoins #
| Besoin | Prometheus seul | Avec Thanos |
|---|---|---|
| Rétention longue | Disque local, quelques semaines/mois | Années, dans un stockage objet bon marché |
| Haute disponibilité | Deux instances identiques mais deux jeux de données | Déduplication à la lecture : une seule vue |
| Vue globale | Une requête = un serveur | Une requête PromQL sur tous les clusters |
| Coût | SSD, croît avec la rétention | Objet + downsampling |
2. Les composants #
Une boîte à outils modulaire.
Rôles #
| Composant | Rôle | Commande |
|---|---|---|
| Sidecar | Accolé à Prometheus : expose ses données et téléverse les blocs | thanos sidecar |
| Query | Reçoit le PromQL, interroge les StoreAPI, déduplique | thanos query |
| Query Frontend | Découpe et met en cache les requêtes de plage | thanos query-frontend |
| Store Gateway | Sert les blocs historiques du stockage objet | thanos store |
| Compactor | Compacte, downsample, applique la rétention | thanos compact |
| Ruler | Évalue règles et alertes sur la vue globale | thanos rule |
| Receive | Reçoit du remote write (alternative au sidecar) | thanos receive |
3. Sidecar ou Receive ? #
Deux façons d'alimenter Thanos.
Choisir son modèle #
| Critère | Sidecar | Receive |
|---|---|---|
| Principe | Pull : Thanos lit les blocs locaux de Prometheus | Push : Prometheus envoie en remote write |
| Réseau | Accès gRPC vers chaque Prometheus | Un seul point d'entrée ; clusters isolés |
| Latence de données récentes | Directe via StoreAPI | Après réception et réplication |
| Multi-tenant | Non | Oui (en-tête de tenant) |
| Complexité | Faible | Plus élevée (hashring, réplication) |
Bonne Pratique : Commencez par Sidecar + Query + Store + Compactor : c'est le modèle le plus simple, éprouvé, qui couvre la rétention, la HA et la vue globale.
Premier aperçu en ligne de commande #
thanos --version
thanos --help # liste des sous-commandes
thanos sidecar --help | head -30
# Chaque composant expose /-/healthy, /-/ready et /metrics sur son port HTTP (10902 par défaut)