Grafana est une plateforme d’observabilité de pointe pour la visualisation des métriques. Elle vous permet de créer des tableaux de bord sur mesure pour obtenir des informations significatives à partir des flux de données en temps réel de votre application.

Grafana est une application native du cloud qui peut être lancée sur les fournisseurs d’infrastructure les plus courants, installée sur votre propre matériel ou déployée en tant que conteneur autonome. Dans ce guide, nous nous concentrerons sur ce dernier choix en utilisant l’image Grafana officielle pour démarrer une instance qui fonctionne dans Docker.

Mise en route

La création la plus simple d’un conteneur Grafana ressemble à ceci :

docker run -d –name=grafana -p 3000:3000 grafana/grafana

Vous aurez un nouveau serveur Grafana accessible sur le port 3000. Visitez http://localhost:3000 et connectez-vous en tant qu’admin/admin.

Vous pouvez maintenant commencer à ajouter des sources de données et des tableaux de bord pour créer vos visualisations. Appuyez sur le bouton « Add your first data source » (Ajouter votre première source de données) sur la page d’accueil pour connecter une nouvelle source ; sélectionnez le type de fournisseur sur l’écran suivant, puis remplissez les détails pour que Grafana puisse accéder à vos données.

Revenez ensuite à la page d’accueil et cliquez sur « Créer votre premier tableau de bord ». Choisissez votre type de visualisation préféré, puis utilisez le volet de requête pour sélectionner les métriques appropriées à partir de vos données. Une fois que vous avez terminé, votre nouvelle visualisation s’affiche sur votre tableau de bord.

Cette procédure démontre la facilité avec laquelle vous pouvez démarrer une instance de test Grafana jetable. L’exécution d’un conteneur prêt pour la production nécessite cependant un peu plus de réflexion. Voici une approche plus complète qui est mieux équipée pour une utilisation à long terme.

Pour aller plus loin : Utiliser Hadolint pour lint vos Dockerfiles

Sélection d’une variante d’image

Grafana utilise un modèle commercial à double licence. L’édition open-source est publiée sous le nom de grafana/grafana sur Docker Hub tandis que Enterprise est grafana/grafana-enterprise. Les instructions suivantes fonctionneront avec ces deux variantes de premier niveau.

Plusieurs versions de Grafana sont disponibles, chacune en version Alpine ou Ubuntu. Alpine devrait être préférée dans la plupart des situations de déploiement : elle est plus fine et se concentre sur la fourniture d’un environnement compatible avec Grafana sans aucun supplément superflu.

Le système d’exploitation est sélectionné en ajoutant son nom après la version de Grafana dans une balise image :

grafana/grafana:8.3.0-ubuntu

Il est toujours préférable d’épingler une version spécifique afin de ne pas recevoir involontairement des changements de rupture lorsque de nouvelles mises à jour sont publiées. En omettant le nom du système d’exploitation (grafana/grafana:8.3.0), vous obtiendrez la variante Alpine de la version sélectionnée.

Création d’un conteneur

Grafana a des exigences de déploiement relativement simples. Vous devez monter un volume Docker pour stocker vos données persistantes et lier un port hôte pour pouvoir accéder au service. Les paramètres peuvent être fournis en montant un fichier de configuration dans le conteneur ou en injectant des variables d’environnement.

docker run -d –name grafana -p 9000:3000 \
-v grafana-data:/var/lib/grafana
grafana/grafana:8.3.0

Cet exemple démarre un nouveau conteneur Grafana appelé grafana qui écoute sur le port 9000 de votre hôte Docker. Le port est lié à 3000 dans le conteneur car il s’agit de l’adresse d’écoute par défaut de Grafana.

Un volume Docker appelé grafana-data est référencé par l’indicateur -v. Il est monté sur /var/lib/grafana dans le conteneur, où Grafana stocke toutes ses données générées. Le montage du volume signifie que le contenu du répertoire sera stocké en dehors du conteneur, évitant ainsi la perte de données lorsque le conteneur s’arrête ou que votre hôte redémarre.

Injection de la configuration

Vous pouvez remplacer les clés de configuration de Grafana en définissant des variables d’environnement lorsque vous démarrez votre conteneur. Vous pouvez modifier n’importe quelle clé dans les fichiers de configuration au format INI de Grafana en mettant en majuscule le nom de la clé et en ajoutant GF_ :

Fichier INI

nom_instance = mon-grafana

security
admin_user = demo
admin_password = grafana


Variables d’environnement correspondantes

GF_DEFAULT_INSTANCE_NAME=my-grafana
GF_SECURITY_ADMIN_USER=demo
GF_SECURITY_ADMIN_PASSWORD=grafana

Veillez à inclure le nom implicite de la section DEFAULT lorsque vous modifiez la valeur d’une variable de niveau supérieur dans le fichier de configuration.

Une fois que vous avez déterminé les valeurs que vous souhaitez modifier, fournissez les variables d’environnement correctes avec les drapeaux -e lorsque vous démarrez votre conteneur :

docker run -d –name grafana -p 9000:3000 \
-e GF_DEFAULT_INSTANCE_NAME=my-grafana
-e GF_SECURITY_ADMIN_USER=demo
-e GF_SECURITY_ADMIN_PASSWORD=grafana
-v grafana-data:/var/lib/grafana
grafana/grafana:8.3.0

Grafana prend également en charge la configuration basée sur des fichiers. Avec ce mécanisme, la valeur de la variable d’environnement cible devient le chemin d’un fichier disponible à l’intérieur du conteneur.

À lire également : Comment déployer PostgreSQL en tant que conteneur Docker

Grafana obtiendra la valeur réelle du paramètre en lisant le fichier.

Pour utiliser cette approche, modifiez toute variable d’environnement en ajoutant le suffixe __FILE à son nom courant :

docker run -d –name grafana -p 9000:3000 \
-e GF_DEFAULT_INSTANCE_NAME=my-grafana
-e GF_SECURITY_ADMIN_USER=demo
-e GF_SECURITY_ADMIN_PASSWORD__FILE=/run/secrets/password
-v grafana-data:/var/lib/grafana
grafana/grafana:8.3.0

Vous pouvez ajouter le fichier au conteneur en utilisant un montage bind (-v ./password.txt:/run/secrets/password) ou un système de gestion des secrets dédié tel que Docker Secrets. La configuration basée sur des fichiers offre un moyen plus sûr d’injecter des valeurs sensibles que vous ne souhaitez pas exposer en texte brut dans les journaux des tâches CI et dans l’historique de votre shell.

Remplacer le fichier de configuration

Vous pouvez toujours remplacer le fichier de configuration sur disque de Grafana si vous modifiez trop de valeurs pour que les variables d’environnement soient pratiques.

L’image Docker localise ce fichier à /etc/grafana/grafana.ini. Vous pouvez monter un remplacement vers le chemin attendu en utilisant un montage Docker bind :

docker run -d –name grafana -p 9000:3000 .
-v ./grafana.ini:/etc/grafana/grafana.ini
-v grafana-data:/var/lib/grafana
grafana/grafana:8.3.0

L’utilisation d’un fichier de configuration facilite l’injection de paramètres plus compliqués. Vous pouvez interpoler des variables pour construire des valeurs dynamiques. Les fichiers de configuration supportent également les commentaires qui vous permettent de documenter vos intentions pour aider les futurs mainteneurs.

Gestion des plugins

De nombreuses installations de Grafana nécessitent des plugins qui ajoutent des sources de données supplémentaires ou fournissent des panneaux de tableau de bord prédéfinis. L’image Docker comprend un utilitaire d’aide qui vous permet d’ajouter des plugins à un nouveau conteneur en définissant une variable d’environnement spéciale.

Voici comment ajouter un plugin officiel répertorié dans le catalogue Grafana :

docker run -d –name grafana -p 9000:3000 \
-e GF_INSTALL_PLUGINS=grafana-simple-json-datasource
-v grafana-data:/var/lib/grafana
grafana/grafana:8.3.0

La variable GF_INSTALL_PLUGINS attend une liste de noms de plugins, séparés par des virgules, à installer au premier démarrage du conteneur. Les noms seront transmis à la commande grafana-cli plugins install. Cela signifie que vous pouvez inclure des expressions de version, telles que grafana-simple-json-datasource 1.1.0, et référencer les plugins communautaires via leur URL :

docker run -d –name grafana -p 9000:3000 .
-e GF_INSTALL_PLUGINS=https://example.com/grafana-plugin.zip
-v grafana-data:/var/lib/grafana
grafana/grafana:8.3.0

Création d’une image personnalisée

Le lancement manuel de conteneurs Grafana avec la configuration fournie par les drapeaux d’exécution de docker est répétitif et source d’erreurs. La création de votre propre image Docker avec vos modifications permet de gagner du temps et de centraliser les paramètres lorsque plusieurs membres de l’équipe doivent être en mesure de lancer une nouvelle instance.

Vous pouvez y parvenir en écrivant un Dockerfile qui étend l’image officielle de grafana/grafana. Cela vous donne l’occasion de copier un fichier de configuration personnalisé et de définir toutes les variables d’environnement supplémentaires dont vous avez besoin.

FROM grafana/grafana:8.3.0

Ajouter les plugins

ENV GF_INSTALL_PLUGINS=grafana-simple-json-datasource

Copiez un fichier de configuration depuis votre répertoire de travail

COPY grafana.ini /etc/grafana/grafana.ini

Utilisez votre Dockerfile pour construire votre nouvelle image Grafana :

docker build -t custom-grafana:latest .

Vous pouvez maintenant démarrer une instance de conteneur préconfigurée à partir de votre image :

docker run -d –name grafana -p 9000:3000 \
-v grafana-data:/var/lib/grafana
custom-grafana:latest

Cette approche est particulièrement utile lorsque vous avez apporté des modifications importantes à votre environnement Grafana. Vous pouvez désormais reproduire de manière fiable votre configuration à chaque fois que vous démarrez un conteneur. Cela permet également d’adapter les modifications apportées à votre installation au fil du temps.

Un inconvénient est la nécessité de reconstruire votre image lorsque des mises à jour amont de Grafana sont publiées. Vous devrez périodiquement tirer grafana/grafana, construire votre image avec Docker, la pousser vers un registre, puis tirer la nouvelle version sur votre hôte Docker. L’étape finale consiste à recréer vos conteneurs en cours d’exécution afin qu’ils utilisent l’image mise à jour.

Conclusion

Docker simplifie l’installation et la configuration de Grafana en fournissant un environnement isolé dans lequel vous pouvez héberger votre plateforme d’observabilité. Vous pouvez rapidement démarrer de nouvelles instances Grafana en liant un port hôte, en montant un volume de données et en fournissant des valeurs de configuration via des variables d’environnement. Plus tard, vous pourrez encapsuler votre configuration dans votre propre image réutilisable qui s’appuie sur la base officielle.

Une fois qu’elle est opérationnelle, une installation de Grafana sous Docker fonctionne comme une installation normale. Vous pouvez connecter des sources de données, interagir avec l’API HTTP et configurer des alertes en pointant sur le port hôte que vous avez lié à votre conteneur. Vous pouvez également attribuer un nom de domaine à votre instance et configurer le HTTPS en la servant derrière un proxy inverse tel qu’Apache ou Traefik.