Déploiement Applicatif & Observabilité (Ansible)
Nous utilisons une approche modulaire basée sur les Rôles Ansible pour orchestrer le cluster.
Modularité & Dépendances
Rôles utilisés :
- geerlingguy.docker : Provisionnement des nœuds (App et ELK).
- app : Déploiement du conteneur configuré avec le driver de logs GELF.
- haproxy : Installation du LB avec support
option forwardforpour préserver l'IP client. - elk : Déploiement de la stack Elastic (Elasticsearch, Logstash, Kibana) avec parsing Grok.
Flux de déploiement
Le playbook suit un ordre strict pour garantir la connectivité des logs :
- Initialisation Infrastructure : Configuration du noyau (
vm.max_map_count) et installation de Docker sur l'ensemble du parc. - Provisionnement ELK : Lancement de la stack Elasticsearch/Logstash en priorité pour être prêt à recevoir les flux de logs.
- Déploiement App : Lancement du conteneur Olympic Tracker sur les serveurs
app_servers. Le driver GELF pointe dynamiquement vers l'IP privée de l'ELK. - Configuration LB : Installation de HAProxy, génération dynamique du fichier
haproxy.cfg(listant les IPs privées des Apps) et activation du forwarding d'IP réelle. - Validation & Observabilité : Vérification de l'ingestion des logs dans Kibana et création des index patterns
access-logs-*.
Pipeline de Logs (Logstash)
Les logs Nginx sont transformés en données structurées :
- Input GELF : Réception des logs Docker sur le port 12201/UDP.
- Filter Grok : Parsing du format
COMBINEDAPACHELOGet enrichissement GeoIP. - Indexation : Stockage dans Elasticsearch avec rotation journalière (
access-logs-%{+YYYY.MM.dd}).
Visualisation (Kibana)
Le dashboard centralise :
- Volume de données : Histogramme de trafic (Sum of bytes) par tranche de 12h.
- Répartition des verbes HTTP : Diagramme Donut (GET, POST, etc.).
- Top Requêtes : Histogramme cumulé du Top 5 des endpoints les plus sollicités.