1. Concevoir l'architecture #
Progressivité et identité.
Principes #
- 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 : utilisezthanos tools bucket market 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=500000Bonne 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 revue | Ré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 #
count(up{job="prometheus"}) by (cluster) # 1 avec déduplication
thanos tools bucket inspect --objstore.config-file=bucket.yml | head