Grafana Mimir : une solution scalable pour vos métriques

Sommaire
- Qu’est-ce que Grafana Mimir ?
- Les principales fonctionnalités de Grafana Mimir
- Architecture de Grafana Mimir
- Installez Grafana Mimir avec Prometheus dans Docker
- Explorez les dashboards et configurez les règles
- Les bénéfices de l’utilisation de Grafana Mimir avec Prometheus
- Conclusion
Les métriques sont l’épine dorsale de l’observabilité IT moderne, et bien que Prometheus soit depuis longtemps un choix populaire pour collecter et interroger des métriques, il présente certaines limitations en termes d’évolutivité et de multi-tenance. Dans cet article, je vous présente Grafana Mimir, une solution avancée conçue pour répondre à ces défis.
Pour commencer, voici un cas d’utilisation concret : imaginez une plateforme de streaming vidéo mondiale nécessitant une surveillance en temps réel de millions de métriques, telles que les temps de réponse des serveurs, les erreurs d’API et l’utilisation des ressources. Prometheus seul peut avoir des difficultés à répondre à cette charge. Avec Grafana Mimir, l’évolutivité horizontale permet de distribuer la charge et de garantir une disponibilité constante pour surveiller les performances mondiales.
Dans cet article, j’explore Grafana Mimir, son architecture et ses principales fonctionnalités. Je vous propose également une démonstration pas à pas de l’installation et de la configuration de Grafana Mimir avec Docker, ainsi qu’une explication sur l’exportation des métriques de Prometheus vers Mimir.
Qu’est-ce que Grafana Mimir ?
Grafana Mimir est une base de données temporelles open source, performante et à haute évolutivité spécialement conçue pour étendre les capacités de Prometheus. Elle a été créée par Grafana Labs pour résoudre certains des problèmes courants de Prometheus, tels que :
- Horizontal scalability : Ajouter de nouveaux nœuds pour répartir la charge.
- High availability : Garantir qu’aucune métrique ne soit perdue, même en cas de panne.
- Multi-tenancy : Permettre à plusieurs équipes de travailler sur une infrastructure partagée tout en isolant leurs données.
- Long-term storage : Offrir un support intégré pour la rétention à long terme des métriques, basé sur un stockage objet comme S3 ou MinIO.
Comparatif entre Prometheus et Grafana Mimir
Fonctionnalité | Prometheus | Grafana Mimir |
---|---|---|
Scalabilité horizontale | Non | Oui |
Haute disponibilité | Limité | Intégré |
Multi-tenance | Non | Oui |
Rétention à long terme | Dépendant d’extensions externes | Intégré avec support natif |
Intégration avec Grafana | Oui | Oui |
Performance | Bonne pour des charges limitées | Optimisée pour des charges massives |
Les principales fonctionnalités de Grafana Mimir
- Vue de requêtes globale : Agrégez et interrogez des métriques provenant de plusieurs instances de Prometheus.
- Compatibilité avec l’écosystème Prometheus : Intégrez de manière transparente vos éléments avec PromQL, le langage de requêtes de Prometheus.
- Politiques de rétention : Adaptez la configuration de stockage et de rétention à vos besoins.
- Performance optimisée des requêtes : Gérez des milliards de métriques sans compromettre les performances.
Architecture de Grafana Mimir
L’architecture de Mimir est modulaire et se compose de plusieurs composants distincts :
- Distributors : Ingestent et valident les métriques entrantes.
- Ingesters : Stockent temporairement les métriques en mémoire avant de les écrire dans le stockage à long terme.
- Querier : Gère les requêtes PromQL.
- Query Frontend : Optimise les performances en distribuant les requêtes et en les mettant en cache.
- Ruler (optionnel) : Évalue les alertes et les enregistrements de règles.
- Compactor : Optimise le stockage en compressant les données.
- Store Gateway : Lit et sert les données du backend de stockage.
- Memcache : Fournit un cache distribué pour accélérer les requêtes.
- Index : Gère les métadonnées des séries temporelles.
- Chunk : Stocke les segments compressés des données de séries temporelles.
Ce design garantit une évolutivité et une résilience accrues, permettant à Mimir de traiter de gros volumes de métriques dans des environnements distribués. Dans les cas où des nœuds tombent en panne, Grafana Mimir réoriente automatiquement les requêtes et maintient un accès fiable aux métriques.
Méthodes d’installation :
Monolithique
Tous les composants sont regroupés dans une seule instance. Idéal pour des cas simples ou des tests.
Microservices
Chaque composant est déployé comme un service distinct. Parfait pour des environnements à grande échelle.
Installez Grafana Mimir avec Prometheus dans Docker
Dans cette section, nous suivons la démo officielle proposée par Grafana Labs dans le tutoriel Play with Grafana Mimir. Cette démo a été adaptée ici en français.
Les détails spécifiques de la configuration de chaque composant se trouvent dans les fichiers situés dans le dossier config
du repository git
Prérequis
- Docker et Docker Compose
- Un éditeur de texte (comme VS Code ou Vim)
Composants Docker
Dans cette démo, les services suivants seront déployés à l’aide de docker-compose
:
- Prometheus : Collecte les métriques des cibles configurées.
- Grafana : Fournit une interface graphique pour visualiser et interroger les métriques.
- Mimir : Trois instances en mode monolithique pour assurer une haute disponibilité. La multi-tenance est activée avec un tenant ID défini sur
demo
. - MinIO : Fournit un stockage objet compatible S3 pour les blocs, règles et alertes.
- Load Balancer (NGINX) : Distribue les requêtes vers les différentes instances de Mimir et expose les endpoints sur l’hôte.
Étape 1 : Télécharger les fichiers nécessaires
Clonez ou téléchargez le dépôt contenant la configuration de la démo :
git clone https://gitlab.com/neosoft-group/practice/devops/public/blog/observability/articles02-grafana-mimir-une-solution-scalable-pour-vos-metrics.git
Étape 2 : Démarrer l’environnement Docker
Une fois les fichiers téléchargés, exécutez les conteneurs Docker :
docker-compose up -d
Cette commande lance les composants suivants :
- Grafana Mimir :
- Trois instances en mode monolithique pour assurer la haute disponibilité.
- La multi-tenance est activée avec un tenant ID défini sur
demo
.
- MinIO : Stockage objet compatible S3 pour la rétention des données des métriques.
- Prometheus : Collecte les métriques de Grafana Mimir et les renvoie pour garantir leur disponibilité.
- Grafana :
- Inclut une source de données préinstallée pour interroger Grafana Mimir.
- Contient des dashboards préinstallés pour surveiller Grafana Mimir.
- Load Balancer : Basé sur NGINX pour exposer les endpoints de Grafana Mimir sur l’hôte.
Ports exposés
- Grafana : http://localhost:3000
- Grafana Mimir : http://localhost:9009
Pour en savoir plus sur la configuration de Grafana Mimir, vous pouvez consulter le fichier config/mimir.yaml
.
Étape 3 : Accéder à Grafana
Une fois les conteneurs démarrés, accédez à Grafana en ouvrant http://localhost:3000 dans votre navigateur.
Explorez les dashboards et configurez les règles
Explorez les dashboards de Grafana Mimir
Ouvrez Grafana sur votre machine locale via http://localhost:3000 pour explorer les dashboards affichant l’état et la santé de votre cluster Grafana Mimir. Les dashboards interrogent Grafana Mimir pour afficher les métriques.
Nous recommandons de commencer par explorer ces dashboards :
- Writes : État des écritures (lien)
- Reads : État des lectures (lien)
- Queries : Statistiques des requêtes (lien)
- Object Store : Données stockées (lien)
Quelques points à noter :
Comme ce tutoriel utilise Grafana Mimir sans query-scheduler ni memcached, certains panneaux liés resteront vides.
Il faut généralement quelques minutes après le démarrage de Grafana Mimir pour que les métriques apparaissent dans les dashboards.
Les dashboards préinstallés proviennent du Grafana Mimir mixin, qui intègre les meilleures pratiques de Grafana Labs pour les dashboards, règles d’enregistrement et alertes. Pour plus de détails, consultez la documentation Grafana Mimir mixin.
Configurez votre première règle d’enregistrement
Les règles d’enregistrement permettent de pré-calculer des expressions fréquemment utilisées ou coûteuses et de sauvegarder leurs résultats comme de nouvelles séries temporelles. Voici comment configurer une règle d’enregistrement dans Grafana Mimir :
1. Ouvrez Grafana Alerting.
2. Cliquez sur New recording rule.
3. Configurez la règle :
- Nom :
sum:up
- Data source :
Mimir
- Builder | Code : Sélectionnez
Code
- Query :
sum(up)
- Namespace :
example-namespace
- Group :
example-group
4. Cliquez sur Save and exit.
Cette règle affichera le nombre d’instances Mimir actives. Vérifiez son résultat dans Grafana Explore :
sum:up
Configurez votre première règle d’enregistrement
Les règles d’alerte définissent des conditions basées sur des expressions PromQL et envoient des notifications en cas de déclenchement. Pour créer une règle d’alerte :
1. Ouvrez Grafana Alerting.
2. Cliquez sur New alert rule.
3. Configurez la règle :
- Nom :
MimirNotRunning
- Query :
count(up == 0)
- Folder :
example-folder
- Group :
example-group
- Interval :
30s
4. Configurez les notifications via un Contact point (par défaut grafana-default-email
).
5. Cliquez sur Save rule and exit.
Votre règle d’alerte MimirNotRunning
a maintenant été créée dans le Grafana Mimir ruler. Elle est conçue pour se déclencher si le nombre d’instances Grafana Mimir passe en dessous de trois. Vous pouvez vérifier son état en accédant à la page Grafana Alerting et en développant la ligne example-namespace > example-group
. L’état devrait être « Normal » puisque les trois instances fonctionnent.
Tester l’alerte avec une panne simulée
Pour observer le déclenchement de l’alerte, introduisons une panne dans le cluster Grafana Mimir :
1. Arrêtez abruptement une des trois instances Grafana Mimir :
docker-compose kill mimir-3
Accédez à la page Grafana Alerting et observez l’état de l’alerte MimirNotRunning
. Elle devrait passer à l’état « Pending » au bout d’environ une minute, puis à « Firing » après une autre minute.
Note : En raison de l’arrêt abrupt d’une instance, l’interface Grafana Alerting peut temporairement afficher une erreur lors de la requête des règles. Cette erreur se résoudra automatiquement dès que le système interne de vérification de santé de Grafana Mimir détectera l’instance arrêtée comme défaillante. Nous explorerons en détail Grafana Alerting et les tests avancés dans un prochain article.
Vérifiez les métriques et restaurez le service
Avant de réactiver l’instance arrêtée, accédez à la page Grafana Explore et interrogez votre règle d’enregistrement sum:up
. Vous devriez constater que la valeur a diminué à 2, indiquant que l’une des instances est hors ligne. Vous remarquerez également que l’interrogation de cette règle et d’autres métriques continue de fonctionner malgré la panne d’une instance, démontrant la résilience de Grafana Mimir dans un déploiement haute disponibilité.
Pour restaurer l’instance arrêtée et résoudre l’alerte :
1. Redémarrez l’instance Grafana Mimir :
docker-compose start mimir-3
2. Accédez à la page Grafana Alerting et vérifiez l’état de l’alerte MimirNotRunning
. L’état devrait revenir à « Normal » au bout de 30 secondes.
Les bénéfices de l’utilisation de Grafana Mimir avec Prometheus
- Évolutivité horizontale : Ajoutez des nœuds pour gérer une charge accrue.
- Stockage à long terme : Conservez des métriques pendant plusieurs années.
- Multi-tenance : Partagez votre infrastructure entre plusieurs équipes tout en isolant leurs données.
- Disponibilité élevée : Pas de perte de métriques même en cas de panne.
Conclusion
Grafana Mimir est une solution puissante pour répondre aux limites de Prometheus dans des environnements complexes et distribués. Avec son architecture modulaire et sa capacité à évoluer horizontalement, elle offre une base solide pour gérer et interroger des milliards de métriques.
En suivant la démo officielle, vous pouvez facilement démarrer avec Grafana Mimir et découvrir son potentiel dans vos projets d’observabilité.
Pour toute demande d’information supplémentaire sur Grafana Mimir ou pour organiser une démonstration sur un environnement plus complexe, n’hésitez pas à nous contacter.
Ressources complémentaires :
Documentation officielle de Grafana Mimir
Play with Grafana Mimir (Tutoriel officiel)
Référentiel GitHub de Grafana Mimir
Prometheus