Skip to content

Evaluation de Grafana Cloud

Nous avons plusieurs fois voulu mettre en place un système de collecte de logs centralisé.

J'ai à nouveau eu du mal à trouver une erreur dans les logs de nos containers Docker car elle datait de plusieurs heures auparavent et ce container produisait plusieurs milliers de lignes par heure. Afficher la ligne de l'erreur depuis Portainer et quasi impossible.

Après une recherche parmi les outils possibles, j'ai retenu Grafana Cloud que je veux évaluer.

Pourquoi Grafana Cloud

Une solution Cloud évite d'avoir à gérer l'infra de la collecte des logs. Ce n'est pas plus mal que nos logs soient en dehors de notre infra.

En plus des logs, Grafana Cloud permet d'envoyer des métriques, des traces, etc. Donc si nos besoins évoluent, il devrait nous permettre d'y répondre.

Et sa documentation est très complète et j'ai pu naviguer dedans assez facilement.

Enfin, il m'a paru un des moins cher. J'ai regardé :

  • Loggly
  • Loki (pour l'installer, fait partie de Grafana)
  • LogRocket
  • Papertrail
  • Sumo Logic
  • Datadog
  • Splunk

Evaluation

Ce que je voudrais faire :

  • envoyer les métriques de la machine
  • envoyer les logs de la machine (syslog, etc)
  • envoyer les logs des containers Docker de la machine
  • le faire sur 2 machines

Création du compte Grafana Cloud

J'ai créé un compte avec pbrisacier@mncc. J'ai choisi l'URL cfinfra.grafana.net pour l'accès aux données.

J'ai fait l'assistant : - menu Home > Monitor Your OS - 1. Select your OS = Linux - 2.1. Debian / Amd64 - 2.2. Create a new token, Token Name = nom de la machine (eg yunohost-addapps) - Bouton "Create token" - 2.3. Copier la commande - La coller dans le terminal de la machine - Bouton "Test Connection" pour vérifier que les données remontent bien vers Grafana Cloud

J'ai fait ça pour yunohost-dev02 et les données sont remontées. Je peux les voir dans différents dashboards déjà prévus pour ça (CPU, méméoire, réseau, etc)

Installation faite

La commande collée dans le terminal installe Alloy et crée un service :

  • redémarrer le service : sudo systemctl restart alloy
  • configuration de Alloy : /etc/alloy/config.alloy
  • variables utilisée au lancement de Alloy : /etc/default/alloy
  • fichier définissant le service : /lib/systemd/system/alloy.service

Pour une introduction à Alloy, voir https://github.com/grafana/Grafana-Alloy-for-Beginners.

Ajout d'un autre serveur

J'ai refait l'assistant pour ajouter la machine yunohost-cywise.

J'ai eu un problème car la configuration générée contient des règles :

  rule {
    target_label = "instance"
    replacement  = "default"
  }
Donc, pour les 2 machines, la variable instance vaut default et les remontées se mélangent (voire génèrent des erreurs, données incohérentes).

J'ai donc recherché target_label dans l'ensemble du fichier de configuration sur les 2 machines pour mettre replacement = "<nom-machine>".

Ajout d'autres informations collectées

Je voudrais ajouter les logs des containers Docker. Il y a des exemples dans la documentation qui permettent de le faire, comme https://grafana.com/docs/alloy/latest/reference/components/discovery/discovery.docker/#examples, mais ajouter des collectes risque de complexifier le fichier de configuration qui deviendra de moins en moins maintenable.

Le fichier de configuration d'Alloy décrit un pipeline par lequel les informations sont collectées, transformées puis poussées vers Grafana. Donc, par exemple, les composants qui poussent les informations vers loki, sont communs à toutes collectes qui utilisent Loki.

Dans la documentation de Alloy, qu'il est possible de passer le nom du fichier de configuration ou de passer un répertoire. Si c'est un répertoire, Alloy lira tous les fichiers *.alloy contenu dans ce répertoire ce qui permet de définir la configuration dans plusieurs fichiers séparés ce qui me parait une bonne idée. Voir https://grafana.com/docs/alloy/latest/reference/cli/run/.

Je veux donc "découper" la configuration en plusieurs fichiers, un type de remontée par fichier. Je pourrais ensuite mettre en place plus ou moins de fichiers sur mes différentes machines en fonction du contexte. Par exemple, ne pas mettre le fichier qui collecte les informations sur Docker quand Docker n'est pas installé sur la machine.

Découpage en plusieurs fichiers de configuration

Je commence par modifier la ligne de commande du démarrage de Alloy afin de remplacer le fichier /etc/alloy/config.alloy par le répertoire /etc/alloy/. C'est faisable facilement en modifiant la variable d'environnement CONFIG_FILE dans /etc/default/alloy.

Je mets de côté, dans le fichier grafana_cloud.alloy, les 2 composants qui envoient les données vers Loki et Prometheus de Grafana Cloud.

Je mets de côté, dans le fichier alloy_check.alloy, les composants qui envoient des informations sur Alloy lui-même

Enfin, je renomme config.alloy en integrations_node_exporter.alloy car il ne reste que ce pipeline, qui envoie les informations sur le système, dans ce fichier.

Ajout des logs des containers Docker

Il y a une intégration qui existe dans Grafana Cloud pour faire ça. Aller sur https://cfinfra.grafana.net/connections/add-new-connection?cat=integration puis choisir Docker.

Je laisse les 3 premières étapes sans les changer. La 4ème demande d'ajouter l'utilisateur alloy dans le groupe docker et, plus bas de démarrer Alloy avec l'utilisateur root. Je ne fais que la partie démarrage avec root : - sudo nano /lib/systemd/system/alloy.service - Changement de User=alloy par User=root

Puis je copie-colle la configuration proposée dans un nouveau fichier /etc/alloy/docker.alloy et je change la valeur des instance par yunohost-dev02.

Enfin, je redémarre le service avec sudo systemctl restart alloy.

Hostname dans une variable d'environnement

Dans tous mes fichiers de configuration *.alloy, j'ai remplacé yunohost-dev02 par sys.env("INSTANCE_NAME").

Puis, j'ai ajouté INSTANCE_NAME=yunohost-dev02 dans /etc/default/alloy.

Enfin, je redémarre le service avec sudo systemctl restart alloy.

Configuration yunohost-cywise

Maintenant que j'ai une configuration en plusieurs fichiers sur yunohost-dev02 avec les informations propres à la machine dans 2 variables d'environnement, je peux copier tous mes fichiers sur yunohost-cywise, ajouter les 2 variables, ne pas oublier de démarrer le service avec root et je devrais avoir les mêmes informations qui remontent.