Monitoring d’un playbook Ansible

--

Ce mois-ci, nous allons consacrer notre article Tech à la surveillance du résultat des playbooks Ansible avec la stack Telegraf / Prometheus / Grafana.

Donnons un peu de contexte :

Dans une infrastructure gérée en mode GitOps, toutes les actions sont pilotées par GIT et un ordonnanceur qui permet de valider et déployer le code ou l’infrastructure. Dans le cas où le référentiel de configuration est géré avec Ansible stocké dans Git, nous allons décrire une méthode de surveillance vous permettant de surveiller la conformité de votre configuration de référence sur un parc de production.

Pour cet exemple, nous allons reprendre un cas simple avec un playbook Ansible qui va gérer des utilisateurs ainsi que leur clef SSH pour se connecter à un serveur, votre imagination permettra de le mettre en application sur des playbook Ansible bien plus complexes.

Dans cet article, nous ne parlerons pas de l’ordonnanceur qui exécute le playbook régulièrement, plusieurs solutions sont possibles : GitLab-CI, Rundeck, CronTab, etc..

1. Le playbook

Le playbook Ansible propose par défaut un log en format YAML qui est très lisible à l’écran, mais un format JSON permettra un traitement du log plus facile. Pour cela le playbook Ansible sera lancé avec la commande suivante pour changer le format du stdout.

Afin d’optimiser le traitement et ne pas polluer les stacks de monitoring avec des valeurs non nécessaires, il est préférable d’extraire uniquement le résumé du résultat Ansible avec les codes de sortie : OK, CHANGED, UNREACHABLE, FAILED, SKIPPED.

2. Exposer le résultat du fichier JSON

La machine qui exécute le playbook va présenter ce fichier json pour que la métrique puisse être exploitée.

Pour aller au plus simple, nous avons choisi d’utiliser l’exporteur Prometheus disponible dans Telegraf qui permet nativement d’interpréter les fichiers JSON et de présenter les clefs et les valeurs au format Prometheus.

Une fois en place, il est possible de vérifier le fonctionnement de l’exporteur avec un curl :

3. Collecter et historiser les valeurs

Pour effectuer cette tâche, nous allons simplement utiliser l’incontournable Prometheus qui est devenu un standard pour le monitoring et la métrologie des infrastructures modernes. Nous n’allons pas entrer dans le détails de l’implémentation de Prometheus dans cet article, mais juste donner un exemple de configuration.

Le rôle de Prometheus est de conserver l’historique des valeurs collectées.

4. Mettre en forme les valeurs

Pour la présentation des métriques, l’utilisation de Grafana permet d’avoir une représentation visuelle des données collectées dans Prometheus. Pour cela, il suffit de connecter la source de données Prometheus et de créer un Dashboard avec les valeurs collectées.

Configuration d’une source de donnée type Prometheus dans Grafana
Edition d’un dashboard avec les metrics ansible
Dashboard en mode visuel

Conclusion

Pour conclure, une fois cette solution implémentée, vous serez capable de superviser la conformité de votre configuration de référence pour prévenir de toute dérive, comme des actions manuelles sur les plateformes, la défaillance de nouvelle configuration liée à la sécurité, ou des changements non appliqués sur l’intégralité du parc.

Votre imagination permettra sûrement bien d’autres applications.

Architecture finale

--

--

Les Filles et Les Garçons de la Tech

1ere entreprise du numérique à mission solidaire, nos missions DevOps s’appuient Kubernetes, Terraform, Ansible, Gitlab Ci, Jenkins sur de l’AWS, GCP et Azure.