RousselTMLEARNING

Observabilité

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, queriers, store-gateway, index-headers et caches memcached.

1. Le parcours d'une requête #

Du dashboard aux blocs.

Schéma #

Chemin de lecture
Une requête sur 7 jours devient 7 sous-requêtes d'un jour exécutées en parallèle.
  1. Grafana envoie une requête PromQL à /prometheus/api/v1/query_range.
  2. Le query-frontend la découpe par intervalle de temps (24 h par défaut) et, si possible, par shard ; il sert depuis son cache les morceaux déjà calculés.
  3. Les sous-requêtes passent par la file du query-scheduler, qui garantit l'équité entre tenants.
  4. Un querier évalue chaque sous-requête : il lit les données récentes dans les ingesters et l'historique via les store-gateways.
  5. Le query-frontend assemble les résultats et les met en cache.

Qui sert quelles données ? #

ParamètreDéfautEffet
querier.query_store_after12hAu-delà, le querier interroge les store-gateways
querier.query_ingesters_within13hEn deçà, il interroge les ingesters
blocks_storage.tsdb.retention_period13hDurée pendant laquelle l'ingester garde ses blocs localement
Erreur Courante : Ces trois valeurs sont liées. Si vous réduisez la rétention locale des ingesters sans réduire query_ingesters_within, une partie des données récentes devient invisible.

2. Store-gateway et caches #

Lire le stockage objet sans le saturer.

Le store-gateway #

Le store-gateway ne télécharge pas les blocs entiers : il garde localement un index-header (une petite partie de l'index de chaque bloc) et ne lit à distance que les portions utiles. Les blocs sont répartis entre store-gateways via leur propre ring, avec réplication (3 par défaut).

Il s'appuie sur le bucket index, un fichier par tenant maintenu par le compactor qui liste les blocs : inutile de lister le bucket à chaque requête.

Les quatre caches #

CacheUtilisé parContenu
resultsquery-frontendRésultats de sous-requêtes
indexstore-gatewayPostings et séries de l'index
chunksstore-gatewayMorceaux de données
metadatastore-gateway, querier, compactorListes de blocs, méta-données
blocks_storage:
  bucket_store:
    index_cache:
      backend: memcached
      memcached: { addresses: dns+memcached-index.mimir.svc:11211 }
    chunks_cache:
      backend: memcached
      memcached: { addresses: dns+memcached-chunks.mimir.svc:11211 }
    metadata_cache:
      backend: memcached
      memcached: { addresses: dns+memcached-metadata.mimir.svc:11211 }
frontend:
  results_cache:
    backend: memcached
    memcached: { addresses: dns+memcached-results.mimir.svc:11211 }
  cache_results: true
Bonne Pratique : En production, les caches font souvent la différence entre une requête de 30 s et une requête de 300 ms. Le chart Helm sait déployer les quatre memcached.

3. Protéger le chemin de lecture #

Limites de requêtes.

Limites utiles #

LimiteRôle
max_fetched_series_per_queryPlafonne le nombre de séries lues par requête
max_fetched_chunk_bytes_per_queryPlafonne le volume de données lues
max_total_query_lengthPlafonne la plage de temps d'une requête
max_query_parallelismNombre de sous-requêtes exécutées en parallèle par tenant
max_queriers_per_tenantShuffle sharding : isole un tenant bruyant sur un sous-ensemble de queriers

Ces limites se règlent globalement dans limits et par tenant dans la configuration d'exécution (voir la leçon sur le multi-tenant).

Articles liés

La stack LGTM (Loki, Grafana, Tempo, Mimir) : architecture et mise en place

Comprendre la stack LGTM de Grafana Labs : Loki pour les logs, Grafana pour la visualisation, Tempo pour les …

Pourquoi Grafana Mimir ? Architecture et modes de déploiement

Les limites de Prometheus seul, ce qu'apporte Mimir (stockage long terme, haute disponibilité, multi-tenant),…

Mimir : le chemin d'écriture (distributor, ingesters, réplication et déduplication HA)

Comment Mimir ingère les métriques : remote_write, validation et limites du distributor, hash ring, réplicati…

Pour aller plus loin

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 !