RousselTMLEARNING

Observabilité

Bonnes pratiques Thanos : architecture, stockage, requêtes et exploitation

Bonnes pratiques Thanos : adopter les composants progressivement, labels externes, objstore, compactor unique, downsampling, caches, Query Frontend, sécurité, supervision et checklist de production.

1. Concevoir l'architecture #

Progressivité et identité.

Principes #

Bonnes pratiques Thanos
Chaque composant ajoute de la valeur mais aussi de l'exploitation : adoptez-les au besoin.
  • Démarrez par Sidecar + Query + Store Gateway + Compactor ; ajoutez Ruler, Receive ou Query Frontend quand un besoin l'exige.
  • external_labels uniques et immuables (cluster, replica) : les changer revient à créer de nouvelles séries.
  • Un bucket par environnement, avec versioning et chiffrement activés.
thanos tools bucket ls --objstore.config-file=bucket.yml
thanos tools bucket inspect --objstore.config-file=bucket.yml | head
curl -s localhost:10902/api/v1/stores | jq '.data | keys'

2. Stockage et compaction #

Un compactor, des rétentions réfléchies.

Réglages #

thanos compact --data-dir=/var/thanos/compact --objstore.config-file=/etc/thanos/bucket.yml --wait \
  --retention.resolution-raw=30d --retention.resolution-5m=180d --retention.resolution-1h=730d \
  --compact.concurrency=2 --delete-delay=48h --deduplication.replica-label=replica
  • Une seule instance de compactor par bucket (verrou logique).
  • Rétention brute courte (30 j), 5 min et 1 h plus longues : le downsampling réduit coût et temps de requête.
  • Dimensionnez le disque temporaire du compactor : il doit contenir les plus gros blocs en cours de compaction.
Erreur Courante : Ne supprimez jamais de blocs à la main dans le bucket : utilisez thanos tools bucket mark et laissez le compactor appliquer le --delete-delay.

3. Requêtes rapides #

Query Frontend, caches et limites.

Configuration #

thanos query-frontend --http-address=0.0.0.0:9090 --query-frontend.downstream-url=http://query:10902 \
  --query-range.split-interval=24h --query-range.response-cache-config-file=/etc/thanos/cache.yml
thanos query --query.auto-downsampling --query.max-concurrent=20 --query.timeout=2m --store.response-timeout=30s
thanos store --index-cache.config-file=/etc/thanos/index-cache.yml --store.limits.request-series=500000
Bonne Pratique : Utilisez des recording rules pour les requêtes de dashboard lourdes : elles évitent de scanner des mois de données brutes à chaque affichage.

4. Sécurité, supervision et revue #

Prêt pour la production.

Alertes essentielles #

thanos_compact_halted == 1
increase(thanos_shipper_uploads_failed_total[1h]) > 0
thanos_sidecar_prometheus_up == 0
count(thanos_store_nodes_grpc_connections) < 3
rate(grpc_server_handled_total{grpc_code!="OK", job=~"thanos-.*"}[5m]) > 0.05
Question de revueRéponse attendue
Un seul compactor écrit-il dans le bucket ?Oui
Les external_labels sont-ils uniques ?Oui, cluster + replica
Les composants communiquent-ils en TLS ?Oui (flags --grpc-server-tls-*)
La restauration a-t-elle été testée ?Oui : lecture d'un bloc ancien via Store
Les droits sur le bucket sont-ils minimaux ?Lecture/écriture limitées au préfixe de l'environnement

Sché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 #

Haute disponibilité Thanos
Le compactor déduplique aussi les blocs dans le bucket.
count(up{job="prometheus"}) by (cluster)       # 1 avec déduplication
thanos tools bucket inspect --objstore.config-file=bucket.yml | head

Articles liés

Thanos : étendre Prometheus (haute disponibilité, vue globale et rétention longue)

Comprendre pourquoi et comment utiliser Thanos : limites de Prometheus, composants (Sidecar, Query, Store Gat…

Thanos Sidecar : accoler Thanos à Prometheus et téléverser vers le stockage objet

Mettre en place Thanos Sidecar : réglages Prometheus (external labels, blocs de 2 h), configuration objstore,…

Thanos Query et Query Frontend : une vue globale et dédupliquée

Configurer Thanos Query : endpoints StoreAPI, déduplication par replica label, partial response, interface we…

Pour aller plus loin