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"
}
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.