RousselTMLEARNING

Article · Thanos : de la découverte à l'expertise

Thanos Query et Query Frontend

1. Thanos Query #

Le point d'entrée PromQL.

Lancer Query #

Thanos Query expose l'API HTTP de Prometheus : Grafana s'y connecte comme à un Prometheus classique. À chaque requête, il interroge en parallèle tous ses endpoints StoreAPI (sidecars, Store Gateway, Receive, autres Query) et fusionne les résultats.

thanos query \
  --http-address=0.0.0.0:10902 \
  --grpc-address=0.0.0.0:10903 \
  --endpoint=sidecar-a:10901 \
  --endpoint=sidecar-b:10901 \
  --endpoint=store:10901 \
  --query.replica-label=replica \
  --query.auto-downsampling
# Docker Compose (extrait)
  query:
    image: quay.io/thanos/thanos:latest
    command:
      - query
      - --http-address=0.0.0.0:10902
      - --endpoint=sidecar:10901
      - --endpoint=store:10901
      - --query.replica-label=replica
    ports: ["10902:10902"]

2. La déduplication #

Haute disponibilité sans doublons.

Replica label #

Déduplication par replica label
Le label replica est retiré pour comparer les séries.

Thanos Query traite comme équivalentes les séries qui ne diffèrent que par le --query.replica-label. Si l'une des deux a un trou (redémarrage, panne), l'autre le comble : c'est ce qui donne la haute disponibilité des données.

# Dans l'interface Query : activer/désactiver "Use Deduplication" et comparer
count(up{job="node"})                  # avec dédup : 1 série par instance
# sans dédup : 2 séries (replica=A et replica=B)

# Plusieurs labels de réplicas (par ex. Prometheus + Operator)
thanos query --query.replica-label=replica --query.replica-label=prometheus_replica

3. Exploiter l'interface et l'API #

Stores, requêtes et diagnostic.

Interface web et API #

# http://localhost:10902  ->  Graph, Stores (état de chaque endpoint), Alerts, Config

# API compatible Prometheus
curl -s 'http://localhost:10902/api/v1/query?query=up' | jq '.data.result | length'
curl -s 'http://localhost:10902/api/v1/stores' | jq '.data | keys'

# Réponse partielle autorisée si un store est indisponible (par défaut) ou refusée
curl -s 'http://localhost:10902/api/v1/query?query=up&partial_response=false'

# Choisir la résolution (downsampling) : max_source_resolution en ms
curl -s 'http://localhost:10902/api/v1/query_range?query=up&start=...&end=...&step=3600&max_source_resolution=3600000'
Erreur Courante : Une partial response peut masquer l'absence d'un cluster entier : surveillez la page Stores et alertez sur thanos_store_nodes_grpc_connections.

4. Query Frontend #

Cache et parallélisation.

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.max-retries-per-request=5 \
  --query-frontend.log-queries-longer-than=5s \
  --query-range.response-cache-config-file=/etc/thanos/cache.yml
# cache.yml
type: IN-MEMORY
config:
  max_size: 512MB
  max_size_items: 0
  validity: 10m
Bonne Pratique : Faites pointer Grafana vers le Query Frontend (et non directement vers Query) : les requêtes de plage sont découpées par jour, exécutées en parallèle et mises en cache.

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

Mon suivi

  • ⏱ Durée estimée : ≈ 9 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Questions sur cette leçon

Aucune question pour l'instant : soyez le premier à demander de l'aide ou à partager votre configuration.

Poser une question sur cette leçon →

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 Thanos : architecture, stockage, requêtes et exploitation

Bonnes pratiques Thanos : adopter les composants progressivement, labels externes, objstore, comp...

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...

Mimir : le chemin de lecture (query-frontend, querier, store-gateway et caches)

Comment Mimir répond à une requête PromQL : découpage et cache du query-frontend, file d'attente,...

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), configurati...

Thanos Store Gateway et Compactor : historique, downsampling et rétention

Servir l'historique avec le Store Gateway et optimiser le stockage avec le Compactor : compaction...

Déployer Thanos sur Kubernetes (kube-prometheus-stack, Helm et Operator)

Installer Thanos sur Kubernetes : sidecar via kube-prometheus-stack, secret objstore, Bitnami/kub...

Thanos, Grafana Mimir ou VictoriaMetrics : quel stockage long terme pour Prometheus ?

Comparatif détaillé de trois solutions de stockage long terme pour Prometheus : architecture, sto...

Thanos Receive : ingérer du remote write et gérer le multi-tenant

Utiliser Thanos Receive : mode push avec remote write, hashring, réplication, multi-tenancy, conf...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !