1. Le chart Helm mimir-distributed #
Un déploiement microservices clé en main.
Installation #
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
kubectl create namespace mimir
helm install mimir grafana/mimir-distributed -n mimir -f values.yaml# values.yaml (extrait)
mimir:
structuredConfig:
common:
storage:
backend: s3
s3:
endpoint: s3.eu-west-3.amazonaws.com
region: eu-west-3
blocks_storage:
s3: { bucket_name: acme-mimir-blocks }
ruler_storage:
s3: { bucket_name: acme-mimir-ruler }
alertmanager_storage:
s3: { bucket_name: acme-mimir-alertmanager }
limits:
max_global_series_per_user: 3000000
compactor_blocks_retention_period: 400d
minio:
enabled: false # MinIO intégré : pour les tests seulement
ingester:
replicas: 3
zoneAwareReplication: { enabled: true }
persistentVolume: { size: 50Gi }
store_gateway:
zoneAwareReplication: { enabled: true }
querier:
replicas: 3À savoir : Le chart fournit aussi un gateway nginx unique (écriture et lecture) : c'est l'URL à donner à Prometheus, Alloy et Grafana.
Bonne Pratique : Le dépôt du chart contient des fichierssmall.yamletlarge.yamldimensionnés pour environ 1 million et 10 millions de séries actives : partez de l'un d'eux.
Ordres de grandeur #
| Composant | Dimensionné selon |
|---|---|
| distributor | Échantillons/s reçus (CPU) |
| ingester | Séries actives × facteur de réplication (mémoire, ~2,5 Ko/série en ordre de grandeur) |
| querier | Nombre et complexité des requêtes (CPU, mémoire) |
| store-gateway | Nombre de blocs et taille des index (disque, mémoire) |
| compactor | Volume ingéré par jour (disque temporaire) |
2. Superviser Mimir #
Mimir surveille Mimir.
Le mixin officiel #
Le mimir-mixin fournit des dashboards Grafana (Writes, Reads, Queries, Compactor, Tenants, Overrides...), des règles d'enregistrement et des alertes avec runbooks. Le chart Helm peut les installer (metaMonitoring).
| Dashboard | Ce qu'on y lit |
|---|---|
| Mimir / Writes | Débit, latence et erreurs par composant du chemin d'écriture |
| Mimir / Reads | Latence des requêtes, taux de cache, store-gateways |
| Mimir / Tenants | Séries actives et échantillons rejetés par tenant |
| Mimir / Compactor | Dernière exécution, blocs en attente |
3. Dépanner #
Les erreurs que tout le monde rencontre.
Diagnostic rapide #
| Symptôme | Cause probable | Action |
|---|---|---|
429 ... per_user_series_limit | Limite de séries du tenant atteinte | Relever max_global_series_per_user ou réduire la cardinalité |
400 ... out of order sample | Échantillons en retard ou deux sources sans __replica__ | Vérifier les labels HA, ouvrir out_of_order_time_window |
at least 2 live replicas required | Trop d'ingesters indisponibles | Vérifier /ingester/ring, oublier les instances mortes (« Forget ») |
| Trous dans les graphes après 12 h | Store-gateway ne voit pas les blocs | Vérifier le compactor et le bucket index |
| Requêtes lentes | Caches absents ou trop petits | Déployer memcached, vérifier max_query_parallelism |
# Pages d'état utiles
curl -s http://mimir:8080/ready
curl -s http://mimir:8080/ingester/ring | head
curl -s http://mimir:8080/config | grep -A3 limits
kubectl -n mimir logs deploy/mimir-distributor | grep -i discarded