Le maintien en production dâinstances client nâest pas toujours chose aisĂ©e, surtout lorsque lâon essaie dâautomatiser le plus dâactions possibles. Une erreur dans un script automatisĂ© et câest la catastrophe ! LâĂ©quipe a pu sâen apercevoir Ă ses dĂ©pens un beau jeudi midi de septembre. Tout a commencĂ© par un appel disant :
« Jean-Pierre, que se passe-t-il, notre instance ne répond plus et les fichiers ont été supprimés ».
âčïž Cet article relate le dĂ©roulement dâun incident en production et a vocation Ă partager les enseignements et bonnes pratiques Ă mettre en Ćuvre.
Le contexte
Depuis le dĂ©but du mois de septembre, notre Ă©quipe teste et met en place des configurations avec AWX. Pour ceux qui ne connaissent pas AWX, il sâagit dâune interface graphique qui permet de lancer des playbooks Ansible, tout en ayant une gestion fine des droits et accĂšs, selon les besoins de chaque utilisateur.
đŻ dĂ©charger l'Ă©quipe IT de certaines tĂąches et Ă©viter les erreurs liĂ©es Ă lâinattention et/ou aux tĂąches rĂ©pĂ©titives.
Jusquâau jeudi 29 septembre, pas de souci Ă lâutilisation, tout se passait comme prĂ©vu â .
Le besoin
AprĂšs les tests de crĂ©ation et de mise Ă jour en production de services vient le test de suppression dâinstance sur la production. Sur le papier, tout est fait pour se dĂ©rouler Ă merveille, aucun problĂšme dĂ©tectĂ© sur la prĂ©-production ! Dans la pratique⊠Rien ne se dĂ©roule comme prĂ©vu.
đ„ AjoutĂ© Ă un manque dâattention, cela a donnĂ© un combo explosif avec la suppression pure et simple de 16 instances Tracim. Certaines utilisĂ©es en internes, dâautres Ă©tant des instances clients.
âïž Que s'est-il passĂ© ?
La chronologie
Un post-mortem ne vient pas sans chronologie. Voici donc ce quâil sâest passĂ©Â :
29/09/2022Â :
- 12 h 03Â : Lancement de la commande de suppression dâune seule instance ;
- 12 h 05 : Le playbook démarre sans incident, pause repas, la commande suit son cours ;
- 12 h 15 : PremiĂšre alerte interne dâun salariĂ©. L'instance Tracim interne est indisponible ;
- 12 h 20 : đ Investigation et dĂ©tection dâun problĂšme technique : le service ne tourne plus sur le serveur ;
- 12 h 22 : Suite des investigations oĂč l'on dĂ©couvre que le service nâexiste plus sur le serveur : plus de fichiers de configs ou de logs ;
- 12 h 25 : âïž On fait du tĂ©lĂ©travail : premiers Ă©changes tĂ©lĂ©phoniques pour tenter de savoir ce qui se passe ;
- 12 h 30Â : RĂ©action : on restaure notre instance interne ;
- 12 h 57 : On se rend compte que dâautres instances sont touchĂ©es ;
- 12 h 59 : Identification et kill de la commande problĂ©matique qui continuait de sâexĂ©cuter. (Comme quoi la communication est importante !) ;
- 13 h 10 : Ătat des lieux des instances affectĂ©es et dĂ©finition des prioritĂ©s de remise en route ;
- 14 h 41Â : Restauration de la premiĂšre instance client ;
- 17 h 00 : On s'aperçoit de lâindisponibilitĂ© de certaines sauvegardes (ou sauvegarde incomplĂšte) ;
- 19 h 00 : On prend conscience que deux instances ne sont pas complÚtement « détruites ». (Investigations pour ne restaurer que le nécessaire. Gain de temps par rapport à la quantité de données.) ;
- 20 h : Dans notre prĂ©cipitation, on sâest trompĂ©s dans lâĂ©tat des lieux. On dĂ©tecte que deux instances supplĂ©mentaires sont impactĂ©es ;
- 20 h 38Â : Restauration de la derniĂšre instance client ;
30/09/2022Â :
- Recherche des problématiques sur le script de sauvegarde ;
En tout et pour tout, lâincident aura durĂ© 9 h avec impact pour certains utilisateurs.
đž Durant ces heures, nous sommes passĂ©s dâun trou dans la raquette Ă une raquette sans cordage, en dĂ©couvrant progressivement lâenchaĂźnement de diffĂ©rentes dĂ©faillances.
Câest gĂ©nĂ©ralement de cette façon que l'on arrive Ă une catastrophe đ„.
Au final, on sâen sort bien, car les seules donnĂ©es dĂ©finitivement perdues Ă©taient des donnĂ©es de test (instances client en phase de test de Tracim). Câest un coup de chance, et un enseignement dans la douleur.
đ„ Les erreurs arrivent, ce qui compte, câest dâen tirer des enseignements pour progresser. Câest ce que lâon a fait et câest ce que lâon partage ici.
L'analyse
Voici ce qui a pu ĂȘtre relevĂ© a posteriori et les diffĂ©rentes actions prises pour remĂ©dier Ă ces problĂ©matiques :
ⳠNe jamais lancer de nouvelle opération pendant une absence
Tel quâindiquĂ© dans la chronologie, l'opĂ©ration a Ă©tĂ© lancĂ©e avant de partir en pause repas avec une absence de la personne ayant lancĂ© la commande. đČ
đŻÂ : Ăviter de lancer des opĂ©rations sans rester en supervision jusquâĂ la fin de lâaction. Cela permet une vigilance accrue et une intervention rapide en cas de dĂ©tection dâun problĂšme. Câest particuliĂšrement critique sur de nouvelles opĂ©rations.
đ Le plan de reprise sur incident doit ĂȘtre disponible en dehors des outils concernĂ©s
Une des problĂ©matiques identifiĂ©e durant cet incident est que les documents indiquant la marche Ă suivre pour remettre en route une instance sont uniquement disponibles sur notre instance Tracim interne. Aucun autre exemplaire ni papier ni sur un autre poste / serveur. Cela entraĂźne forcĂ©ment des complications lorsque lâon ne se souvient pas de toutes les Ă©tapes nĂ©cessaires Ă la remise en route dâune instance !
đ Câest une chose Ă laquelle on ne pense pas forcĂ©ment en amont du problĂšme, mais avoir la documentation « vitale » nĂ©cessaire et accessible est important ! (et ça paraĂźt Ă©vident aprĂšs coup đ).
đŻÂ Avoir une copie de la documentation de remĂ©diation Ă un autre emplacement. Une version papier peut Ă©galement une solution.
đŸ - VĂ©rifiez rĂ©guliĂšrement vos sauvegardes !
Lors de la tentative de restauration de certaines instances, nous avons dĂ©couvert que certaines sauvegardes des bases de donnĂ©es nâĂ©taient pas rĂ©alisĂ©es correctement, depuis plus dâun mois pour certaines.
Notre script de sauvegarde et notre monitoring de ces derniĂšres nâont dans les deux cas pas remontĂ© dâerreur.
đ”đ» Une modification du script de sauvegarde des bases de donnĂ©es a Ă©tĂ© rĂ©alisĂ©e mi-aoĂ»t ; lors de son dĂ©ploiement fin aoĂ»t, il sâest avĂ©rĂ© que ce nâest pas la mĂȘme personne qui a rĂ©alisĂ© la mise en production. Cela a entraĂźnĂ© un oubli de copie de tous les fichiers nĂ©cessaires au fonctionnement du changement.
De plus, le script ne générait pas d'erreur en cas de fichier mal formaté en entrée et interrompait silencieusement la création des sauvegardes.
Enfin, le monitoring des sauvegardes ne remontait pas dâerreur puisquâune partie des donnĂ©es Ă©tait malgrĂ© tout sauvegardĂ©e.
Ces trois éléments ont entraßné un dysfonctionnement silencieux des sauvegardes.
đŻÂ Plusieurs actions ont Ă©tĂ© mises en place pour remĂ©dier Ă ces diffĂ©rents problĂšmes :
- Gestion des erreurs de formatage de fichier pour remonter une alerte ;
- Monitoring plus exhaustif des éléments à sauvegarder par instance ;
- Vérification manuelle réguliÚre des sauvegardes ;
 đ Bug sur lâoutil utilisĂ© pour lâautomatisation
Un bug ou une mauvaise comprĂ©hension de lâoutil utilisĂ© ont menĂ© Ă cet Ă©vĂšnement. Utilisant des outils open source, nous avons donc crĂ©Ă© un ticket (disponible ici : https://github.com/ansible/awx/issues/12991).
Nous ignorons si cela sera traitĂ© un jour, mais la problĂ©matique nâest donc plus inconnue.
Les autres mesures que l'on a mises en Ćuvre
Vous avez pu trouver les 4 principales actions prises suite Ă cet incident, mais ce ne sont pas les seules. Voici une liste dâactions qui ont Ă©tĂ© ou vont ĂȘtre mises en place Ă moyen terme :
- đŸ Suppression "soft" : lors de la suppression d'une instance, une sauvegarde est rĂ©alisĂ©e. Elle permet de rĂ©cupĂ©rer les donnĂ©es dans le dernier Ă©tat oĂč elles Ă©taient ;
- đ©ș Ne pas se prĂ©cipiter : il est important d'analyser de maniĂšre approfondie lâincident et ses impacts avant de prendre des mesures de correction ;
- âïž Informer les clients et utilisateurs : il est important de tenir les personnes informĂ©es, ce nâest jamais agrĂ©able, mais cela Ă©vite les mauvaises surprises ;
- đ„ïž PrĂ©voir une restauration automatisĂ©e du retour en production depuis une sauvegarde ;
đȘđ» Tout ne sâest pas mal passĂ© non plus...
MalgrĂ© toutes les dĂ©faillances, plusieurs Ă©tapes se sont bien dĂ©roulĂ©es et il ne faut pas oublier de considĂ©rer le positif lors dâĂ©vĂšnements de ce genre đ.
đ„ Bonne coordination de lâĂ©quipe
Le travail de restauration et de reprise sur incident sâest bien dĂ©roulĂ© et la communication continue entre les membres de lâĂ©quipe, malgrĂ© la distance. Nos outils de visioconfĂ©rence nous ont permis de nous tenir informĂ©s de maniĂšre continue sur lâavancĂ©e des opĂ©rations.
đ RapiditĂ© de dĂ©tection
Comme indiquĂ© dans la chronologie, la premiĂšre dĂ©tection de lâincident a eu lieu trĂšs rapidement. Les solutions de mitigations ont mis un peu plus de temps Ă ĂȘtre mises en place, car ce genre dâincident Ă©tait une dĂ©couverte pour nous.
đ RapiditĂ© de rĂ©tablissement
Nous pouvons voir dans la chronologie que le rĂ©tablissement a Ă©tĂ© relativement rapide pour tous les clients. Cela a Ă©tĂ© possible grĂące Ă la coordination Ă©voquĂ©e prĂ©cĂ©demment, mais Ă©galement grĂące au temps pris entre 13 h 00 et 14 h 30 pour automatiser les points les plus chronophages de la restauration dâune instance Ă partir dâune sauvegarde. C'est un point que nous allons encore travailler Ă lâavenir pour encore gagner en rĂ©activitĂ©.
đ Restauration des services basĂ© sur lâimpact client de la dĂ©faillance
La dĂ©finition de clients prioritaires nous a permis de savoir sur quelles instances travailler en prioritĂ© pour permettre un retour Ă la normale le plus tĂŽt possible. Nous nâavons pas de clients plus importants que dâautres ; nous avons en revanche des instances Tracim qui sont utilisĂ©es en permanence tandis que dâautres sont utilisĂ©es de maniĂšre plus ponctuelle. Une interruption de service a donc moins potentiellement dâimpact certaines instances.
đ Chance
Tous ces Ă©lĂ©ments rĂ©unis indiquent quand mĂȘme quâun facteur chance nous a bien aidĂ©. Les instances oĂč la sauvegarde de la base de donnĂ©es nâĂ©taient pas disponibles sont des instances de tests, par consĂ©quent, nous nâavons pas perdu de donnĂ©es clients. đȘ
đ Il faut savoir profiter de la chance, mais il ne faut pas se reposer sur elle : nous avons pris les mesures nĂ©cessaires pour que ce facteur ne soit plus un facteur clĂ© de succĂšs.
Conclusion
De maniĂšre globale, nous nous en sommes bien tirĂ©s. Un post-mortem rĂ©alisĂ© la semaine suivante nous a permis de cibler des points dâactions prioritaires pour remĂ©dier Ă certaines problĂ©matiques.
đ€đż Nous croisons les doigts pour que ce genre de problĂšme nâarrive plus, mais ce baptĂȘme du feu nous a permis de nous amĂ©liorer !
Nous espĂ©rons que la lecture de ce retour dâexpĂ©rience vous aura Ă©tĂ© utile et vous incitera Ă appliquer des rĂšgles et bonnes pratiques que vous auriez nĂ©gligĂ©es jusque-lĂ đđ».