Passer au contenu principal

Expertise (Ansible)

Observabilité des runs

Savoir qu'un playbook a réussi ne suffit pas en production. Qui l'a lancé ? Quelles tâches ont changé quelque chose ? Combien de temps ? Sans observabilité, diagnostiquer un incident après-coup revient à reconstituer un puzzle incomplet.

ARA Records Ansible

ARA enregistre automatiquement tous les runs Ansible via un callback plugin, sans modifier les playbooks.

pip install ara[server]
ara-manage migrate
ara-manage runserver 0.0.0.0:9191
[defaults]
callbacks_enabled = ara.plugins.callback.ara_default

[ara]
api_client = http
api_server = http://localhost:9191

L'interface ARA expose : historique des runs, détail par tâche, diff des fichiers, timeline par hôte.

Callback plugins natifs

[defaults]
callbacks_enabled = profile_tasks, timer, yaml
  • profile_tasks : durée par tâche, trié
  • timer : durée totale
  • json : sortie JSON pour parsing externe
  • junit : XML JUnit pour intégration CI

Callback plugin custom : alertes Slack

# callback_plugins/notify_slack.py
from ansible.plugins.callback import CallbackBase
import urllib.request, json

class CallbackModule(CallbackBase):
    CALLBACK_VERSION = 2.0
    CALLBACK_TYPE = "notification"
    CALLBACK_NAME = "notify_slack"

    def v2_playbook_on_stats(self, stats):
        failures = {h for h in stats.processed if stats.failures.get(h)}
        if failures:
            self._notify(f":red_circle: Échec sur : {', '.join(failures)}")

    def _notify(self, msg):
        payload = json.dumps({"text": msg}).encode()
        urllib.request.urlopen(urllib.request.Request(
            self.get_option("webhook_url"), data=payload,
            headers={"Content-Type": "application/json"}))

AWX comme observabilité intégrée

Si AWX est déjà en place, pas besoin d'ARA : AWX stocke l'historique complet dans PostgreSQL avec une API dédiée.

# Derniers jobs
curl -s -H "Authorization: Bearer TOKEN"   "https://awx.example.com/api/v2/jobs/?order_by=-started&page_size=20"

# Stdout d'un job
curl -s -H "Authorization: Bearer TOKEN"   "https://awx.example.com/api/v2/jobs/42/stdout/?format=txt"

Métriques Prometheus

AWX expose des métriques Prometheus nativement sur /api/v2/metrics/. Pour Ansible CLI sans AWX, un callback plugin peut pousser des métriques vers un Pushgateway. Les métriques pertinentes : durée par playbook, taux de changed/failed par hôte, taux de succès par environnement.