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