[{"data":1,"prerenderedAt":14928},["ShallowReactive",2],{"category-cloud-platform":3},[4,153,368,570,899,979,1250,11033,11202,11542,12010,12162,12821,14300],{"id":5,"title":6,"alt":7,"authors":8,"body":15,"date":128,"description":129,"extension":130,"image":131,"meta":132,"navigation":133,"ogImage":131,"path":134,"published":133,"reviewers":135,"seo":146,"stem":147,"tags":148,"__hash__":152},"blogs\u002Fblogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-1\u002Findex.md","Low Carbon dans le Cloud - Partie 1","Error 404. This is not green enough",[9],{"id":10,"name":11,"image":12,"linkedin":13,"x":14},"4f37105b-9f64-4dcc-8a19-a1f4d5489826","Samuel Bally",".\u002Fassets\u002Fauthor-samuel-bally.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fsamuel-bally\u002F",null,{"type":16,"value":17,"toc":115},"minimark",[18,22,25,28,33,36,39,42,46,57,60,63,70,73,76,79,83,86,91,94,98,101,105,108,112],[19,20,21],"p",{},"Le Green Code aurait permis d'économiser des centaines de millions de tonnes de CO2 rien que ces 3 dernières années. Et si nous faisions un effort supplémentaire côté infrastructure ?",[19,23,24],{},"Auprès des particuliers, ce sont sûrement les applications mobiles qui sont le plus consommées. Toutefois, en entreprise, les centres de données avec des climatiseurs de la taille de Matignon sont encore la norme. Sans parler de l'IA qui vient tuer le match.",[19,26,27],{},"Heureusement, nous pouvons limiter la casse et revenir dans les bonnes grâces de Greta.",[29,30,32],"h2",{"id":31},"notions","Notions",[19,34,35],{},"Reprenons les basiques: comment notre application génère du CO2 ? Le stockage, la charge CPU, le refroidissement consomment de l'énergie. Pour produire cette énergie exprimée en kWh, nous brûlons des matières premières, nous extrayons de l'uranium, nous produisons des panneaux solaires, etc. Toutes ces solutions produisent plus ou moins de polluants comme: le CO2, des métaux lourds, des gaz acidifiants, etc. Et bien sûr, tout ça a aussi un coût financier variable : par exemple l'énergie dite verte est plus chère.",[19,37,38],{},"Il est important de souligner que la source d'énergie du centre de données est le facteur numéro 1 pour ajuster sa production de CO2.",[19,40,41],{},"En effet, un centre de données qui consomme 2 fois plus d'électricité qu'un autre peut produire moins de CO2. Comme nous allons le voir en fonction de l'origine électrique, la différence peut être de facteur 100 !",[29,43,45],{"id":44},"la-france-reste-un-des-meilleurs-choix","La France reste un des meilleurs choix",[19,47,48,49,56],{},"Le site ",[50,51,55],"a",{"href":52,"rel":53},"https:\u002F\u002Fapp.electricitymaps.com\u002F",[54],"nofollow","electricitymaps"," nous propose une carte monde des émissions de CO2. Il est facile de comparer la production de CO2 par pays tout en analysant l'origine de cette production (charbon, nucléaire, solaire, …).",[19,58,59],{},"Il y a d'énormes différences entre les pays. À l'heure où j'écris cet article, l'Inde produit 66 fois plus de gaz carboné que la Suède pour produire 1 kWh.",[19,61,62],{},"Intensité carbone de la France -",[19,64,65],{},[66,67],"img",{"alt":68,"src":69},"electricity Map de l’Europe","\u002Fcontent-assets\u002F2024-09-26-low-carbon-dans-le-cloud-partie-1\u002Fassets\u002Fimg1.webp",[19,71,72],{},"La France, grâce essentiellement au nucléaire et aux énergies renouvelables, est dans les meilleurs élèves de la planète. Bonne nouvelle pour les consommateurs de Cloud, nous avons un grand nombre de Cloud en France (OVH, Scaleway, Outscale, …) et les grands fournisseurs américains proposent une région (exécution des services et stockage) dans notre beau pays.",[19,74,75],{},"Malheureusement, il y a une contrepartie ! En effet, héberger ses données en France (23 g d'équivalent Co2 pour 1 kWh) coûte plus cher qu'en Irlande (525 g) ou en Allemagne (187 g) avec les fournisseurs américains.",[19,77,78],{},"Il est important de souligner que certains centres de données peuvent être alimentés par une production d'énergie indépendante du pays (autoproduction, contrat privé, …).",[29,80,82],{"id":81},"le-greenops-un-adversaire-du-finops","Le GreenOps un adversaire du FinOps ?",[19,84,85],{},"Le cas précédent met en avant une dualité entre le CO2 et les impacts budgétaires. Heureusement, le Cloud n'est pas un univers cornélien ou nous devons choisir entre pollution et économie financière. Il faut être capable d'ajuster les curseurs entre les coûts et l'écologie.",[87,88,90],"h3",{"id":89},"pauvreté-et-sobriété-numérique","Pauvreté et sobriété numérique",[19,92,93],{},"Il n'est pas question de se priver d'utiliser les services Cloud pour réduire son CO2. Les compromis seront de mise mais permettront d'atteindre la sobriété et ne vous brideront aucunement. Parfois les planètes seront alignées : c'est le cas pour conjuguer souveraineté des données et diminution de l'impact carbone pour les entreprises françaises.",[87,95,97],{"id":96},"marketing","Marketing",[19,99,100],{},"L'écologie est bankable, nous n'allons pas nous mentir, avant tout pour son attrait marketing. En effet, l'impact commercial d'acte Green est réel. Il doit être mis dans la balance afin d'ajuster le curseur GreenOps\u002FFinOps.",[87,102,104],{"id":103},"réglementation","Réglementation",[19,106,107],{},"Pour le respect des lois à caractère RSE, une démarche GreenOps est un grand atout.",[29,109,111],{"id":110},"en-introduction-de-la-partie-2","En introduction de la partie 2",[19,113,114],{},"Il est important de pouvoir suivre ces deux métriques: coût et production de carbone. Ce qui ne peut pas être mesuré est difficilement améliorable. Le Cloud amène avec lui de belles pratiques et de belles améliorations notamment en terme de vision. Dans la seconde partie, nous parlerons d'observabilité avec un focus particulier sur l'impact carbone.",{"title":116,"searchDepth":117,"depth":117,"links":118},"",2,[119,120,121,127],{"id":31,"depth":117,"text":32},{"id":44,"depth":117,"text":45},{"id":81,"depth":117,"text":82,"children":122},[123,125,126],{"id":89,"depth":124,"text":90},3,{"id":96,"depth":124,"text":97},{"id":103,"depth":124,"text":104},{"id":110,"depth":117,"text":111},"2024-09-26T19:13:02.656Z","Le Green Code aurait permis d'économiser des centaines de millions de tonnes de CO2 rien que ces 3 dernières années. Et si nous faisions un effort supplémentaire côté infrastructure ?  Auprès des part","md",".\u002Fassets\u002Fcover-image.webp",{},true,"\u002Fblogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-1",[136,141],{"id":137,"name":138,"image":139,"linkedin":140,"x":14},"67adfd77-4b84-4496-b55d-3391541f59c5","Michaël Bernasinski","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F82ebd0fe-de28-43f3-ab7b-0431af41baad\u002FPhoto_HoppR.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240926%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240926T191302Z&X-Amz-Expires=3600&X-Amz-Signature=ceadc4bf7580a016b5ac0b1159488b990250b831bccf0691e4ae7bf3f87eacff&X-Amz-SignedHeaders=host&x-id=GetObject","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmichael-bernasinski",{"id":142,"name":143,"image":144,"linkedin":145,"x":14},"0bb914a6-f882-4951-bee6-53e8e8abb807","Emmanuelle Gouvart","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc88f5dfa-16db-4e6f-acf1-34dd80ee8766\u002Femma_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240926%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240926T191302Z&X-Amz-Expires=3600&X-Amz-Signature=50667715cef901f68af532d995c162dddd923a9c2bf34787c4e5d7006748310b&X-Amz-SignedHeaders=host&x-id=GetObject","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Femmanuellegouvart-182b6ab2\u002F",{"title":6,"description":129},"blogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-1\u002Findex",[149,150,151],"green","cloud","cloud-platform","Y7Ei6m636NzxgiHlwmA2Jh7hDNLk5faiBtqECaU3eYw",{"id":154,"title":155,"alt":7,"authors":156,"body":158,"date":346,"description":347,"extension":130,"image":131,"meta":348,"navigation":133,"ogImage":131,"path":349,"published":133,"reviewers":350,"seo":364,"stem":365,"tags":366,"__hash__":367},"blogs\u002Fblogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-2\u002Findex.md","Low Carbon dans le Cloud - Partie 2",[157],{"id":10,"name":11,"image":12,"linkedin":13,"x":14},{"type":16,"value":159,"toc":336},[160,169,175,179,182,188,191,194,200,203,207,210,213,216,220,229,232,242,246,255,258,262,270,273,276,310,314,320,329,333],[19,161,162,163,168],{},"Dans notre première partie de l'article, nous avons établi la relation entre CO2, énergie et finance. Aujourd'hui, je vous propose, dans une version simplifiée, de mesurer votre impact carbone dans le Cloud avec des services managés sans information sur le hardware. Nous resterons sur le ",[50,164,167],{"href":165,"rel":166},"https:\u002F\u002Fglobalclimateinitiatives.com\u002Fe-brochures-connaissances\u002Fscope\u002F",[54],"Scope 3 des émissions"," afin d'être cohérent avec cette simplification.",[170,171,172],"blockquote",{},[19,173,174],{},"Le numérique émet près de 4 % des gaz à effet de serre à l'échelle mondiale",[29,176,178],{"id":177},"simuler-la-consommation-de-manière-classique","Simuler la consommation de manière classique",[19,180,181],{},"Il est aisé de mesurer la consommation électrique de votre téléphone ou votre PC. Nous pouvons le faire via des applications ou simplement avec un compteur de consommation électrique branché entre la prise et votre chargeur. Ensuite, avec une simple opération mathématique, nous pouvons obtenir la production de CO2 en fonction de l'origine de production électrique.",[19,183,184],{},[66,185],{"alt":186,"src":187},"Exemple d’étiquette énergétique","\u002Fcontent-assets\u002F2024-09-26-low-carbon-dans-le-cloud-partie-2\u002Fassets\u002Fimg1.webp",[19,189,190],{},"Prenons en exemple une télévision qui consomme jusqu'à 240 kWh pour 1000 h. En multipliant par le coefficient moyen pour la production d'énergie Française (partons arbitrairement sur 29 g d'eCO2\u002FkWh) nous obtenons environ 7 kg d'équivalent C02 pour 1000 h d'utilisation.",[19,192,193],{},"Pour un serveur dans un centre de données, nous prenons en compte l'Indicateur d'efficacité énergétique aussi appelé PUE. Cet indicateur prend en compte les équipements tiers comme la climatisation.",[19,195,196],{},[66,197],{"alt":198,"src":199},"L'image montre la formule du PUE (Power Usage Effectiveness) pour un centre informatique. Elle est définie comme le rapport entre l'énergie totale consommée par le centre informatique et l'énergie consommée par les équipements informatiques.","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F7dbbc970-dea0-42ec-a9e1-168e6a7cf8b6\u002FLimage_montre_la_formule_du_PUE_%28Power_Usage_Effectiveness%29_pour_un_centre_informatique._Elle_est_definie_comme_le_rapport_entre_lenergie_totale_consommee_par_le_centre_informatique_et_lenergie.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240926%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240926T191415Z&X-Amz-Expires=3600&X-Amz-Signature=c3552ce9e5737e4aec85099b1578a78bc667e33b8a6bb39746253b97d91c220a&X-Amz-SignedHeaders=host&x-id=GetObject",[19,201,202],{},"Imaginons que cette TV est branchée dans un centre de données avec un PUE de 1,2. Nous multiplions sa consommation par un facteur 20 % qui fait passer la consommation globale pour cette télévision à 8,4 kg d'équivalent CO2 sur 1000 h d'utilisation.",[29,204,206],{"id":205},"offuscation-du-cloud","Offuscation du Cloud",[19,208,209],{},"Les sujets Green ont le vent en poupe, mais nous manquons clairement de transparence sur les services du Cloud. Plus le service est managé moins nous en savons. Les acteurs du marché comme Microsoft ont fait un grand pas en avant. Cependant, dans l'ensemble, nous marchons à l'aveugle.",[19,211,212],{},"Sur certains services en IaaS (Infrastructure as a Service), des outils permettent de définir la partie matérielle et donc de définir, grâce aux données constructeurs, la consommation. Et parfois, le fournisseur Cloud nous communique le PUE.",[19,214,215],{},"Pour les autres services CaaS, FaaS, PaaS ou encore SaaS, cela est beaucoup plus compliqué.",[29,217,219],{"id":218},"pourquoi-une-méthode-simplifiée","Pourquoi une méthode simplifiée",[19,221,222,223,228],{},"Une méthode simple permet de rester compréhensible et adoptable par tous, mais elle a aussi l'avantage d'éviter le ",[50,224,227],{"href":225,"rel":226},"https:\u002F\u002Ffr.wikipedia.org\u002Fwiki\u002FParadoxe_du_littoral#:~:text=Le%20paradoxe%20du%20littoral%20est,a%20pas%20de%20longueur%20d%C3%A9finie.",[54],"paradoxe des littoraux"," : plus nous essayons d'être précis plus nous nous éloignons d'une vue d'ensemble cohérente.",[19,230,231],{},"Maintenant, prenons du recul et demandons-nous si avoir une vision extrêmement précise de sa production de gaz à effet de serre est nécessaire ? Dans la très grande majorité des cas, la réponse est non. Il est beaucoup plus intéressant d'avoir une notion d'échelle dans une fourchette réaliste et de pouvoir définir une tendance dans le temps. Une démarche GreenOps consiste à diminuer sa production de polluants, pas à en faire sa comptabilité.",[170,233,234],{},[19,235,236,237],{},"La ",[50,238,241],{"href":239,"rel":240},"https:\u002F\u002Fgreensoftware.foundation\u002F",[54],"Green Software Foundation",[29,243,245],{"id":244},"la-méthode","La méthode",[19,247,248,249,254],{},"Pour débuter avec une vision Green, inutile d'installer une application ou d'ajouter une librairie à votre code. Nous pouvons partir des simulateurs de coût comme le ",[50,250,253],{"href":251,"rel":252},"https:\u002F\u002Fcalculator.aws\u002F#\u002F",[54],"AWS Pricing Calculator"," ou directement d'une facture.",[19,256,257],{},"La constante veut que nous puissions toujours récupérer certaines métriques comme le nombre de VCPU, la taille de la RAM ou le stockage utilisés. Il est vrai que nous ne connaissons pas toujours le modèle de processeur, la marque du SSD ou la carte graphique. Toutefois, nous pouvons compléter ses informations avec le type d'architecture processeur. Par exemple, savoir que nous avons un processeur de type AWS Gravitons, nous permet de réduire la consommation de 60 % vis-à-vis d'un processeur générique.",[87,259,261],{"id":260},"cloud-carbon-footprint","Cloud Carbon Footprint",[19,263,264,265,269],{},"Maintenant que nous avons une vision globale de notre utilisation du Cloud, comment passons-nous à la vision CO2 ? La méthodologie ",[50,266,261],{"href":267,"rel":268},"https:\u002F\u002Fwww.cloudcarbonfootprint.org\u002Fdocs\u002Fmethodology\u002F",[54]," sera votre meilleur allié. Vous allez pouvoir récupérer le PUE moyen des Cloud Providers américains ainsi que les valeurs de consommation minimum et maximum sur l'ensemble du scope.",[19,271,272],{},"Par exemple voici les données pour AWS:",[19,274,275],{},"AWS",[277,278,279,283,286,289,292,295,298,301],"ul",{},[280,281,282],"li",{},"Moyenne Minimum Watts (0% CPU ): 0.74",[280,284,285],{},"Moyenne Maximum Watts (100% CPU Utilization): 3.5",[280,287,288],{},"Moyenne d'utilisation CPU par centre de données: 50%",[280,290,291],{},"Stockage HDD Watt Heure \u002F Terabyte: 0.65",[280,293,294],{},"Stockage SSD Storage Watt Heure \u002F Terabyte: 1.2",[280,296,297],{},"Réseau Kilowatt Heure\u002F Gigabyte: 0.001",[280,299,300],{},"Mémoire Kilowatt Heure \u002F Gigabyte: 0.000392",[280,302,303,304,309],{},"Moyenne du PUE: 1.135\nJe ne peux que vous conseiller de lire attentivement la page ",[50,305,308],{"href":306,"rel":307},"https:\u002F\u002Fwww.cloudcarbonfootprint.org\u002Fdocs\u002Fmethodology",[54],"méthodologie du CCF",". Je ne rentrerais pas plus en détail dans les formules que vous trouverez aisément sur le site de l'organisation Cloud Carbon Footprint. Cependant, j'aimerais vous proposer un conseil pour le suivi de cette consommation de manière industrialisée.",[87,311,313],{"id":312},"votre-dashboard-green","Votre Dashboard Green",[19,315,316],{},[66,317],{"alt":318,"src":319},"Dashboard DataDog","\u002Fcontent-assets\u002F2024-09-26-low-carbon-dans-le-cloud-partie-2\u002Fassets\u002Fimg2.webp",[19,321,322,323,328],{},"En utilisant des outils d'observabilité comme ",[50,324,327],{"href":325,"rel":326},"https:\u002F\u002Fwww.datadoghq.com\u002F",[54],"DataDog",", vous êtes en capacité de faire vos propres Dashboards. En sachant, que si vous avez déjà vos utilisations de VCPU et autres métriques intégrées dans votre outil d'observabilité, vous êtes capables de faire la conversion dynamique en kWh et équivalent CO2. Cette solution permet d'avoir rapidement beaucoup d'indicateurs de suivi du CO2 dans la durée mais aussi en temps réel.",[29,330,332],{"id":331},"le-mot-de-la-fin","Le mot de la fin",[19,334,335],{},"Vous pouvez désormais commencer votre suivi de CO2. Si cette approche est trop technique, il existe également des solutions clé en main sur le marché. Elles seront par contre souvent assez onéreuses.  Aussi au besoin les équipes HoppR sont disponibles pour apporter du conseil sur ces sujets\nDans la suite de cette série d'articles sur la Sustainability (Durabilité), nous aborderons les techniques d'architectures Green.",{"title":116,"searchDepth":117,"depth":117,"links":337},[338,339,340,341,345],{"id":177,"depth":117,"text":178},{"id":205,"depth":117,"text":206},{"id":218,"depth":117,"text":219},{"id":244,"depth":117,"text":245,"children":342},[343,344],{"id":260,"depth":124,"text":261},{"id":312,"depth":124,"text":313},{"id":331,"depth":117,"text":332},"2024-09-26T19:14:17.111Z","Dans notre première partie de l'article, nous avons établi la relation entre CO2, énergie et finance. Aujourd'hui, je vous propose, dans une version simplifiée, de mesurer votre impact carbone dans le",{},"\u002Fblogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-2",[351,353,358],{"id":137,"name":138,"image":352,"linkedin":140,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F82ebd0fe-de28-43f3-ab7b-0431af41baad\u002FPhoto_HoppR.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240926%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240926T191417Z&X-Amz-Expires=3600&X-Amz-Signature=9a6ac271ef20e015de8631306a9a3d9ee599b8bd6515bc6660813db235ccc1f1&X-Amz-SignedHeaders=host&x-id=GetObject",{"id":354,"name":355,"image":356,"linkedin":357,"x":14},"45c76823-ab7d-4c1f-84b3-0bad16ab91e1","Paul-Alexandre Chrétien","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc4f79dcc-a6ed-4a79-9947-416b33e5b90a\u002FPhoto_Profil_CV_1200px_%2813%29.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240926%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240926T191416Z&X-Amz-Expires=3600&X-Amz-Signature=54de1d32f7760312fb5a03455f51114ce13ce45c879f9cc601adc7b39a29b9f8&X-Amz-SignedHeaders=host&x-id=GetObject","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fpaulalexandrechretien\u002F",{"id":359,"name":360,"image":361,"linkedin":362,"x":363},"838dec96-f9fc-404f-a302-07719225d785","Maxime Deroullers","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc69d0b59-558d-4e48-879f-bea3fec1fdef\u002FLinkedin_Profile.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240926%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240926T191416Z&X-Amz-Expires=3600&X-Amz-Signature=ffc2acf38d64db342f06c5554d8cbc0a7da3f6ab5effba78949ba08d7fca35a7&X-Amz-SignedHeaders=host&x-id=GetObject","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmaxime-deroullers-1b5791137\u002F","https:\u002F\u002Fx.com\u002Fmderoullers",{"title":155,"description":347},"blogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-2\u002Findex",[149,150,151],"JmWCNopHxtcEchQWeZycMdlgQL7txr2aCx1j_2jvISo",{"id":369,"title":370,"alt":371,"authors":372,"body":375,"date":542,"description":543,"extension":130,"image":131,"meta":544,"navigation":133,"ogImage":131,"path":545,"published":133,"reviewers":546,"seo":562,"stem":563,"tags":564,"__hash__":569},"blogs\u002Fblogs\u002F2024-10-31-dora-metrics-valuer-la-performance-de-livraison-logicielle\u002Findex.md","DORA Metrics : Évaluer la performance de livraison logicielle","Image illustrant les DORA Metrics avec une fusée qui décolle vers la lune dans un style pop",[373],{"id":359,"name":360,"image":374,"linkedin":362,"x":363},".\u002Fassets\u002Fauthor-maxime-deroullers.webp",{"type":16,"value":376,"toc":535},[377,380,389,392,396,405,408,417,420,427,430,437,440,448,451,466,470,473,484,487,490,496,504,508,511,515,518,521,525,528],[19,378,379],{},"Cet article explore les DORA Metrics, également connues sous le nom de « Four Keys », un standard émergent pour évaluer la performance de la livraison logicielle. Ayant eu l'opportunité de mettre en place ces métriques chez un grand acteur du retail — comptant plus de 50 000 projets, 8 000 développeurs et présent sur les 5 continents — je souhaite partager les leçons et recommandations tirées de cette expérience.",[19,381,382,383,388],{},"Dans cet article, nous nous concentrerons sur les aspects théoriques et fondamentaux des ",[50,384,387],{"href":385,"rel":386},"https:\u002F\u002Fblog.hoppr.tech\u002Ftags\u002Fdora%20metrics",[54],"DORA Metrics",".",[19,390,391],{},"L'objectif est de vous permettre de saisir les concepts essentiels, tandis que les articles suivants détailleront la mise en place pratique, les adaptations nécessaires (car il y a toujours un écart entre théorie et pratique), ainsi que les avantages et les limites que j'ai pu observer dans l'application de ce modèle.",[29,393,395],{"id":394},"quest-ce-que-les-métriques-dora","Qu'est-ce que les métriques DORA ?",[19,397,398,399,404],{},"Les métriques DORA, issues du rapport  \"",[50,400,403],{"href":401,"rel":402},"https:\u002F\u002Fcloud.google.com\u002Fdevops\u002Fstate-of-devops",[54],"Accelerate State of DevOps","\" de DORA (DevOps Research and Assessment), sont un ensemble de quatre indicateurs clés de performance (KPI) qui permettent d'évaluer de manière objective l'efficacité et la stabilité des processus de développement et de déploiement logiciel d'une organisation.",[19,406,407],{},"Examinons chacune de ces métriques en détail :",[409,410,411],"ol",{},[280,412,413],{},[414,415,416],"strong",{},"Lead Time for Changes (Délai de livraison des changements)",[19,418,419],{},"Cette métrique mesure le temps écoulé entre le moment où un changement est codé et le moment où il est déployé en production. Un délai plus court indique une capacité à répondre rapidement aux besoins des utilisateurs, améliorant ainsi l'expérience utilisateur.",[409,421,422],{"start":117},[280,423,424],{},[414,425,426],{},"Deployment Frequency (Fréquence de déploiement)",[19,428,429],{},"Elle mesure la fréquence à laquelle les changements sont déployés en production. Une fréquence élevée suggère que le déploiement est devenu une opération de routine, ce qui permet une réponse rapide aux besoins des utilisateurs et améliore la boucle de feedback.",[409,431,432],{"start":124},[280,433,434],{},[414,435,436],{},"Mean Time to Restore (MTTR) (Temps moyen de restauration)",[19,438,439],{},"Le MTTR mesure le temps nécessaire pour restaurer le service après un incident en production. Un MTTR court indique une réactivité élevée et une boucle de feedback courte, ce qui devrait améliorer l'expérience utilisateur.",[409,441,443],{"start":442},4,[280,444,445],{},[414,446,447],{},"Change Failure Rate (Taux d'échec des changements)",[19,449,450],{},"Cette métrique mesure le taux de changements qui entraînent un échec ou un incident. Un taux faible implique une bonne compréhension des besoins des utilisateurs et une réponse appropriée, ce qui devrait améliorer l'expérience utilisateur.",[19,452,453,454,459,460,465],{},"Pour calculer les 4 keys, l'équipe DORA a développé une solution sur ",[50,455,458],{"href":456,"rel":457},"https:\u002F\u002Fgithub.com\u002Fdora-team\u002Ffourkeys\u002Ftree\u002Fmain",[54],"GitHub",".\nVous y trouverez les ",[50,461,464],{"href":462,"rel":463},"https:\u002F\u002Fgithub.com\u002Fdora-team\u002Ffourkeys\u002Fblob\u002Fmain\u002FMETRICS.md",[54],"requêtes SQL nécessaires au calcul des métriques",". Bien que cette solution soit difficilement applicable telle quelle — car peu adaptée au contexte spécifique de chaque entreprise — elle constitue néanmoins une excellente base théorique pour comprendre le fonctionnement des métriques.",[29,467,469],{"id":468},"les-niveaux-de-performance","Les niveaux de performance",[19,471,472],{},"Les métriques DORA définissent trois niveaux de performance principaux :",[277,474,475,478,481],{},[280,476,477],{},"Low",[280,479,480],{},"Medium",[280,482,483],{},"High",[19,485,486],{},"Selon les années, un quatrième niveau peut être ajouté : Elite, mais la logique reste la même.",[19,488,489],{},"Ces niveaux de performance permettent aux équipes de se positionner par rapport aux meilleures pratiques de l'industrie et d'identifier les domaines d'amélioration potentiels dans leurs processus de développement et de livraison logicielle.",[19,491,492],{},[66,493],{"alt":494,"src":495},"Tableau \"Software delivery performance metric\" avec 4 colonnes (Software delivery performance metric, Low, Medium, High) et 4 lignes de métriques : Deployment frequency, Lead time for changes, Time to restore service, Change failure rate, montrant les valeurs pour chaque niveau de performance (Low, Medium, High).","\u002Fcontent-assets\u002F2024-10-31-dora-metrics-valuer-la-performance-de-livraison-logicielle\u002Fassets\u002Fimg1.webp",[19,497,498,499,388],{},"Pour plus de détails sur ces seuils de performance, vous pouvez ",[50,500,503],{"href":501,"rel":502},"https:\u002F\u002Fcloud.google.com\u002Fblog\u002Fproducts\u002Fdevops-sre\u002Fdora-2022-accelerate-state-of-devops-report-now-out?hl=en",[54],"consulter la documentation DORA officielle",[29,505,507],{"id":506},"pourquoi-ces-métriques-sont-elles-importantes","Pourquoi ces métriques sont-elles importantes ?",[19,509,510],{},"En mesurant et en surveillant ces métriques, les équipes de développement obtiennent une vue d'ensemble de leur performance et peuvent identifier des axes d'amélioration. Par exemple, si le délai de livraison des changements est élevé (disons 2 semaines au lieu de plusieurs livraisons par jour pour une performance élevée), l'équipe peut se concentrer sur l'amélioration de ses processus de développement. Si le MTTR est élevé (par exemple, 24 heures au lieu de moins d'une heure pour une performance élevée), l'accent peut être mis sur l'amélioration des processus de réponse aux incidents.",[29,512,514],{"id":513},"une-approche-data-driven","Une approche “Data-Driven”",[19,516,517],{},"En utilisant ces métriques, les équipes peuvent prendre des décisions fondées sur des données concrètes plutôt que sur l'intuition. Ces décisions deviennent ainsi objectives et communicables, s'appuyant sur des preuves tangibles plutôt que sur des émotions ou des biais.",[19,519,520],{},"De plus, l'utilisation de métriques communes à travers les équipes et les projets facilite le partage d'expériences et l'amélioration continue. En collectant et en analysant ces données, les équipes peuvent mesurer les résultats de leurs efforts d'amélioration continue et partager leurs expériences à travers l'organisation.",[29,522,524],{"id":523},"conclusion","Conclusion",[19,526,527],{},"Les métriques DORA (Four Keys) offrent un cadre pour évaluer et améliorer la performance de livraison logicielle. Ces quatre indicateurs  permettent aux équipes d'être en amélioration continue, de répondre plus efficacement aux besoins des utilisateurs et, en fin de compte, de livrer des logiciels de meilleure qualité, plus rapidement et de manière plus fiable.",[19,529,530,534],{},[50,531,533],{"href":385,"rel":532},[54],"Dans un prochain article",", nous aborderons l'aspect pratique et verrons qu'il n'est pas si simple de mettre en place les métriques DORA, et surtout de les adapter au contexte métier et organisationnel de l’entreprise.",{"title":116,"searchDepth":117,"depth":117,"links":536},[537,538,539,540,541],{"id":394,"depth":117,"text":395},{"id":468,"depth":117,"text":469},{"id":506,"depth":117,"text":507},{"id":513,"depth":117,"text":514},{"id":523,"depth":117,"text":524},"2024-10-31T16:34:09.365Z","Cet article explore les DORA Metrics, également connues sous le nom de « Four Keys », un standard émergent pour évaluer la performance de la livraison logicielle. Ayant eu l'opportunité de mettre en p",{},"\u002Fblogs\u002F2024-10-31-dora-metrics-valuer-la-performance-de-livraison-logicielle",[547,549,551,556],{"id":354,"name":355,"image":548,"linkedin":357,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc4f79dcc-a6ed-4a79-9947-416b33e5b90a\u002FPhoto_Profil_CV_1200px_%2813%29.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45GO43JXI4%2F20241031%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T163408Z&X-Amz-Expires=3600&X-Amz-Signature=17d42cc8fa7348e15880615a184d9cc03d4312fbba9f691f469ea7575728026d&X-Amz-SignedHeaders=host&x-id=GetObject",{"id":142,"name":143,"image":550,"linkedin":145,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc88f5dfa-16db-4e6f-acf1-34dd80ee8766\u002Femma_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45GO43JXI4%2F20241031%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T163408Z&X-Amz-Expires=3600&X-Amz-Signature=199b4667885bca080d58b9704e19238b32d17675e3c643b6f5c73ce405930bc3&X-Amz-SignedHeaders=host&x-id=GetObject",{"id":552,"name":553,"image":554,"linkedin":555,"x":14},"e8163b24-7e01-41c5-adbf-0dc655f929d0","Nicolas Zago","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Ff8f82a79-9d41-4302-b1a5-37882985167f\u002Fnicoz_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45GO43JXI4%2F20241031%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T163408Z&X-Amz-Expires=3600&X-Amz-Signature=b41d2e5cff05fcfcad7a6b7423c10495eeac36a4925a05cac543c2bc49d9c71a&X-Amz-SignedHeaders=host&x-id=GetObject","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fnicolaszago\u002F",{"id":557,"name":558,"image":559,"linkedin":560,"x":561},"02c620f8-3576-4943-b5cf-6117f99220a2","Edouard Cattez","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F02dd23b5-238a-4713-ad54-432f3fa5119b\u002Fecattez_profile.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45GO43JXI4%2F20241031%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T163409Z&X-Amz-Expires=3600&X-Amz-Signature=62a6fb7395f1a4beceedbc9d816bde48517d66ab1f0715d4174e49c2314436f2&X-Amz-SignedHeaders=host&x-id=GetObject","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fedouard-cattez-865794133\u002F","https:\u002F\u002Fx.com\u002Fecattez",{"title":370,"description":543},"blogs\u002F2024-10-31-dora-metrics-valuer-la-performance-de-livraison-logicielle\u002Findex",[565,566,150,567,568,151],"dora metrics","devops","performance","observabilité","02O3nnqMxX0qEIFlEpZBfSKGGmji9sEf_8tK7bdpLXs",{"id":571,"title":572,"alt":573,"authors":574,"body":576,"date":882,"description":883,"extension":130,"image":131,"meta":884,"navigation":133,"ogImage":131,"path":885,"published":133,"reviewers":886,"seo":893,"stem":894,"tags":895,"__hash__":898},"blogs\u002Fblogs\u002F2024-10-31-lobservabilit-un-pilier-essentiel-dans-ladoption-du-cloud-et-des-architectures-modernes\u002Findex.md","L'Observabilité : Un Pilier Essentiel dans l’adoption du Cloud et des architectures modernes","Observabilité et stratégie",[575],{"id":10,"name":11,"image":12,"linkedin":13,"x":14},{"type":16,"value":577,"toc":869},[578,581,598,601,604,608,611,637,640,649,652,656,659,691,695,698,701,704,707,711,720,723,729,733,736,765,769,772,775,778,798,804,807,811,814,818,821,824,828,831,845,849,852,859,863,866],[19,579,580],{},"Avec l'essor des technologies, notamment de l’IA, les grands groupes comme les start-up se tournent vers des plateformes modernes, parfois complexes (microservices, kubernetes, NoSQL, kafka, …), ainsi que vers des environnements Clouds tels que GCP, AWS ou Azure . Cette utilisation n’est pas toujours encapsulée dans un écosystème optimal dont voici les principaux organes:",[277,582,583,586,589,592,595],{},[280,584,585],{},"Le DevOps\u002FSRE",[280,587,588],{},"L’Agilité",[280,590,591],{},"Les bonnes pratiques d’architecture",[280,593,594],{},"Les bonnes pratiques de développement (Software Craftsmanship)",[280,596,597],{},"L’Observabilité",[19,599,600],{},"Souvent traité dans un second temps, l’Observabilité est pourtant essentielle à la réussite et au suivi de votre projet. Comment pouvons-nous améliorer notre application si nous ne sommes pas capables de mesurer ? L’observation des applications dans leur ensemble permet de valider que vous vous dirigez dans la bonne direction (ou la mauvaise).",[19,602,603],{},"Dans cet article, nous allons explorer comment l'Observabilité est incontournable pour maitriser votre transformation et comment Datadog a su proposer une des solutions d’Observabilité les plus avancées du marché.",[29,605,607],{"id":606},"comprendre-lobservabilité-et-ses-enjeux","Comprendre l’Observabilité et ses Enjeux",[19,609,610],{},"L'Observabilité est un concept qui découle du monitoring (infrastructures, applications). Elle est d’ailleurs souvent confondue avec la supervision. Cependant, l’Observabilité est plus complexe et apporte un grand nombre de nouveaux concepts:",[277,612,613,616,619,622,625,628,631,634],{},[280,614,615],{},"Accessible à tous (métier et technique)",[280,617,618],{},"Corrélation des données",[280,620,621],{},"Propose une vue d’ensemble (expérience utilisateur, sécurité, application, Cloud, ...)",[280,623,624],{},"Accepte plus de type de données comme le coûts d’utilisation des services Cloud",[280,626,627],{},"Intègre une gestion des incidents",[280,629,630],{},"Propose des services d’aide à la décision basé sur l‘IA",[280,632,633],{},"L’approche proactive (détection avant l’incident)",[280,635,636],{},"vision holistique de vos produits (applications)",[19,638,639],{},"En termes plus simples, c'est la capacité à comprendre ce qui se passe dans un système complexe en observant ses métriques, ses logs, ses traces et toutes autres données pertinentes. Dans le principe, plus vous ingérez de types de données, plus l’observation sera efficace. L’origine d’un événement (incident, changement de performance, volumétrie, …) est instantanément compréhensible et nous le voyons avec toutes ses adhérences. Par exemple, une perte de qualité sur l’application mobile peut-être identifiée par une trace (ligne de code), une métrique Cloud, à un journal et à un autre évènement tel qu’une mise en production.",[19,641,642,643,648],{},"Cette évolution de la supervision, permet également des démarches FinOps et ",[50,644,647],{"href":645,"rel":646},"https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-1",[54],"GreenOps",", très utiles avec les services Cloud.",[19,650,651],{},"En raison de la nature distribuée des architectures Cloud modernes, il devient essentiel d’avoir une visibilité complète et en temps réel sur les applications pour détecter les problèmes potentiels avant qu'ils n'affectent les utilisateurs.",[29,653,655],{"id":654},"pourquoi-lobservabilité-est-cruciale","Pourquoi l'Observabilité est cruciale",[19,657,658],{},"Lors de l’adoption ou la migration vers le Cloud Public, plusieurs éléments doivent être surveillés de près :",[409,660,661,667,673,679,685],{},[280,662,663,666],{},[414,664,665],{},"Performance des Applications :","  Plus votre application sera performante, plus vous serez en capacité d’optimiser votre utilisation du Cloud, donc votre facture. De plus, la latence, le temps de réponse des applications peuvent fluctuer au cours de la migration. Il est important d’avoir une vue très détaillée (à la ligne de code) des performances pendant la phase d’adoption ou de migration.",[280,668,669,672],{},[414,670,671],{},"Disponibilité des Services :"," La transition vers le Cloud implique souvent le découpage des applications en microservices. Cette réorganisation entraîne une multiplication des points de défaillance potentiels. Une vue d’ensemble permet de suivre la santé de chaque service et d’éviter de se perdre dans des applications, notamment avec le FaaS (Function-as-a-Service).",[280,674,675,678],{},[414,676,677],{},"Coût :"," Le Cloud Public offre une flexibilité exceptionnelle, mais peut aussi générer des coûts imprévus. L'Observabilité peut mettre en évidence les ressources sous-utilisées ou sur-provisionnées, aidant ainsi à optimiser les coûts.",[280,680,681,684],{},[414,682,683],{},"Sécurité :"," Il est important de ne pas délaisser la sécurité qui doit faire partie intégrante de l’observation de vos applications.",[280,686,687,690],{},[414,688,689],{},"Ressenti utilisateur :"," Une migration peut, même dans le cas de meilleures performances backend, avoir un impact significatif sur vos utilisateurs. S’il est positif, cette donnée justifiera votre décision de migrer.",[29,692,694],{"id":693},"comment-aborder-lobservabilité","Comment aborder l’Observabilité",[19,696,697],{},"L’Observabilité ne doit pas être considérée comme solution à un problème technique. Son succès repose dans des fondations basées sur vos besoins métiers et son acceptation par tous.",[19,699,700],{},"A contrario de la supervision, qui n’est qu’un moyen technique de répondre à un besoin technique, il est essentiel de se poser les bonnes questions: ce dont vous avez réellement besoin doit être identifié.",[19,702,703],{},"Prenons l’exemple d’une Fintech:  elle doit répondre à des critères stricts comme la qualité de son service, la sécurité des données ou encore répondre à une forte croissance. Dans ce contexte, il parait évident que ses critères ne sont pas réservés aux équipes de développement. Il est préférable que les équipes directions ou clientèles connaissent l’état de leur solution et qu’un incident soit détecté rapidement, voire avant qu’il ne se produise. Et dans le cas d’un dysfonctionnement, il est impératif d’identifier le plus rapidement possible l’origine du problème. C’est ce que doit permettre l’Observabilité.",[19,705,706],{},"Une solution trop technique et complexe, ne servira que les équipes techniques et ne permettra pas forcément de comprendre l’impact pour les clients ou sur le CA de l’entreprise. De plus, un outil qui ne rassemble pas et n’exploite pas l’ensemble des données utiles à cette tâche ne sera pas efficace.",[29,708,710],{"id":709},"datadog-lincontournable","Datadog, l’incontournable",[19,712,713,714,719],{},"Malgré un marché établi dans le domaine du monitoring et de la supervision, ",[50,715,718],{"href":716,"rel":717},"https:\u002F\u002Fwww.datadoghq.com\u002Ffr",[54],"Datadog"," a su se faire une place de leader avec l’émergence du Cloud Public.",[19,721,722],{},"Ayant accompagné de nombreuses sociétés avec Datadog notamment un leader de l’immobilier, une filiale d’un des plus gros fournisseurs mondiaux de services de restauration ou encore une Fintech; je vous propose mes retours d’expériences.",[19,724,725],{},[66,726],{"alt":727,"src":728},"Gartner, Magic Quadrant for Observability Platforms, Gregg Siegfried, Padraig Byrne, Mrudula Bangera, Matt Crossley, 12 August 2024","\u002Fcontent-assets\u002F2024-10-31-lobservabilit-un-pilier-essentiel-dans-ladoption-du-cloud-et-des-architectures-modernes\u002Fassets\u002Fimg1.webp",[29,730,732],{"id":731},"démarrer-de-zéro","Démarrer de zéro",[19,734,735],{},"Partons sur cette Startup bancaire. Elle disposait malgré ses liens avec une des principales banques française d’une indépendance technologique. Plus exactement, nous avons développé de zéro une solution bancaire en nous appuyant uniquement de technologies Cloud Public et sur Datadog bien évidement. Nous avions pris en compte les critères Fintech, cités plus haut, mais nous avions un objectif plus urgent: le Time to Market. Avec une disponibilité de l’application en quelques mois et des responsabilité bancaires, la question de l’Observabilité a été intégrée dès l’origine. Datadog donnait une vision :",[277,737,738,747,750,753,756,759,762],{},[280,739,740,741,746],{},"des tests métiers (approche ",[50,742,745],{"href":743,"rel":744},"https:\u002F\u002Fblog.hoppr.tech\u002Ftags\u002Fddd",[54],"DDD",")",[280,748,749],{},"la qualité de l’expérience utilisateur",[280,751,752],{},"la surveillance de la sécurité de l’intégralité de l’application et de son développement",[280,754,755],{},"le taux de disponibilité, dont les SLA du Core Banking",[280,757,758],{},"l’impact utilisateur des mises en production (jusqu’à 300\u002Fsemaine dans les premiers mois)",[280,760,761],{},"des performances",[280,763,764],{},"des KPI métier, technique, FinOps, etc…\nCependant son implémentation était relativement simple car intégrée dès l’origine. Maintenant, évoquons le déploiement à l’échelle d’une entreprise de promotion immobilière cotée, avec des centaines de projets historiques comme novateurs.",[29,766,768],{"id":767},"intégrer-lobservabilité-à-léchelle","Intégrer l’Observabilité à l’échelle",[19,770,771],{},"Dans cette situation, il ne faut pas que la solution soit portée par des objectifs purement techniques. Il y a également des enjeux d’échelle qui impliquent une organisation de l’Observabilité et des enjeux financiers et écologiques (CSRD).",[19,773,774],{},"Dans un premier temps, il faut prendre en compte l’ensemble des besoins de tous les acteurs : du DSI au développeur en passant par les responsables métiers. Pensez également à intégrer les responsables FinOps et GreenOps. Il est également indispensable d’avoir un inventaire des projets avec leurs priorités et criticités. Une étude permettra de choisir le meilleur outil mais aussi les étapes nécessaires à son adoption. Dans mon cas où la migration Cloud Public était finalisée, Datadog remporta haut la main la première place.",[19,776,777],{},"La seconde étape passe par la définitions des rôles des différents utilisateurs et la segmentation des données. Heureusement, Datadog propose un bon nombre de solutions:",[277,779,780,783,786,789,792,795],{},[280,781,782],{},"Organisation sur plusieurs comptes",[280,784,785],{},"Droits et RBAC",[280,787,788],{},"Index par données",[280,790,791],{},"Visibilité des Dashbords",[280,793,794],{},"Filtres",[280,796,797],{},"Etc…\nUne fois la question de l’organisation traitée, nous pouvons réaliser un premier MVP (Produit minimum viable) d’un échantillon de projets représentatifs basé sur: leurs criticités, leurs aspects technologiques mais aussi leurs contextes fonctionnels.",[19,799,800],{},[66,801],{"alt":802,"src":803},"Datadog propose une vision Map","\u002Fcontent-assets\u002F2024-10-31-lobservabilit-un-pilier-essentiel-dans-ladoption-du-cloud-et-des-architectures-modernes\u002Fassets\u002Fimg2.webp",[19,805,806],{},"Aujourd’hui, l’entreprise utilise Datadog sur l’ensemble de son spectre de projet (de l’agence immobilière à l’application de gestion des ventes) avec l’ensemble des équipes (technique ou non). Les rituels intègrent les rapports, l’infogérance est traitée via la solution, le pilotage FinOps du groupe est assuré par Datadog.",[29,808,810],{"id":809},"passer-au-niveau-supérieur-en-alliant-méthodologie-et-observabilité","Passer au niveau supérieur en alliant méthodologie et Observabilité",[19,812,813],{},"S’appuyer sur les piliers d’une approche moderne augmentera l’efficacité de l’Observabilité. Il est essentiel que tous les acteurs de vos projets interagissent avec votre outil d’Observabilité, en consomment et en intégrant leurs données. Ces outils sont un investissement financier qu’il est important de rentabiliser dans une démarche ouverte.",[29,815,817],{"id":816},"software-craftsmanship-pour-une-meilleure-intégration-de-lobservabilité","Software Craftsmanship : Pour une meilleure intégration de l’Observabilité",[19,819,820],{},"Le software craftsmanship est un mouvement qui prône l’excellence dans le développement logiciel, avec une attention particulière à la qualité du code, la testabilité et la maintenabilité.",[19,822,823],{},"Un code bien structuré, découplé et respectant les bonnes pratiques de software craftsmanship est plus facilement observable. Par exemple, les logs sont standardisés, les métriques sont instrumentées de manière cohérente et les erreurs sont gérées proprement.",[29,825,827],{"id":826},"devops-une-observabilité-industrialisée","DevOps: Une Observabilité industrialisée",[19,829,830],{},"L’approche DevOps améliore encore la perspective d’Observabilité. En effet, nous pouvons industrialiser un ensemble de nouveaux éléments:",[277,832,833,836,839,842],{},[280,834,835],{},"Déployer votre Observabilité en mode infrastructure as code (données, dashboard, alarme, …)",[280,837,838],{},"Les tests dans vos pipelines de déploiements intégrés avec votre outil d’Observabilité.",[280,840,841],{},"Automatiser des tests notamment dans vos déploiements sans indisponibilité (canary, blue and green, …)",[280,843,844],{},"Visualiser l’impact financier ou green d’une nouvelle fonctionnalité",[29,846,848],{"id":847},"agilité-lobservabilité-mesure-vos-kpi","Agilité: L’Observabilité mesure vos KPI",[19,850,851],{},"Afin de suivre l’avancée de votre projet et remonter des données pertinentes pendant vos rituels, un outil d’Observabilité sera un grand allié. C’est dans ces circonstances que l’on comprend l’intérêt de l’accessibilité lié à l’Observabilité, car ces données sont récupérables directement par le chef de projet, le scrum master, etc.",[19,853,854,855,388],{},"N’oubliez pas d’intégrer des KPI impacts environnementaux à vos projets (consommation carbone, valeur énergétique par utilisateur, …). Vous pouvez vous inspirez de notre article ",[50,856,155],{"href":857,"rel":858},"https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-2",[54],[29,860,862],{"id":861},"pour-conclure","Pour conclure",[19,864,865],{},"Que vous soyez DSI, CTO ou encore CPTO, vous avez une vision stratégique de l’Observabilité. C’est pour vous un élément concurrentiel, un gain de qualité de vos produits, un gain d’argent des fois conséquent. Cependant, l’appropriation d’une solution avec la bonne méthodologie par vos équipes n’est pas une chose simple. Vous faire accompagner dans cette démarche sera certainement un gain de temps et de réussite, mais soyez vigilant de choisir un partenaire qui sera capable d’aborder ce chantier à votre niveau.",[19,867,868],{},"Nous avons mis en avant Dadadog car, dans 9 fois sur 10, il ressort gagnant de nos études et benchmark, depuis déjà quelques années. Aujourd’hui convaincu par notre expérience dans l’accompagnement à l’Observabilité, HoppR a décidé de mettre en place un partenariat unique avec Datadog : HoppR et Datadog pour une Observabilité comme pilier stratégique.",{"title":116,"searchDepth":117,"depth":117,"links":870},[871,872,873,874,875,876,877,878,879,880,881],{"id":606,"depth":117,"text":607},{"id":654,"depth":117,"text":655},{"id":693,"depth":117,"text":694},{"id":709,"depth":117,"text":710},{"id":731,"depth":117,"text":732},{"id":767,"depth":117,"text":768},{"id":809,"depth":117,"text":810},{"id":816,"depth":117,"text":817},{"id":826,"depth":117,"text":827},{"id":847,"depth":117,"text":848},{"id":861,"depth":117,"text":862},"2024-10-31T16:21:44.196Z","Avec l'essor des technologies, notamment de l’IA, les grands groupes comme les start-up se tournent vers des plateformes modernes, parfois complexes (microservices, kubernetes, NoSQL, kafka, …), ainsi",{},"\u002Fblogs\u002F2024-10-31-lobservabilit-un-pilier-essentiel-dans-ladoption-du-cloud-et-des-architectures-modernes",[887,889,891],{"id":137,"name":138,"image":888,"linkedin":140,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F82ebd0fe-de28-43f3-ab7b-0431af41baad\u002FPhoto_HoppR.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45GO43JXI4%2F20241031%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T162144Z&X-Amz-Expires=3600&X-Amz-Signature=575fafdda7bf9cfe162a2357d2b8c4fd07170d9f398f28e2958fb9d613a531d5&X-Amz-SignedHeaders=host&x-id=GetObject",{"id":142,"name":143,"image":890,"linkedin":145,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc88f5dfa-16db-4e6f-acf1-34dd80ee8766\u002Femma_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45GO43JXI4%2F20241031%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T162144Z&X-Amz-Expires=3600&X-Amz-Signature=c3ec652c8438443b244fcc323f7d69cb3a6689d16e46ccd7512dd616836f78b1&X-Amz-SignedHeaders=host&x-id=GetObject",{"id":552,"name":553,"image":892,"linkedin":555,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Ff8f82a79-9d41-4302-b1a5-37882985167f\u002Fnicoz_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45GO43JXI4%2F20241031%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T162144Z&X-Amz-Expires=3600&X-Amz-Signature=df02b8ec0091aabb844ccd87f5ecc73a9d04622d0ecf0cd9ca81d722f3ca1c8f&X-Amz-SignedHeaders=host&x-id=GetObject",{"title":572,"description":883},"blogs\u002F2024-10-31-lobservabilit-un-pilier-essentiel-dans-ladoption-du-cloud-et-des-architectures-modernes\u002Findex",[151,896,568,566,897],"architecture","craft","IHNFVwmNOBdYB2cwFLg5qdqDGTksVCSw5EHmKp_U_kQ",{"id":900,"title":901,"alt":902,"authors":903,"body":906,"date":968,"description":969,"extension":130,"image":131,"meta":970,"navigation":133,"ogImage":131,"path":971,"published":133,"reviewers":972,"seo":975,"stem":976,"tags":977,"__hash__":978},"blogs\u002Fblogs\u002F2024-10-31-podcast-greenops-tamara-guilbert-x-samuel-bally\u002Findex.md","Podcast GreenOps Tamara Guilbert x Samuel Bally","Tamara et Samuel en podcast",[904],{"id":552,"name":553,"image":905,"linkedin":555,"x":14},".\u002Fassets\u002Fauthor-nicolas-zago.webp",{"type":16,"value":907,"toc":962},[908,913,916,919,923,926,929,933,936,939,943,946,949,952,959],[909,910,912],"h1",{"id":911},"le-greenops-lavenir-de-la-tech","🚀 Le GreenOps : L'Avenir de la Tech ?",[19,914,915],{},"Dans un monde où l'impact environnemental devient un sujet incontournable, la tech ne fait pas exception. Le concept de GreenOps émerge comme une réponse à cette problématique, et pourrait bien définir l'avenir de notre industrie.🌱",[19,917,918],{},"Dans son dernier épisode de Tech Your Dream, Tamara Guilbert a reçu Samuel Bally, Head of Cloud chez HoppR pour échanger ce sujet. Un grand merci pour invitation !",[29,920,922],{"id":921},"️de-quoi-parles-le-podcast","🎙️ De quoi parles le podcast ?",[19,924,925],{},"Si vous vous intéressez au Green dans le Cloud, ce podcast sera parfait pour débuter. L’évangélisation sur les notions de GreenOps, l’équilibre entre coût et production de gaz à effet de serre ou encore les leviers d’actions sont évoqués. Samuel vous raconte son expérience, ce qui a marché et les voies sans issues. Une immersion dans le GreenOps garanti sans GreenWashing.🌿",[19,927,928],{},"“C'est tellement compliqué à mesurer que plus nous essayons d'être précis plus nous avons de chances d'être loin de la vérité” - Samuel Bally",[87,930,932],{"id":931},"outils-clés-pour-un-cloud-plus-vert","🌍  Outils Clés pour un Cloud Plus Vert",[19,934,935],{},"Lors du podcast, Samuel partage des méthodes et outils pour évaluer l'impact carbone des projets technologiques. L'idée est d'aller au-delà des simples indicateurs de performance classiques, en introduisant des KPI écologiques.",[19,937,938],{},"L'observabilité est proposée comme une alliée précieuse. En suivant des Dashboard Green, nous pouvons ajuster la trajectoire de votre produit et comparer vos données CO2 avec les coûts, les performances ou encore l’impact utilisateur.",[87,940,942],{"id":941},"un-enjeux-pour-les-entreprises"," 🌱 Un enjeux pour les entreprises",[19,944,945],{},"Le podcast évoque les problématiques liée à la #CSRD (La Directive relative à la publication d'informations en matière de durabilité par les entreprises).",[19,947,948],{},"Samuel propose un approche raisonnée, afin de garder la main sur votre feuille de route et vos dépenses.",[19,950,951],{},"💚 S’engager dans une démarche GreenOps, c’est aussi une manière de se démarquer dans un secteur concurrentiel en constante évolution, notamment avec l’IA si consommatrice d’énergie.",[19,953,954,955],{},"Retrouvez dès maintenant l’intégralité du podcast : ",[50,956,957],{"href":957,"rel":958},"https:\u002F\u002Fopen.spotify.com\u002Fepisode\u002F2zihL4JMegzJML40oPyda1?si=uOM3YnVvQ4uX12qe5OG62w",[54],[19,960,961],{},"Bonne écoute 😄",{"title":116,"searchDepth":117,"depth":117,"links":963},[964],{"id":921,"depth":117,"text":922,"children":965},[966,967],{"id":931,"depth":124,"text":932},{"id":941,"depth":124,"text":942},"2024-10-31T16:21:19.696Z"," Dans un monde où l'impact environnemental devient un sujet incontournable, la tech ne fait pas exception. Le concept de GreenOps émerge comme une réponse à cette problématique, et pourrait bien défin",{},"\u002Fblogs\u002F2024-10-31-podcast-greenops-tamara-guilbert-x-samuel-bally",[973],{"id":10,"name":11,"image":974,"linkedin":13,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fb8425b05-a0a4-4560-964d-259e8a84c063\u002Fsamuel.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45GO43JXI4%2F20241031%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T162119Z&X-Amz-Expires=3600&X-Amz-Signature=1acb072d7d3f299253ce2bf16aae31eef99a752fc127927e9f4b7b68015536a3&X-Amz-SignedHeaders=host&x-id=GetObject",{"title":901,"description":969},"blogs\u002F2024-10-31-podcast-greenops-tamara-guilbert-x-samuel-bally\u002Findex",[149,151],"MtFkCIMJNLmPN8bUI98WafRYOPeYxfXmDejtm5ahmds",{"id":980,"title":981,"alt":7,"authors":982,"body":984,"date":1237,"description":1238,"extension":130,"image":131,"meta":1239,"navigation":133,"ogImage":131,"path":1240,"published":133,"reviewers":1241,"seo":1246,"stem":1247,"tags":1248,"__hash__":1249},"blogs\u002Fblogs\u002F2024-12-11-low-carbon-dans-le-cloud-partie-3\u002Findex.md","Low Carbon dans le Cloud - Partie 3",[983],{"id":10,"name":11,"image":12,"linkedin":13,"x":14},{"type":16,"value":985,"toc":1217},[986,998,1002,1005,1016,1022,1028,1035,1041,1044,1048,1051,1062,1068,1074,1079,1085,1088,1091,1094,1100,1106,1111,1116,1119,1133,1136,1139,1145,1157,1168,1172,1179,1189,1195,1198,1205,1207,1214],[19,987,236,988,992,993,997],{},[50,989,991],{"href":645,"rel":990},[54],"première partie"," abordait les concepts GreenOps et la ",[50,994,996],{"href":857,"rel":995},[54],"seconde partie"," les méthodes pour mesurer votre production de gaz à effet de serre. Dans cet article nous allons aborder les architectures Cloud Green. Nous allons donc rentrer dans des méthodes d’amélioration concrète. Pour cela, il faut comprendre les facteurs clés à prendre en compte.",[29,999,1001],{"id":1000},"les-3-facteurs-clés-de-larchitecture-cloud-green","Les 3 facteurs clés de l’architecture Cloud Green",[19,1003,1004],{},"L'architecture Cloud Green repose sur l'optimisation des ressources pour minimiser l'impact environnemental tout en maintenant des performances élevées. Il ne faut pas tomber dans la pauvreté numérique mais dans une certaine forme de sobriété saine. Parmi les piliers de cette approche, trois facteurs jouent un rôle essentiel :",[277,1006,1007,1010,1013],{},[280,1008,1009],{},"La répartition géographique où sont hébergés vos services Cloud (ou le type de source d’énergie pour les sites véritablement autonomes)",[280,1011,1012],{},"Le moment où une charge de travail est exécutée (par exemple je génère mon modèle IA à 11H)",[280,1014,1015],{},"La répartition de la charge de travail dans le temps.",[29,1017,1019],{"id":1018},"spatial-shifting-optimisation-géographique",[414,1020,1021],{},"Spatial Shifting : Optimisation Géographique",[19,1023,1024],{},[66,1025],{"alt":1026,"src":1027},"Spatial Shifting","\u002Fcontent-assets\u002F2024-12-11-low-carbon-dans-le-cloud-partie-3\u002Fassets\u002Fimg1.webp",[19,1029,1030,1031,1034],{},"Le ",[1032,1033,1026],"em",{}," consiste à exploiter les ressources cloud disponibles dans différentes régions géographiques pour minimiser l’impact environnemental. Bonne nouvelle, les principaux Cloud Providers proposent plusieurs régions (exemple: Paris, Dublin, Hong Kong, Stockholm, ...).",[87,1036,1038],{"id":1037},"comment-ça-fonctionne",[414,1039,1040],{},"Comment ça fonctionne ?",[19,1042,1043],{},"Les fournisseurs cloud opèrent dans des zones ayant des mix énergétiques différents. Comme vu dans l’article précédent, un centre de données en Norvège, alimenté principalement par des énergies renouvelables, a une empreinte carbone bien moindre qu’un centre situé dans une région dépendant du charbon. En redirigeant les charges de travail vers des régions avec une énergie plus verte, il est possible de réduire considérablement les émissions.",[87,1045,1047],{"id":1046},"mon-retour-dexpérience","Mon retour d’expérience",[19,1049,1050],{},"Je considère qu’il s’agit du meilleur facteur d’optimisation possible si nous partons d’un pays qui ne propose ni énergie verte, ni nucléaire. Les gains de CO2 peuvent atteindre les 1 000%. Cependant, il faut prendre en compte des effets de bord importants :",[277,1052,1053,1056,1059],{},[280,1054,1055],{},"Une migration peut être complexe surtout si nous ne sommes pas sur de l’infrastructure as code",[280,1057,1058],{},"Le prix des services cloud change en fonction de la région, la différence peut être de l’ordre de 20%",[280,1060,1061],{},"Il faut prendre en compte les performances si nous nous éloignons des utilisateurs (par exemple : une application pour la Pologne avec des services hébergés en France).",[29,1063,1065],{"id":1064},"temporal-shifting-exploitation-des-fenêtres-de-temps",[414,1066,1067],{},"Temporal Shifting : Exploitation des Fenêtres de Temps",[19,1069,1070],{},[66,1071],{"alt":1072,"src":1073},"Temporal Shifting","\u002Fcontent-assets\u002F2024-12-11-low-carbon-dans-le-cloud-partie-3\u002Fassets\u002Fimg2.webp",[19,1075,1030,1076,1078],{},[1032,1077,1072],{}," consiste à planifier les charges de travail pour qu’elles s’exécutent aux moments où l’énergie renouvelable est la plus abondante.",[87,1080,1082],{"id":1081},"pourquoi-est-ce-efficace",[414,1083,1084],{},"Pourquoi est-ce efficace ?",[19,1086,1087],{},"La disponibilité d’énergie renouvelable fluctue en fonction de l’heure et des conditions météorologiques. Par exemple, l’énergie solaire est abondante en journée, tandis que l’éolienne peut être plus efficace la nuit. En ajustant les horaires d’utilisation des services Cloud, nous pouvons optimiser la consommation énergétique et en corrélation la production de gaz à effet de serre.",[87,1089,1047],{"id":1090},"mon-retour-dexpérience-1",[19,1092,1093],{},"Il s’agit d’un excellent moyen de gérer des tâches récurrentes comme les sauvegardes ou la mise à jour de son modèle IA. Malheureusement, cette méthode d’architecture Green n’est pas adaptée aux énergies non renouvelables ni à tous nos besoins.",[29,1095,1097],{"id":1096},"demand-shifting-ajustement-de-la-demande",[414,1098,1099],{},"Demand Shifting : Ajustement de la Demande",[19,1101,1102],{},[66,1103],{"alt":1104,"src":1105},"Demand Shifting","\u002Fcontent-assets\u002F2024-12-11-low-carbon-dans-le-cloud-partie-3\u002Fassets\u002Fimg3.webp",[19,1107,1030,1108,1110],{},[1032,1109,1104],{}," vise à réduire ou à redistribuer la demande en fonction de la disponibilité des ressources et de l’impact énergétique.",[87,1112,1114],{"id":1113},"comment-ça-fonctionne-1",[414,1115,1040],{},[19,1117,1118],{},"Nous savons pertinemment que nous ne pouvons pas mettre en pause une fission nucléaire et que nous ne pouvons pas stocker l’excédant d’énergie produit la nuit. Dans la philosophie du Demand Shifting, nous sommes assez proche des tarifs heures pleine heure creuse d’EDF. Voici, 2 situations plus parlantes:",[277,1120,1121,1127],{},[280,1122,1123,1126],{},[414,1124,1125],{},"Étalement de la charge"," : Répartir les traitements sur plusieurs périodes pour éviter les pics de demande.",[280,1128,1129,1132],{},[414,1130,1131],{},"Gestion des utilisateurs"," : Encourager les utilisateurs finaux à consommer des ressources à des moments spécifiques grâce à des incitations (comme des tarifs réduits).",[87,1134,1047],{"id":1135},"mon-retour-dexpérience-2",[19,1137,1138],{},"C’est certainement la méthode la plus impactante pour les usagers et sa mise en œuvre demande de sortir de l’aspect purement technique.",[29,1140,1142],{"id":1141},"limpact-combiné-des-3-facteurs",[414,1143,1144],{},"L’Impact Combiné des 3 Facteurs",[19,1146,1147,1148,1150,1151,1153,1154,1156],{},"En combinant le ",[1032,1149,1026],{},", le ",[1032,1152,1072],{}," et le ",[1032,1155,1104],{},", il est possible d’atteindre un niveau d’efficacité encore plus important en profitant de l’effet de synergie. En résumé, ces stratégies permettent :",[277,1158,1159,1162,1165],{},[280,1160,1161],{},"Une réduction significative de l’empreinte carbone et potentiellement des coûts.",[280,1163,1164],{},"Une meilleure résilience de vos applications grâce à une répartition dynamique des charges d’utilisation des services Cloud.",[280,1166,1167],{},"Une contribution active aux objectifs de durabilité de votre entreprise (RSE).",[29,1169,1171],{"id":1170},"aller-plus-loin-dans-léco-cloud-native-avec-le-serverless","Aller plus loin dans l’éco-Cloud-Native avec le Serverless",[19,1173,1174,1175,1178],{},"L’adoption du ",[414,1176,1177],{},"Serverless,"," comme principale architecture de vos projets, apparaît comme une solution intéressante. En effet, le modèle Serverless, en permettant de consommer des ressources uniquement lorsqu’elles sont nécessaires (à la seconde près), réduit le gaspillage énergétique et d’optimiser les coûts.",[19,1180,1181,1182,1150,1184,1153,1186],{},"De plus, les architectures Serverless sont compatibles avec le ",[414,1183,1026],{},[414,1185,1072],{},[414,1187,1188],{},"Demand Shifting.",[19,1190,1191],{},[66,1192],{"alt":1193,"src":1194},"https:\u002F\u002Faws.amazon.com\u002Ffr\u002Fserverless\u002F","\u002Fcontent-assets\u002F2024-12-11-low-carbon-dans-le-cloud-partie-3\u002Fassets\u002Fimg4.webp",[87,1196,1047],{"id":1197},"mon-retour-dexpérience-3",[19,1199,1200,1201,1204],{},"Il est important de souligner que cette architecture est complexe à gérer à grande échelle. Un projet de 300 fonctions interdépendantes imposera beaucoup de contraintes. Il est possible d’introduire le Serverless dans vos projets en le mixant avec une architecture plus courante comme du Kubernetes. Le ",[414,1202,1203],{},"Function as a Service"," s’associe bien avec une approche Frontend ou des tâches récurrentes. Nous vous proposerons un article complet sur le Serverless prochainement sur notre blog.",[29,1206,524],{"id":523},[19,1208,1209,1210,1213],{},"Vous avez maintenant quelques exemples de démarches green pour agir avec vos applications dans le Cloud. Il ne faudra pas oublier de mettre en place des KPI et une Observabilité Green pour aller au bout de votre projet. Pour cela, je vous conseille de lire la ",[50,1211,996],{"href":857,"rel":1212},[54]," de notre article.",[19,1215,1216],{},"Il existe bien sûr d’autres mécanismes permettant d’améliorer vos architectures Cloud que nous aborderons dans un autre volet.",{"title":116,"searchDepth":117,"depth":117,"links":1218},[1219,1220,1224,1228,1232,1233,1236],{"id":1000,"depth":117,"text":1001},{"id":1018,"depth":117,"text":1021,"children":1221},[1222,1223],{"id":1037,"depth":124,"text":1040},{"id":1046,"depth":124,"text":1047},{"id":1064,"depth":117,"text":1067,"children":1225},[1226,1227],{"id":1081,"depth":124,"text":1084},{"id":1090,"depth":124,"text":1047},{"id":1096,"depth":117,"text":1099,"children":1229},[1230,1231],{"id":1113,"depth":124,"text":1040},{"id":1135,"depth":124,"text":1047},{"id":1141,"depth":117,"text":1144},{"id":1170,"depth":117,"text":1171,"children":1234},[1235],{"id":1197,"depth":124,"text":1047},{"id":523,"depth":117,"text":524},"2024-12-11T16:34:44.847Z","La [première partie](https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-1) abordait les concepts GreenOps et la [seconde partie](https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2024-09-26-low-carb",{},"\u002Fblogs\u002F2024-12-11-low-carbon-dans-le-cloud-partie-3",[1242,1244],{"id":359,"name":360,"image":1243,"linkedin":362,"x":363},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc69d0b59-558d-4e48-879f-bea3fec1fdef\u002FLinkedin_Profile.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241211%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241211T163444Z&X-Amz-Expires=3600&X-Amz-Signature=c9d6d6801859737747500b04eb94e511aed919049c4069983d15148b541edf61&X-Amz-SignedHeaders=host&x-id=GetObject",{"id":137,"name":138,"image":1245,"linkedin":140,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F82ebd0fe-de28-43f3-ab7b-0431af41baad\u002FPhoto_HoppR.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45FSPPWI6X%2F20241211%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20241211T163444Z&X-Amz-Expires=3600&X-Amz-Signature=3eab78f42c8c71eff9464a07870eca0de30b713c29b80df6745642226f3a3ba3&X-Amz-SignedHeaders=host&x-id=GetObject",{"title":981,"description":1238},"blogs\u002F2024-12-11-low-carbon-dans-le-cloud-partie-3\u002Findex",[149,150,151,896],"qY2gRx9hbZB1kD2tEj0Q1ja_rogKcmzkAbeeBwJ6oMM",{"id":1251,"title":1252,"alt":1253,"authors":1254,"body":1256,"date":11018,"description":11019,"extension":130,"image":131,"meta":11020,"navigation":133,"ogImage":131,"path":11021,"published":133,"reviewers":11022,"seo":11029,"stem":11030,"tags":11031,"__hash__":11032},"blogs\u002Fblogs\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex\u002Findex.md","Bref, j’ai mis en place les DORA Metrics dans un grand groupe ! (REX 🦖)","Image abstraite représentant les metrics avec un tyrannosaure pour illustrer le REX",[1255],{"id":359,"name":360,"image":374,"linkedin":362,"x":363},{"type":16,"value":1257,"toc":10973},[1258,1271,1288,1291,1295,1299,1302,1305,1316,1319,1339,1345,1349,1357,1363,1374,1377,1391,1395,1398,1402,1407,1421,1424,1428,1433,1453,1458,1461,1468,1472,1477,1488,1493,1513,1518,1521,1524,1528,1533,1547,1552,1563,1573,1577,1580,1609,1613,1618,1632,1637,1640,1643,1647,1655,1658,1662,1667,1683,1688,1699,1703,1708,1719,1724,1732,1736,1741,1749,1754,1762,1766,1771,1782,1787,1798,1802,1807,1818,1823,1834,1837,1841,1849,1853,1858,1861,1875,1878,1882,2003,2007,2059,2063,2117,2121,2129,2133,2136,2144,2147,2166,2172,2179,2271,2566,2569,2572,2579,2582,2585,2605,3001,3004,3011,3014,3034,3348,3351,3355,3363,3366,3372,3378,3384,3388,3393,3843,3846,4106,4111,4490,4492,4692,4697,5067,5069,5271,5276,5649,5651,5850,5853,5857,6108,6110,6247,6251,6460,6462,6547,6551,6761,6763,6847,6851,7070,7072,7156,7159,7163,7168,7172,7459,7461,7598,7602,7910,7912,7968,7972,8280,8282,8338,8342,8346,8351,8355,8643,8645,8800,8804,9028,9030,9049,9053,9276,9278,9297,9301,9307,9330,9333,9337,9574,9779,9783,9794,10033,10037,10048,10423,10427,10438,10535,10539,10544,10555,10560,10571,10576,10587,10592,10595,10741,10746,10749,10760,10763,10767,10774,10791,10794,10805,10809,10816,10819,10822,10826,10833,10836,10840,10847,10850,10853,10873,10876,10880,10883,10915,10919,10922,10942,10945,10948,10951,10954,10969],[19,1259,1260,1261,1266,1267,1270],{},"Nouvel article qui fait suite à mon ",[50,1262,1265],{"href":1263,"rel":1264},"https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2024-10-31-dora-metrics-valuer-la-performance-de-livraison-logicielle#quest-ce-que-les-m%C3%A9triques-dora",[54],"introduction aux DORA Metrics"," 🎉 \nPour rappel, je vous avais défini les ",[414,1268,1269],{},"4 métriques (4 Keys)"," qui permettent de mesurer l'efficacité de la livraison logicielle:",[170,1272,1273],{},[19,1274,1275,1278,1279,1278,1282,1278,1285],{},[414,1276,1277],{},"Deployment Frequency"," | ",[414,1280,1281],{},"Lead Time for Changes",[414,1283,1284],{},"Mean Time to Restore",[414,1286,1287],{},"Change Failure Rate",[19,1289,1290],{},"Aujourd'hui, je vous partage mon retour d'expérience (REX) sur leur mise en place chez un client qui souhaitait objectiver et améliorer sa performance de livraison.",[29,1292,1294],{"id":1293},"_1-comprendre-lorganisation-et-définir-les-concepts","1. Comprendre l'organisation et définir les concepts 🏢",[87,1296,1298],{"id":1297},"lorganisation-du-groupe","L'organisation du groupe",[19,1300,1301],{},"Lorsque je suis arrivé chez ce client, j'ai pu constater qu'il y avait de nombreux produits (> 1000) avec des technologies hétérogènes. Mais d'ailleurs, c'est quoi un produit ? La première chose à faire a été de se mettre d'accord sur les définitions !",[19,1303,1304],{},"L'organisation de l'entreprise était la suivante :",[277,1306,1307,1310,1313],{},[280,1308,1309],{},"Le groupe est divisé en plateformes",[280,1311,1312],{},"Les plateformes sont divisées en domaines",[280,1314,1315],{},"Les domaines sont divisés en produits",[19,1317,1318],{},"Après quelques ateliers avec le management et des projets pilotes, nous sommes tombés d'accord sur les définitions suivantes :",[277,1320,1321,1327,1333],{},[280,1322,1323,1326],{},[414,1324,1325],{},"Plateforme"," : Niveau le plus haut de l'organisation, regroupe plusieurs domaines fonctionnels liés",[280,1328,1329,1332],{},[414,1330,1331],{},"Domaine"," : Regroupe des produits ayant des fonctionnalités similaires ou complémentaires",[280,1334,1335,1338],{},[414,1336,1337],{},"Produit"," : Périmètre fonctionnel perceptible par l'utilisateur final, pour lequel les changements lui sont communiqués. Un produit peut être composé de plusieurs composants (microservices ou briques monolithiques) et peut être déployé sur différents environnements de production",[19,1340,1341],{},[66,1342],{"alt":1343,"src":1344},"Schéma d’organisation d’un site e-commerce : la plateforme Commerce regroupe les domaines E-Commerce (catalogue, panier, commande web) et Magasins (catalogue, caisse, commande magasin) ; la plateforme Gestion Clients regroupe les domaines Comptes Clients (gestion client web, magasin, data compliance) et Fidélité (programme de fidélité, newsletters).","\u002Fcontent-assets\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex\u002Fassets\u002Fdora_metrics-exemple_orga.webp",[87,1346,1348],{"id":1347},"les-cas-dusage-identifiés","Les cas d'usage identifiés",[19,1350,1351,1352,388],{},"Une fois l'organisation de la société comprise et les concepts définis, il a fallu comprendre tous les cas d'usage des DORA Metrics avec des ateliers comme l'",[50,1353,1356],{"href":1354,"rel":1355},"https:\u002F\u002Fdraft.io\u002Ffr\u002Fexample\u002Fexample-mapping",[54],"Example Mapping",[19,1358,1359],{},[66,1360],{"alt":1361,"src":1362},"Tableau Example Mapping avec quatre catégories : User Stories (jaune), Rules (bleu), Examples (vert), Questions (rose), chacune contenant des post-its de la couleur correspondante.","\u002Fcontent-assets\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex\u002Fassets\u002Fexample_mapping.webp",[170,1364,1365],{},[19,1366,1367,1368,1373],{},"ℹ️ N’hésitez pas à consulter ",[50,1369,1372],{"href":1370,"rel":1371},"https:\u002F\u002Fwww.hoppr.tech\u002Fformations-hoppr",[54],"notre offre de formations"," si vous souhaitez approfondir vos connaissances Craft et pratiquer ce type d’atelier.",[19,1375,1376],{},"Je ne veux pas vous mettre tous les cas d'usage, car ça serait trop long et ce n'est pas l'objectif de l'article, mais je vais vous donner quelques exemples :",[277,1378,1379,1382,1385,1388],{},[280,1380,1381],{},"En tant que CTO, je souhaite comparer les performances de livraison entre les plateformes (par exemple entre la plateforme Commerce et la plateforme Gestion Clients) pour identifier les meilleures pratiques DevOps à généraliser au niveau du groupe.",[280,1383,1384],{},"En tant que Lead Tech d'un produit e-commerce, je souhaite comparer nos métriques avec celles des autres produits du domaine Commerce (comme le panier ou le catalogue) pour comprendre pourquoi leurs déploiements génèrent moins d'incidents en production.",[280,1386,1387],{},"En tant que Domain Leader Catalogue, je souhaite analyser l'impact du multi-instance sur la fréquence de déploiement. Par exemple, comprendre si les produits déployés sur plusieurs environnements de production (pour différentes BU) ont plus de difficultés à maintenir un rythme de livraison élevé et si oui, comprendre les causes.",[280,1389,1390],{},"En tant que Product Owner, je veux suivre l'évolution de nos métriques après le passage d'une architecture monolithique à des microservices, notamment pour vérifier si la fréquence de déploiement de chaque composant s'améliore comme prévu.",[29,1392,1394],{"id":1393},"_2-les-défis-techniques-et-organisationnels","2. Les défis techniques et organisationnels 🔧",[19,1396,1397],{},"La mise en place des DORA Metrics dans un groupe de cette taille présentait beaucoup de défis majeurs. Avec mon client, nous avons fait le choix d'implémenter les DORA Metrics uniquement sur les produits déployés sur Kubernetes (cela représente environ 80% des produits). Voici les principaux obstacles que nous avons dû surmonter :",[87,1399,1401],{"id":1400},"une-architecture-complexe-à-appréhender","Une architecture complexe à appréhender",[19,1403,1404],{},[414,1405,1406],{},"L'entreprise comportait :",[277,1408,1409,1412,1415,1418],{},[280,1410,1411],{},"Plus de 1000 produits utilisant des technologies différentes",[280,1413,1414],{},"Des produits déployés plusieurs fois pour différentes BU",[280,1416,1417],{},"Un mix d'architectures monolithiques et microservices",[280,1419,1420],{},"Des relations complexes entre composants et produits",[19,1422,1423],{},"Face à cette complexité, nous avons adopté une approche pragmatique : sélectionner quelques produits pilotes représentatifs de l'écosystème pour implémenter les DORA Metrics. Après avoir validé notre méthodologie sur ces cas concrets, nous avons pu déployer progressivement la solution à l'ensemble du portefeuille de produits.",[87,1425,1427],{"id":1426},"des-données-éparpillées","Des données éparpillées",[19,1429,1430],{},[414,1431,1432],{},"Il fallait collecter les données depuis :",[277,1434,1435,1442,1447],{},[280,1436,1437,1438,1441],{},"Les clusters ",[414,1439,1440],{},"Kubernetes"," pour les logs de déploiements",[280,1443,1444,1446],{},[414,1445,458],{}," pour l'historique des versions",[280,1448,1449,1452],{},[414,1450,1451],{},"ServiceNow"," pour les incidents",[19,1454,1455],{},[414,1456,1457],{},"Le véritable défi ? Corréler ces données hétérogènes pour obtenir une vision cohérente !",[19,1459,1460],{},"Cette mission a nécessité une collaboration transverse entre plusieurs équipes techniques. Nous avons conçu une architecture cloud robuste pour centraliser l'ensemble des données dans une base de données BigQuery. Cette solution nous a d'ailleurs poussés à optimiser nos requêtes et l'utilisation de BigQuery car nous atteignions rapidement les limites de performance 😅.",[19,1462,1463,1464,1467],{},"L'objectif final était de disposer d'un référentiel unique permettant d'exécuter des requêtes SQL complexes ",[1032,1465,1466],{},"(cf l’implémentation des métriques plus bas dans cet article)"," pour calculer précisément nos métriques DORA.",[87,1469,1471],{"id":1470},"des-pratiques-devops-non-standardisées","Des pratiques DevOps non standardisées",[19,1473,1474],{},[414,1475,1476],{},"Une partie des équipes avait :",[277,1478,1479,1482,1485],{},[280,1480,1481],{},"Leur propre workflow de déploiement",[280,1483,1484],{},"Leurs conventions de versioning",[280,1486,1487],{},"Leur façon de gérer les environnements de production",[19,1489,1490],{},[414,1491,1492],{},"Il a fallu aider ces équipes à adopter les bonnes pratiques du groupe à savoir :",[277,1494,1495,1504,1507,1510],{},[280,1496,1497,1498,1503],{},"la norme ",[50,1499,1502],{"href":1500,"rel":1501},"https:\u002F\u002Fsemver.org\u002Flang\u002Ffr\u002F",[54],"SemVer"," pour le versioning",[280,1505,1506],{},"l'utilisation des solutions groupe pour déployer leurs produits sur Kubernetes",[280,1508,1509],{},"la déclaration systématique des incidents dans ServiceNow",[280,1511,1512],{},"etc.",[19,1514,1515],{},[414,1516,1517],{},"La standardisation des pratiques DevOps : un prérequis indispensable aux DORA Metrics",[19,1519,1520],{},"Ce chantier d'harmonisation, bien que colossal pour une organisation de cette envergure, s'est révélé être un puissant levier de transformation ! Même si des standards existaient déjà, les DORA Metrics ont agi comme un révélateur implacable : les projets ne respectant pas les bonnes pratiques étaient immédiatement identifiables par l'absence de données exploitables pour le calcul des métriques.",[19,1522,1523],{},"Cette transparence a créé une incitation naturelle à l'adoption des standards du groupe, bien plus efficace qu'une simple directive top-down.",[87,1525,1527],{"id":1526},"des-données-pas-toujours-fiables","Des données pas toujours fiables",[19,1529,1530],{},[414,1531,1532],{},"Les principaux problèmes :",[277,1534,1535,1538,1541,1544],{},[280,1536,1537],{},"Pas de standard dans le nommage des composants",[280,1539,1540],{},"Des déploiements de configuration qui polluaient les métriques",[280,1542,1543],{},"Une difficulté à identifier les vrais déploiements en production",[280,1545,1546],{},"Des annotations manquantes ou incohérentes",[19,1548,1549],{},[414,1550,1551],{},"Pragmatisme et itération : la clé du succès en environnement réel",[19,1553,1554,1555,1558,1559,1562],{},"Face à l'imperfection inévitable des données en contexte d'entreprise de grande taille, nous avons adopté une approche pragmatique : formuler des ",[414,1556,1557],{},"hypothèses"," clairement documentées et acceptées par toutes les parties prenantes. Ces conventions, bien qu'imparfaites, nous ont permis d'",[414,1560,1561],{},"avancer sans attendre la perfection"," qui arrivera sans doute jamais.",[19,1564,1565,1566,1569,1570,388],{},"Cette démarche s'alignait parfaitement avec la philosophie des DORA Metrics : l'objectif n'est pas d'atteindre une précision absolue, mais de capturer des ",[414,1567,1568],{},"tendances"," significatives permettant d'",[414,1571,1572],{},"orienter l'amélioration continue",[87,1574,1576],{"id":1575},"une-organisation-multi-niveaux-à-respecter","Une organisation multi-niveaux à respecter",[19,1578,1579],{},"Il fallait :",[277,1581,1582,1589,1596,1603],{},[280,1583,1584,1585,1588],{},"Fournir des ",[414,1586,1587],{},"vues adaptées"," à chaque niveau (plateforme, domaine, produit)",[280,1590,1591,1592,1595],{},"Prendre en compte les ",[414,1593,1594],{},"particularités"," de chaque BU",[280,1597,1598,1599,1602],{},"Garder des ",[414,1600,1601],{},"métriques comparables"," malgré les différences",[280,1604,1605,1608],{},[414,1606,1607],{},"Accompagner"," les équipes vers de meilleures pratiques",[87,1610,1612],{"id":1611},"la-dimension-humaine-à-ne-pas-négliger","La dimension humaine à ne pas négliger",[19,1614,1615],{},[414,1616,1617],{},"Nous avons rapidement identifié des craintes légitimes :",[277,1619,1620,1623,1626,1629],{},[280,1621,1622],{},"Peur d'être jugé uniquement sur des chiffres et que les métriques servent à comparer les équipes entre elles",[280,1624,1625],{},"Tentation de biaiser le système (par exemple en multipliant volontairement les déploiements inutiles pour améliorer artificiellement la fréquence)",[280,1627,1628],{},"Réticence à reporter certains incidents pour ne pas impacter le Change Failure Rate",[280,1630,1631],{},"Difficultés à voir les DORA metrics comme outil d'amélioration continue",[19,1633,1634],{},[414,1635,1636],{},"Notre approche : transformer les résistances en adhésion",[19,1638,1639],{},"Plutôt que d'imposer un système de mesure, nous avons choisi d'impliquer les équipes dans sa construction. Nous avons organisé des ateliers de sensibilisation, partagé les objectifs stratégiques derrière ces métriques, et surtout, écouté les préoccupations des équipes.",[19,1641,1642],{},"Cette démarche participative a permis de transformer progressivement la perception des DORA Metrics : d'un outil potentiellement menaçant de surveillance, elles sont devenues un levier d'amélioration continue valorisé par les équipes elles-mêmes.",[29,1644,1646],{"id":1645},"_3-hypothèses-techniques-retenues","3. Hypothèses techniques retenues 🧐",[170,1648,1649],{},[19,1650,1651,1654],{},[414,1652,1653],{},"Fondations solides : établir des conventions claires et partagées","\nPour bâtir un système de mesure fiable dans un environnement complexe, nous avons dû établir un ensemble d'hypothèses et de conventions. Elles ont été clairement documentées et validées collectivement et elles étaient nécessaires pour calculer les métriques avec des données imparfaites.",[19,1656,1657],{},"Voici les principales conventions que nous avons établies, organisées par domaine :",[87,1659,1661],{"id":1660},"déploiements","Déploiements 🚀",[19,1663,1664],{},[414,1665,1666],{},"Identification des déploiements en production",[277,1668,1669,1672,1680],{},[280,1670,1671],{},"Un déploiement est considéré réussi uniquement quand :",[280,1673,1674,1675,1679],{},"Seuls les déploiements avec l'annotation ",[1676,1677,1678],"code",{},"info\u002Fenvironment = prod"," sont pris en compte",[280,1681,1682],{},"Les déploiements de configuration pure sont exclus des métriques",[19,1684,1685],{},[414,1686,1687],{},"Impact utilisateur",[277,1689,1690,1693,1696],{},[280,1691,1692],{},"Un déploiement en production impacte potentiellement l'utilisateur final",[280,1694,1695],{},"Un produit peut être déployé sur plusieurs workspaces (namespace\u002Fcluster)",[280,1697,1698],{},"Une modification d'un composant ou de sa configuration implique une modification du produit",[87,1700,1702],{"id":1701},"lead-time-for-changes-️","Lead Time For Changes ⏱️",[19,1704,1705],{},[414,1706,1707],{},"Traçabilité du code",[277,1709,1710,1713,1716],{},[280,1711,1712],{},"Le code source mentionné dans l'annotation est responsable du déploiement du composant",[280,1714,1715],{},"La correspondance dans le repository Git est matérialisée par un tag",[280,1717,1718],{},"Le temps entre un commit et son tag est négligeable pour le calcul global",[19,1720,1721],{},[414,1722,1723],{},"Limitations acceptées",[277,1725,1726,1729],{},[280,1727,1728],{},"Seuls les tags respectant la norme SemVer sont pris en compte",[280,1730,1731],{},"Les configurations d'environnement sans code source associé créent des déploiements multiples pour une même version",[87,1733,1735],{"id":1734},"incidents-et-récupération","Incidents et récupération 🚨",[19,1737,1738],{},[414,1739,1740],{},"Temporalité des incidents",[277,1742,1743,1746],{},[280,1744,1745],{},"Le temps entre l'apparition réelle d'un incident et son ouverture dans l'outil est considéré comme négligeable",[280,1747,1748],{},"Tous les incidents reportés (automatiquement ou manuellement) ont un impact utilisateur",[19,1750,1751],{},[414,1752,1753],{},"Association déploiement-incident",[277,1755,1756,1759],{},[280,1757,1758],{},"Le déploiement le plus récent d'un composant du produit avant la création de l'incident est considéré comme la cause",[280,1760,1761],{},"En l'absence d'information sur l'instance spécifique, l'incident est associé au produit dans son ensemble",[87,1763,1765],{"id":1764},"structure-organisationnelle","Structure organisationnelle 🏢",[19,1767,1768],{},[414,1769,1770],{},"Définition d'un produit",[277,1772,1773,1776,1779],{},[280,1774,1775],{},"Un produit est un périmètre fonctionnel perceptible par l'utilisateur final",[280,1777,1778],{},"Un produit peut être composé de plusieurs composants (microservices ou briques monolithiques)",[280,1780,1781],{},"Les changements au niveau produit sont communiqués aux utilisateurs",[19,1783,1784],{},[414,1785,1786],{},"Multi-instance",[277,1788,1789,1792,1795],{},[280,1790,1791],{},"Un même produit peut être déployé dans différents environnements de production",[280,1793,1794],{},"Chaque instance est considérée comme une entité distincte pour les métriques de déploiement",[280,1796,1797],{},"Les incidents sont agrégés au niveau produit plutôt qu'au niveau instance",[87,1799,1801],{"id":1800},"limitations-connues","Limitations connues 🚧",[19,1803,1804],{},[414,1805,1806],{},"Données manquantes",[277,1808,1809,1812,1815],{},[280,1810,1811],{},"Certains déploiements peuvent manquer d'annotations complètes",[280,1813,1814],{},"Les tags peuvent ne pas suivre strictement SemVer",[280,1816,1817],{},"La corrélation entre incidents et instances spécifiques n'est pas toujours possible",[19,1819,1820],{},[414,1821,1822],{},"Pistes d'amélioration",[277,1824,1825,1828,1831],{},[280,1826,1827],{},"Implémenter \"configuration as code\" pour mieux tracer les changements de configuration",[280,1829,1830],{},"Étendre la prise en compte des tags au-delà de SemVer",[280,1832,1833],{},"Ajouter la notion d'instance produit dans l'outil de gestion des incidents",[19,1835,1836],{},"Ces hypothèses sont régulièrement revues et ajustées en fonction des retours d'expérience et de l'évolution des pratiques DevOps dans l'organisation.",[29,1838,1840],{"id":1839},"_4-la-collecte-des-données-une-approche-par-source","4. La collecte des données : une approche par source 📊",[170,1842,1843],{},[19,1844,1845,1848],{},[414,1846,1847],{},"L'architecture de collecte : le cœur technique du projet","\nLe succès des DORA Metrics repose sur notre capacité à collecter, intégrer et corréler des données provenant de multiples systèmes. Cette architecture d'intégration constitue la colonne vertébrale technique de notre solution.",[87,1850,1852],{"id":1851},"architecture-de-données-centralisée","Architecture de données centralisée",[19,1854,1855],{},[414,1856,1857],{},"BigQuery comme référentiel central",[19,1859,1860],{},"Pour répondre aux besoins d'analyse et de corrélation des données, nous avons mis en place une architecture où toutes les données sont centralisées dans Google BigQuery. Cette approche présente plusieurs avantages :",[277,1862,1863,1866,1869,1872],{},[280,1864,1865],{},"Capacité à traiter de grands volumes de données (logs Kubernetes, événements GitHub, tickets ServiceNow)",[280,1867,1868],{},"Possibilité d'exécuter des requêtes SQL complexes pour calculer les métriques",[280,1870,1871],{},"Facilité d'intégration avec des outils de visualisation (pour ce projet, Power BI)",[280,1873,1874],{},"Mise à jour des données en quasi temps réel via des flux de données (streaming)",[19,1876,1877],{},"Examinons maintenant notre approche pour chaque source de données :",[87,1879,1881],{"id":1880},"données-de-déploiement","Données de déploiement",[1883,1884,1885,1898],"table",{},[1886,1887,1888],"thead",{},[1889,1890,1891,1895],"tr",{},[1892,1893,1894],"th",{},"Élément",[1892,1896,1897],{},"Description",[1899,1900,1901,1909,1931,1958,1985],"tbody",{},[1889,1902,1903,1907],{},[1904,1905,1906],"td",{},"Source principale",[1904,1908,1440],{},[1889,1910,1911,1914],{},[1904,1912,1913],{},"Événements collectés",[1904,1915,1916],{},[277,1917,1918,1921,1924],{},[280,1919,1920],{},"Collecte des événements de type \"deployment\" avec statut \"success\"",[280,1922,1923],{},"Identification des déploiements via la progression \"Progressing → True\" avec \"NewReplicaSetAvailable\"",[280,1925,1926,1927,1930],{},"Focus sur les déploiements en production via l'annotation  ",[1676,1928,1929],{},"info\u002Fenvironment","=prod",[1889,1932,1933,1936],{},[1904,1934,1935],{},"Annotations existantes sur les pods",[1904,1937,1938],{},[277,1939,1940,1946,1952],{},[280,1941,1942,1945],{},[1676,1943,1944],{},"info\u002Fproduct_id","  : identifiant unique du produit",[280,1947,1948,1951],{},[1676,1949,1950],{},"info\u002Fbu_index","  : identifiant de la Business Unit",[280,1953,1954,1957],{},[1676,1955,1956],{},"info\u002Fcluster_name","  : nom du cluster",[1889,1959,1960,1963],{},[1904,1961,1962],{},"Annotations à ajouter pour les DORA",[1904,1964,1965],{},[277,1966,1967,1973,1979],{},[280,1968,1969,1972],{},[1676,1970,1971],{},"release.mgmt\u002Fdeploy.src","  : URL du repository source",[280,1974,1975,1978],{},[1676,1976,1977],{},"release.mgmt\u002Fdeploy.src-version","  : version déployée",[280,1980,1981,1984],{},[1676,1982,1983],{},"release.mgmt\u002Fenv","  : environnement (prod\u002Fprep\u002Fuat\u002Fdev)",[1889,1986,1987,1990],{},[1904,1988,1989],{},"Points d’attention",[1904,1991,1992],{},[277,1993,1994,1997,2000],{},[280,1995,1996],{},"Distinction entre déploiements de configuration et vraies mises en production",[280,1998,1999],{},"Gestion des déploiements multi-instances pour différentes BU",[280,2001,2002],{},"Traçabilité complète via les annotations",[87,2004,2006],{"id":2005},"données-de-code-source","Données de code source",[1883,2008,2009,2017],{},[1886,2010,2011],{},[1889,2012,2013,2015],{},[1892,2014,1894],{},[1892,2016,1897],{},[1899,2018,2019,2026,2041],{},[1889,2020,2021,2024],{},[1904,2022,2023],{},"Source de vérité",[1904,2025,458],{},[1889,2027,2028,2031],{},[1904,2029,2030],{},"Sources d’extraction",[1904,2032,2033],{},[277,2034,2035,2038],{},[280,2036,2037],{},"Commits  : pour tracer les changements de code",[280,2039,2040],{},"Tags  : pour identifier les versions déployées",[1889,2042,2043,2046],{},[1904,2044,2045],{},"Corrélation version-déploiement",[1904,2047,2048],{},[277,2049,2050,2053,2056],{},[280,2051,2052],{},"Chaque version en production est matérialisée par un tag Git",[280,2054,2055],{},"Les annotations Kubernetes contiennent les références du code source et de la version",[280,2057,2058],{},"La correspondance tag-version permet de calculer précisément le Lead Time",[87,2060,2062],{"id":2061},"données-dincidents","Données d'incidents",[1883,2064,2065,2073],{},[1886,2066,2067],{},[1889,2068,2069,2071],{},[1892,2070,1894],{},[1892,2072,1897],{},[1899,2074,2075,2081,2099],{},[1889,2076,2077,2079],{},[1904,2078,1906],{},[1904,2080,1451],{},[1889,2082,2083,2086],{},[1904,2084,2085],{},"Critères de sélection des incidents",[1904,2087,2088],{},[277,2089,2090,2093,2096],{},[280,2091,2092],{},"Incidents résolus uniquement",[280,2094,2095],{},"Statut ≠ \"Canceled\"",[280,2097,2098],{},"Lien avec produit identifié",[1889,2100,2101,2104],{},[1904,2102,2103],{},"Limitations actuelles",[1904,2105,2106],{},[277,2107,2108,2111,2114],{},[280,2109,2110],{},"Les incidents sont liés à un produit et non à une instance spécifique",[280,2112,2113],{},"Impossibilité de lier directement un incident à une instance particulière",[280,2115,2116],{},"Nécessité d'utiliser des heuristiques pour la corrélation",[29,2118,2120],{"id":2119},"_5-implémentation-et-calcul-des-métriques","5. Implémentation et calcul des métriques 📈",[170,2122,2123],{},[19,2124,2125,2128],{},[414,2126,2127],{},"De la théorie à la pratique : adapter et calculer les métriques à tous les niveaux","\nLes définitions théoriques des DORA Metrics sont un point de départ, mais leur implémentation concrète nécessite une adaptation fine au contexte spécifique de l'entreprise et une approche multi-échelle pour répondre aux besoins de tous les niveaux de l'organisation.",[87,2130,2132],{"id":2131},"implémentation-des-métriques","Implémentation des métriques",[19,2134,2135],{},"Voici comment nous avons adapté et implémenté chacune des quatre métriques :",[19,2137,2138],{},[2139,2140,2141],"u",{},[414,2142,2143],{},"Lead Time for Changes (Délai de livraison des changements)",[19,2145,2146],{},"Le Lead Time for Changes mesure le temps qui s'écoule entre la dernière modification de code (commit) et son déploiement effectif en production. Dans cette entreprise, nous avons dû sensibiliser les équipes sur l'importance de taguer chaque version déployée pour tracer correctement le code source.",[277,2148,2149,2155,2160],{},[280,2150,2151,2154],{},[414,2152,2153],{},"Extraction:"," à partir des déploiements Kubernetes (annotation \"version\" et \"repo\"), nous retrouvons le commit Git.",[280,2156,2157],{},[414,2158,2159],{},"Calcul:",[280,2161,2162,2165],{},[414,2163,2164],{},"Agrégation:"," comme chaque produit pouvait regrouper plusieurs composants, nous avons choisi de calculer d'abord un Lead Time moyen pour chaque composant, avant de prendre la moyenne de ces composants au niveau du produit.",[19,2167,2168,2171],{},[414,2169,2170],{},"Principale difficulté:"," éviter les déploiements de \"configuration\" sans changement de code, qui fausseraient la métrique. Nous avons donc isolé ces cas dans un tableau de bord à part, pour ne pas influencer le Lead Time for Changes général.",[19,2173,2174],{},[2139,2175,2176],{},[414,2177,2178],{},"Deployment Frequency (Fréquence de déploiement)",[19,2180,2181,2182,2270],{},"La Deployment Frequency indique la cadence à laquelle on pousse des mises à jour en production (exprimée en ",[2183,2184,2187],"span",{"className":2185},[2186],"katex",[2183,2188,2192],{"className":2189,"ariaHidden":2191},[2190],"katex-html","true",[2183,2193,2196,2201,2208,2212,2215,2220],{"className":2194},[2195],"base",[2183,2197],{"className":2198,"style":2200},[2199],"strut","height:1.0085em;vertical-align:-0.1944em;",[2183,2202,2207],{"className":2203,"style":2206},[2204,2205],"mord","mathnormal","margin-right:0.05724em;","j",[2183,2209,2211],{"className":2210},[2204,2205],"o",[2183,2213,2139],{"className":2214},[2204,2205],[2183,2216,2219],{"className":2217,"style":2218},[2204,2205],"margin-right:0.02778em;","r",[2183,2221,2223,2227],{"className":2222},[2204],[2183,2224,2226],{"className":2225},[2204,2205],"s",[2183,2228,2231],{"className":2229},[2230],"msupsub",[2183,2232,2235],{"className":2233},[2234],"vlist-t",[2183,2236,2239],{"className":2237},[2238],"vlist-r",[2183,2240,2244],{"className":2241,"style":2243},[2242],"vlist","height:0.8141em;",[2183,2245,2247,2252],{"style":2246},"top:-3.063em;margin-right:0.05em;",[2183,2248],{"className":2249,"style":2251},[2250],"pstrut","height:2.7em;",[2183,2253,2259],{"className":2254},[2255,2256,2257,2258],"sizing","reset-size6","size3","mtight",[2183,2260,2262,2266],{"className":2261},[2204,2258],[2183,2263,2265],{"className":2264},[2204,2258],"−",[2183,2267,2269],{"className":2268},[2204,2258],"1",", ou inverse de l'intervalle entre deux déploiements).",[2183,2272,2275],{"className":2273},[2274],"katex-display",[2183,2276,2278],{"className":2277},[2186],[2183,2279,2281,2360],{"className":2280,"ariaHidden":2191},[2190],[2183,2282,2284,2288,2347,2352,2357],{"className":2283},[2195],[2183,2285],{"className":2286,"style":2287},[2199],"height:0.9805em;vertical-align:-0.2861em;",[2183,2289,2291,2296],{"className":2290},[2204],[2183,2292,2295],{"className":2293,"style":2294},[2204,2205],"margin-right:0.10764em;","f",[2183,2297,2299],{"className":2298},[2230],[2183,2300,2303,2338],{"className":2301},[2234,2302],"vlist-t2",[2183,2304,2306,2333],{"className":2305},[2238],[2183,2307,2310],{"className":2308,"style":2309},[2242],"height:0.1514em;",[2183,2311,2313,2316],{"style":2312},"top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;",[2183,2314],{"className":2315,"style":2251},[2250],[2183,2317,2319],{"className":2318},[2255,2256,2257,2258],[2183,2320,2322,2326,2330],{"className":2321},[2204,2258],[2183,2323,2325],{"className":2324},[2204,2205,2258],"co",[2183,2327,2329],{"className":2328},[2204,2205,2258],"m",[2183,2331,19],{"className":2332},[2204,2205,2258],[2183,2334,2337],{"className":2335},[2336],"vlist-s","​",[2183,2339,2341],{"className":2340},[2238],[2183,2342,2345],{"className":2343,"style":2344},[2242],"height:0.2861em;",[2183,2346],{},[2183,2348],{"className":2349,"style":2351},[2350],"mspace","margin-right:0.2778em;",[2183,2353,2356],{"className":2354},[2355],"mrel","=",[2183,2358],{"className":2359,"style":2351},[2350],[2183,2361,2363,2367],{"className":2362},[2195],[2183,2364],{"className":2365,"style":2366},[2199],"height:2.2935em;vertical-align:-0.9721em;",[2183,2368,2370,2375,2563],{"className":2369},[2204],[2183,2371],{"className":2372},[2373,2374],"mopen","nulldelimiter",[2183,2376,2379],{"className":2377},[2378],"mfrac",[2183,2380,2382,2554],{"className":2381},[2234,2302],[2183,2383,2385,2551],{"className":2384},[2238],[2183,2386,2389,2528,2539],{"className":2387,"style":2388},[2242],"height:1.3214em;",[2183,2390,2392,2396],{"style":2391},"top:-2.314em;",[2183,2393],{"className":2394,"style":2395},[2250],"height:3em;",[2183,2397,2399,2403,2461,2465,2469,2472,2524],{"className":2398},[2204],[2183,2400,2402],{"className":2401},[2373],"(",[2183,2404,2406,2410],{"className":2405},[2204],[2183,2407,2409],{"className":2408},[2204,2205],"t",[2183,2411,2413],{"className":2412},[2230],[2183,2414,2416,2453],{"className":2415},[2234,2302],[2183,2417,2419,2450],{"className":2418},[2238],[2183,2420,2423],{"className":2421,"style":2422},[2242],"height:0.3361em;",[2183,2424,2426,2429],{"style":2425},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[2183,2427],{"className":2428,"style":2251},[2250],[2183,2430,2432],{"className":2431},[2255,2256,2257,2258],[2183,2433,2435,2439,2443,2446],{"className":2434},[2204,2258],[2183,2436,2438],{"className":2437},[2204,2205,2258],"d",[2183,2440,2442],{"className":2441},[2204,2205,2258],"e",[2183,2444,19],{"className":2445},[2204,2205,2258],[2183,2447,2449],{"className":2448},[2204,2258],"2",[2183,2451,2337],{"className":2452},[2336],[2183,2454,2456],{"className":2455},[2238],[2183,2457,2459],{"className":2458,"style":2344},[2242],[2183,2460],{},[2183,2462],{"className":2463,"style":2464},[2350],"margin-right:0.2222em;",[2183,2466,2265],{"className":2467},[2468],"mbin",[2183,2470],{"className":2471,"style":2464},[2350],[2183,2473,2475,2478],{"className":2474},[2204],[2183,2476,2409],{"className":2477},[2204,2205],[2183,2479,2481],{"className":2480},[2230],[2183,2482,2484,2516],{"className":2483},[2234,2302],[2183,2485,2487,2513],{"className":2486},[2238],[2183,2488,2490],{"className":2489,"style":2422},[2242],[2183,2491,2492,2495],{"style":2425},[2183,2493],{"className":2494,"style":2251},[2250],[2183,2496,2498],{"className":2497},[2255,2256,2257,2258],[2183,2499,2501,2504,2507,2510],{"className":2500},[2204,2258],[2183,2502,2438],{"className":2503},[2204,2205,2258],[2183,2505,2442],{"className":2506},[2204,2205,2258],[2183,2508,19],{"className":2509},[2204,2205,2258],[2183,2511,2269],{"className":2512},[2204,2258],[2183,2514,2337],{"className":2515},[2336],[2183,2517,2519],{"className":2518},[2238],[2183,2520,2522],{"className":2521,"style":2344},[2242],[2183,2523],{},[2183,2525,746],{"className":2526},[2527],"mclose",[2183,2529,2531,2534],{"style":2530},"top:-3.23em;",[2183,2532],{"className":2533,"style":2395},[2250],[2183,2535],{"className":2536,"style":2538},[2537],"frac-line","border-bottom-width:0.04em;",[2183,2540,2542,2545],{"style":2541},"top:-3.677em;",[2183,2543],{"className":2544,"style":2395},[2250],[2183,2546,2548],{"className":2547},[2204],[2183,2549,2269],{"className":2550},[2204],[2183,2552,2337],{"className":2553},[2336],[2183,2555,2557],{"className":2556},[2238],[2183,2558,2561],{"className":2559,"style":2560},[2242],"height:0.9721em;",[2183,2562],{},[2183,2564],{"className":2565},[2527,2374],[19,2567,2568],{},"Au niveau d'un produit, nous calculons la moyenne des fréquences de déploiement de tous ses composants. Nous avons aussi mis en évidence quelques \"cas limites\", par exemple lorsqu'un composant n'a qu'un seul déploiement. Dans ces situations, on ne peut pas déterminer d'intervalle et la fréquence reste \"N\u002FA\".",[19,2570,2571],{},"C'était essentiel de distinguer un déploiement réellement exposé à l'utilisateur dans l'environnement \"prod\" (annotation \"info\u002Fenvironment=prod\") de simples déploiements sur des environnements de test ou d'intégration.",[19,2573,2574],{},[2139,2575,2576],{},[414,2577,2578],{},"Mean Time to Restore (MTTR) ou Mean Time to Recover (Temps moyen de restauration)",[19,2580,2581],{},"Le MTTR calcule le temps moyen nécessaire pour résoudre un incident ou le temps apparent de défaillance pour l'utilisateur. Au départ, nous avons constaté que l'outil de ticketing (ServiceNow) n'enregistrait pas toujours les champs d'ouverture et de clôture de manière cohérente.",[19,2583,2584],{},"Nous avons donc dû :",[277,2586,2587,2593,2599],{},[280,2588,2589,2592],{},[414,2590,2591],{},"Sensibiliser les équipes support"," : un champ \"date de début d'incident\" doit être rempli le plus précisément possible dès ouverture (sinon nous utilisons la date de création du ticket).",[280,2594,2595,2598],{},[414,2596,2597],{},"Vérifier la date de résolution ou de clôture"," : c'est la référence pour la fin d'incident.",[280,2600,2601,2604],{},[414,2602,2603],{},"Calculer la moyenne"," de (date de fin − date de début) sur tous les incidents clôturés, pour chaque produit.",[2183,2606,2608],{"className":2607},[2274],[2183,2609,2611],{"className":2610},[2186],[2183,2612,2614,2719,2935],{"className":2613,"ariaHidden":2191},[2190],[2183,2615,2617,2621,2710,2713,2716],{"className":2616},[2195],[2183,2618],{"className":2619,"style":2620},[2199],"height:0.9019em;vertical-align:-0.15em;",[2183,2622,2624,2662],{"className":2623},[2204],[2183,2625,2628],{"className":2626},[2204,2627],"accent",[2183,2629,2631],{"className":2630},[2234],[2183,2632,2634],{"className":2633},[2238],[2183,2635,2638,2647],{"className":2636,"style":2637},[2242],"height:0.7519em;",[2183,2639,2641,2644],{"style":2640},"top:-3em;",[2183,2642],{"className":2643,"style":2395},[2250],[2183,2645,2409],{"className":2646},[2204,2205],[2183,2648,2650,2653],{"style":2649},"top:-3.1841em;",[2183,2651],{"className":2652,"style":2395},[2250],[2183,2654,2658],{"className":2655,"style":2657},[2656],"accent-body","left:-0.1667em;",[2183,2659,2661],{"className":2660},[2204],"ˉ",[2183,2663,2665],{"className":2664},[2230],[2183,2666,2668,2701],{"className":2667},[2234,2302],[2183,2669,2671,2698],{"className":2670},[2238],[2183,2672,2674],{"className":2673,"style":2309},[2242],[2183,2675,2676,2679],{"style":2425},[2183,2677],{"className":2678,"style":2251},[2250],[2183,2680,2682],{"className":2681},[2255,2256,2257,2258],[2183,2683,2685,2689,2694],{"className":2684},[2204,2258],[2183,2686,2688],{"className":2687},[2204,2205,2258],"reco",[2183,2690,2693],{"className":2691,"style":2692},[2204,2205,2258],"margin-right:0.03588em;","v",[2183,2695,2697],{"className":2696,"style":2218},[2204,2205,2258],"er",[2183,2699,2337],{"className":2700},[2336],[2183,2702,2704],{"className":2703},[2238],[2183,2705,2708],{"className":2706,"style":2707},[2242],"height:0.15em;",[2183,2709],{},[2183,2711],{"className":2712,"style":2351},[2350],[2183,2714,2356],{"className":2715},[2355],[2183,2717],{"className":2718,"style":2351},[2350],[2183,2720,2722,2726,2790,2794,2874,2877,2926,2929,2932],{"className":2721},[2195],[2183,2723],{"className":2724,"style":2725},[2199],"height:2.9535em;vertical-align:-1.3021em;",[2183,2727,2729,2732,2787],{"className":2728},[2204],[2183,2730],{"className":2731},[2373,2374],[2183,2733,2735],{"className":2734},[2378],[2183,2736,2738,2778],{"className":2737},[2234,2302],[2183,2739,2741,2775],{"className":2740},[2238],[2183,2742,2744,2756,2764],{"className":2743,"style":2388},[2242],[2183,2745,2746,2749],{"style":2391},[2183,2747],{"className":2748,"style":2395},[2250],[2183,2750,2752],{"className":2751},[2204],[2183,2753,2755],{"className":2754},[2204,2205],"n",[2183,2757,2758,2761],{"style":2530},[2183,2759],{"className":2760,"style":2395},[2250],[2183,2762],{"className":2763,"style":2538},[2537],[2183,2765,2766,2769],{"style":2541},[2183,2767],{"className":2768,"style":2395},[2250],[2183,2770,2772],{"className":2771},[2204],[2183,2773,2269],{"className":2774},[2204],[2183,2776,2337],{"className":2777},[2336],[2183,2779,2781],{"className":2780},[2238],[2183,2782,2785],{"className":2783,"style":2784},[2242],"height:0.686em;",[2183,2786],{},[2183,2788],{"className":2789},[2527,2374],[2183,2791],{"className":2792,"style":2793},[2350],"margin-right:0.1667em;",[2183,2795,2799],{"className":2796},[2797,2798],"mop","op-limits",[2183,2800,2802,2865],{"className":2801},[2234,2302],[2183,2803,2805,2862],{"className":2804},[2238],[2183,2806,2809,2833,2847],{"className":2807,"style":2808},[2242],"height:1.6514em;",[2183,2810,2812,2816],{"style":2811},"top:-1.8479em;margin-left:0em;",[2183,2813],{"className":2814,"style":2815},[2250],"height:3.05em;",[2183,2817,2819],{"className":2818},[2255,2256,2257,2258],[2183,2820,2822,2827,2830],{"className":2821},[2204,2258],[2183,2823,2826],{"className":2824,"style":2825},[2204,2205,2258],"margin-right:0.03148em;","k",[2183,2828,2356],{"className":2829},[2355,2258],[2183,2831,2269],{"className":2832},[2204,2258],[2183,2834,2836,2839],{"style":2835},"top:-3.05em;",[2183,2837],{"className":2838,"style":2815},[2250],[2183,2840,2841],{},[2183,2842,2846],{"className":2843},[2797,2844,2845],"op-symbol","large-op","∑",[2183,2848,2850,2853],{"style":2849},"top:-4.3em;margin-left:0em;",[2183,2851],{"className":2852,"style":2815},[2250],[2183,2854,2856],{"className":2855},[2255,2256,2257,2258],[2183,2857,2859],{"className":2858},[2204,2258],[2183,2860,2755],{"className":2861},[2204,2205,2258],[2183,2863,2337],{"className":2864},[2336],[2183,2866,2868],{"className":2867},[2238],[2183,2869,2872],{"className":2870,"style":2871},[2242],"height:1.3021em;",[2183,2873],{},[2183,2875,2402],{"className":2876},[2373],[2183,2878,2880,2883],{"className":2879},[2204],[2183,2881,2409],{"className":2882},[2204,2205],[2183,2884,2886],{"className":2885},[2230],[2183,2887,2889,2918],{"className":2888},[2234,2302],[2183,2890,2892,2915],{"className":2891},[2238],[2183,2893,2895],{"className":2894,"style":2422},[2242],[2183,2896,2897,2900],{"style":2425},[2183,2898],{"className":2899,"style":2251},[2250],[2183,2901,2903],{"className":2902},[2255,2256,2257,2258],[2183,2904,2906,2909,2912],{"className":2905},[2204,2258],[2183,2907,2442],{"className":2908},[2204,2205,2258],[2183,2910,2755],{"className":2911},[2204,2205,2258],[2183,2913,2438],{"className":2914},[2204,2205,2258],[2183,2916,2337],{"className":2917},[2336],[2183,2919,2921],{"className":2920},[2238],[2183,2922,2924],{"className":2923,"style":2707},[2242],[2183,2925],{},[2183,2927],{"className":2928,"style":2464},[2350],[2183,2930,2265],{"className":2931},[2468],[2183,2933],{"className":2934,"style":2464},[2350],[2183,2936,2938,2942,2998],{"className":2937},[2195],[2183,2939],{"className":2940,"style":2941},[2199],"height:1em;vertical-align:-0.25em;",[2183,2943,2945,2948],{"className":2944},[2204],[2183,2946,2409],{"className":2947},[2204,2205],[2183,2949,2951],{"className":2950},[2230],[2183,2952,2954,2990],{"className":2953},[2234,2302],[2183,2955,2957,2987],{"className":2956},[2238],[2183,2958,2961],{"className":2959,"style":2960},[2242],"height:0.2806em;",[2183,2962,2963,2966],{"style":2425},[2183,2964],{"className":2965,"style":2251},[2250],[2183,2967,2969],{"className":2968},[2255,2256,2257,2258],[2183,2970,2972,2975,2978,2981,2984],{"className":2971},[2204,2258],[2183,2973,2226],{"className":2974},[2204,2205,2258],[2183,2976,2409],{"className":2977},[2204,2205,2258],[2183,2979,50],{"className":2980},[2204,2205,2258],[2183,2982,2219],{"className":2983,"style":2218},[2204,2205,2258],[2183,2985,2409],{"className":2986},[2204,2205,2258],[2183,2988,2337],{"className":2989},[2336],[2183,2991,2993],{"className":2992},[2238],[2183,2994,2996],{"className":2995,"style":2707},[2242],[2183,2997],{},[2183,2999,746],{"className":3000},[2527],[19,3002,3003],{},"Pour la plupart des cas, cela a fonctionné correctement. Mais, comme souvent, nous avons rencontré des écarts (tickets fermés très tardivement, incidents mal catégorisés, etc.). Il a fallu faire accepter les limites de la mesure (la durée de vie d'un ticket n'est pas toujours égale à la durée réelle de l'incident technique).",[19,3005,3006],{},[2139,3007,3008],{},[414,3009,3010],{},"Change Failure Rate (Taux d'échec des changements)",[19,3012,3013],{},"Le Change Failure Rate (CFR) représente la proportion de déploiements qui entraînent au moins un incident en production. Ici, le plus gros challenge a été de lier les incidents ServiceNow au \"dernier déploiement\" d'un produit. Faute de pouvoir tracer précisément l'instance de composant à l'origine, nous avons adopté la convention suivante :",[277,3015,3016,3022,3028],{},[280,3017,3018,3021],{},[414,3019,3020],{},"Identifier le \"dernier déploiement\""," survenu avant la date de création de l'incident, tous composants du produit confondus.",[280,3023,3024,3027],{},[414,3025,3026],{},"Incrémenter un déploiement \"défaillant\""," si au moins un incident lui est rattaché.",[280,3029,3030,3033],{},[414,3031,3032],{},"Diviser le nombre de déploiements défaillants par le nombre total de déploiements"," du produit, sur la période considérée.",[2183,3035,3037],{"className":3036},[2274],[2183,3038,3040],{"className":3039},[2186],[2183,3041,3043,3159],{"className":3042,"ariaHidden":2191},[2190],[2183,3044,3046,3050,3150,3153,3156],{"className":3045},[2195],[2183,3047],{"className":3048,"style":3049},[2199],"height:1.0747em;vertical-align:-0.3802em;",[2183,3051,3053,3093],{"className":3052},[2204],[2183,3054,3056,3061,3065,3069,3072,3077,3081,3086,3089],{"className":3055},[2204],[2183,3057,3060],{"className":3058,"style":3059},[2204,2205],"margin-right:0.07153em;","C",[2183,3062,3064],{"className":3063},[2204,2205],"han",[2183,3066,3068],{"className":3067,"style":2692},[2204,2205],"g",[2183,3070,2442],{"className":3071},[2204,2205],[2183,3073,3076],{"className":3074,"style":3075},[2204,2205],"margin-right:0.13889em;","F",[2183,3078,3080],{"className":3079},[2204,2205],"ai",[2183,3082,3085],{"className":3083,"style":3084},[2204,2205],"margin-right:0.01968em;","l",[2183,3087,2139],{"className":3088},[2204,2205],[2183,3090,3092],{"className":3091},[2204,2205],"re",[2183,3094,3096],{"className":3095},[2230],[2183,3097,3099,3141],{"className":3098},[2234,2302],[2183,3100,3102,3138],{"className":3101},[2238],[2183,3103,3106],{"className":3104,"style":3105},[2242],"height:0.242em;",[2183,3107,3109,3112],{"style":3108},"top:-2.4559em;margin-right:0.05em;",[2183,3110],{"className":3111,"style":2251},[2250],[2183,3113,3115],{"className":3114},[2255,2256,2257,2258],[2183,3116,3118,3121,3125,3128,3131,3135],{"className":3117},[2204,2258],[2183,3119,19],{"className":3120},[2204,2205,2258],[2183,3122,3124],{"className":3123},[2204,2205,2258],"ro",[2183,3126,2438],{"className":3127},[2204,2205,2258],[2183,3129,2139],{"className":3130},[2204,2205,2258],[2183,3132,3134],{"className":3133},[2204,2205,2258],"c",[2183,3136,2409],{"className":3137},[2204,2205,2258],[2183,3139,2337],{"className":3140},[2336],[2183,3142,3144],{"className":3143},[2238],[2183,3145,3148],{"className":3146,"style":3147},[2242],"height:0.3802em;",[2183,3149],{},[2183,3151],{"className":3152,"style":2351},[2350],[2183,3154,2356],{"className":3155},[2355],[2183,3157],{"className":3158,"style":2351},[2350],[2183,3160,3162,3166],{"className":3161},[2195],[2183,3163],{"className":3164,"style":3165},[2199],"height:2.363em;vertical-align:-0.936em;",[2183,3167,3169,3172,3345],{"className":3168},[2204],[2183,3170],{"className":3171},[2373,2374],[2183,3173,3175],{"className":3174},[2378],[2183,3176,3178,3336],{"className":3177},[2234,2302],[2183,3179,3181,3333],{"className":3180},[2238],[2183,3182,3185,3259,3267],{"className":3183,"style":3184},[2242],"height:1.427em;",[2183,3186,3187,3190],{"style":2391},[2183,3188],{"className":3189,"style":2395},[2250],[2183,3191,3193,3198,3201],{"className":3192},[2204],[2183,3194,2846],{"className":3195,"style":3197},[2797,2844,3196],"small-op","position:relative;top:0em;",[2183,3199],{"className":3200,"style":2793},[2350],[2183,3202,3204],{"className":3203},[2204],[2183,3205,3207,3210],{"className":3206},[2204],[2183,3208,2438],{"className":3209},[2204,2205],[2183,3211,3213],{"className":3212},[2230],[2183,3214,3216,3251],{"className":3215},[2234,2302],[2183,3217,3219,3248],{"className":3218},[2238],[2183,3220,3222],{"className":3221,"style":2422},[2242],[2183,3223,3224,3227],{"style":2425},[2183,3225],{"className":3226,"style":2251},[2250],[2183,3228,3230],{"className":3229},[2255,2256,2257,2258],[2183,3231,3233,3236,3239,3242,3245],{"className":3232},[2204,2258],[2183,3234,2409],{"className":3235},[2204,2205,2258],[2183,3237,2211],{"className":3238},[2204,2205,2258],[2183,3240,2409],{"className":3241},[2204,2205,2258],[2183,3243,50],{"className":3244},[2204,2205,2258],[2183,3246,3085],{"className":3247,"style":3084},[2204,2205,2258],[2183,3249,2337],{"className":3250},[2336],[2183,3252,3254],{"className":3253},[2238],[2183,3255,3257],{"className":3256,"style":2707},[2242],[2183,3258],{},[2183,3260,3261,3264],{"style":2530},[2183,3262],{"className":3263,"style":2395},[2250],[2183,3265],{"className":3266,"style":2538},[2537],[2183,3268,3269,3272],{"style":2541},[2183,3270],{"className":3271,"style":2395},[2250],[2183,3273,3275,3278,3281],{"className":3274},[2204],[2183,3276,2846],{"className":3277,"style":3197},[2797,2844,3196],[2183,3279],{"className":3280,"style":2793},[2350],[2183,3282,3284],{"className":3283},[2204],[2183,3285,3287,3290],{"className":3286},[2204],[2183,3288,2438],{"className":3289},[2204,2205],[2183,3291,3293],{"className":3292},[2230],[2183,3294,3296,3325],{"className":3295},[2234,2302],[2183,3297,3299,3322],{"className":3298},[2238],[2183,3300,3302],{"className":3301,"style":2422},[2242],[2183,3303,3304,3307],{"style":2425},[2183,3305],{"className":3306,"style":2251},[2250],[2183,3308,3310],{"className":3309},[2255,2256,2257,2258],[2183,3311,3313,3316,3319],{"className":3312},[2204,2258],[2183,3314,2295],{"className":3315,"style":2294},[2204,2205,2258],[2183,3317,3080],{"className":3318},[2204,2205,2258],[2183,3320,3085],{"className":3321,"style":3084},[2204,2205,2258],[2183,3323,2337],{"className":3324},[2336],[2183,3326,3328],{"className":3327},[2238],[2183,3329,3331],{"className":3330,"style":2344},[2242],[2183,3332],{},[2183,3334,2337],{"className":3335},[2336],[2183,3337,3339],{"className":3338},[2238],[2183,3340,3343],{"className":3341,"style":3342},[2242],"height:0.936em;",[2183,3344],{},[2183,3346],{"className":3347},[2527,2374],[19,3349,3350],{},"Bien sûr, cela reste une approximation: on ne sait pas distinguer un incident réellement lié à un composant particulier. D'où la nécessité d'améliorer la remontée d'informations dans ServiceNow (par exemple en demandant explicitement quelle version réelle est touchée).",[87,3352,3354],{"id":3353},"calcul-des-métriques-par-niveau-de-granularité","Calcul des métriques par niveau de granularité 📊",[170,3356,3357],{},[19,3358,3359,3362],{},[414,3360,3361],{},"Vision multi-échelle : du composant à la plateforme","\nL'une des forces de notre implémentation réside dans sa capacité à fournir des métriques à différents niveaux de granularité. Cette approche multi-échelle permet à chaque niveau de management d'accéder aux indicateurs pertinents pour son périmètre de responsabilité, tout en garantissant la cohérence globale des mesures.",[19,3364,3365],{},"Différentes vues des Dora Metrics de notre solution pour illustrer les calculs un peu plus bas.",[19,3367,3368],{},[66,3369],{"alt":3370,"src":3371},"Vue globale des dora metrics","\u002Fcontent-assets\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex\u002Fassets\u002Fimg1.webp",[19,3373,3374],{},[66,3375],{"alt":3376,"src":3377},"Vue détaillée des dora metrics au niveau d’un produit","\u002Fcontent-assets\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex\u002Fassets\u002Fimg2.webp",[19,3379,3380],{},[66,3381],{"alt":3382,"src":3383},"Vue pour suivre l’évolution des dora metrics au niveau d’une plateforme","\u002Fcontent-assets\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex\u002Fassets\u002Fimg3.webp",[87,3385,3387],{"id":3386},"lead-time-for-changes","Lead Time For Changes",[19,3389,3390],{},[414,3391,3392],{},"Niveau Composant",[2183,3394,3396],{"className":3395},[2274],[2183,3397,3399],{"className":3398},[2186],[2183,3400,3402,3515,3750],{"className":3401,"ariaHidden":2191},[2190],[2183,3403,3405,3409,3413,3506,3509,3512],{"className":3404},[2195],[2183,3406],{"className":3407,"style":3408},[2199],"height:0.9694em;vertical-align:-0.2861em;",[2183,3410,3412],{"className":3411},[2204],"Δ",[2183,3414,3416,3419],{"className":3415},[2204],[2183,3417,2409],{"className":3418},[2204,2205],[2183,3420,3422],{"className":3421},[2230],[2183,3423,3425,3498],{"className":3424},[2234,2302],[2183,3426,3428,3495],{"className":3427},[2238],[2183,3429,3431],{"className":3430,"style":2422},[2242],[2183,3432,3433,3436],{"style":2425},[2183,3434],{"className":3435,"style":2251},[2250],[2183,3437,3439],{"className":3438},[2255,2256,2257,2258],[2183,3440,3442,3446,3449],{"className":3441},[2204,2258],[2183,3443,3445],{"className":3444},[2204,2205,2258],"lt",[2183,3447,2295],{"className":3448,"style":2294},[2204,2205,2258],[2183,3450,3452,3455],{"className":3451},[2204,2258],[2183,3453,3134],{"className":3454},[2204,2205,2258],[2183,3456,3458],{"className":3457},[2230],[2183,3459,3461,3486],{"className":3460},[2234,2302],[2183,3462,3464,3483],{"className":3463},[2238],[2183,3465,3468],{"className":3466,"style":3467},[2242],"height:0.1645em;",[2183,3469,3471,3475],{"style":3470},"top:-2.357em;margin-left:0em;margin-right:0.0714em;",[2183,3472],{"className":3473,"style":3474},[2250],"height:2.5em;",[2183,3476,3480],{"className":3477},[2255,3478,3479,2258],"reset-size3","size1",[2183,3481,3134],{"className":3482},[2204,2205,2258],[2183,3484,2337],{"className":3485},[2336],[2183,3487,3489],{"className":3488},[2238],[2183,3490,3493],{"className":3491,"style":3492},[2242],"height:0.143em;",[2183,3494],{},[2183,3496,2337],{"className":3497},[2336],[2183,3499,3501],{"className":3500},[2238],[2183,3502,3504],{"className":3503,"style":2344},[2242],[2183,3505],{},[2183,3507],{"className":3508,"style":2351},[2350],[2183,3510,2356],{"className":3511},[2355],[2183,3513],{"className":3514,"style":2351},[2350],[2183,3516,3518,3522,3649,3652,3655,3658,3741,3744,3747],{"className":3517},[2195],[2183,3519],{"className":3520,"style":3521},[2199],"height:2.4221em;vertical-align:-0.9721em;",[2183,3523,3526,3535,3643],{"className":3524},[3525],"minner",[2183,3527,3531],{"className":3528,"style":3530},[2373,3529],"delimcenter","top:0em;",[2183,3532,2402],{"className":3533},[3534,2257],"delimsizing",[2183,3536,3538,3541,3640],{"className":3537},[2204],[2183,3539],{"className":3540},[2373,2374],[2183,3542,3544],{"className":3543},[2378],[2183,3545,3547,3632],{"className":3546},[2234,2302],[2183,3548,3550,3629],{"className":3549},[2238],[2183,3551,3553,3610,3618],{"className":3552,"style":2388},[2242],[2183,3554,3555,3558],{"style":2391},[2183,3556],{"className":3557,"style":2395},[2250],[2183,3559,3561],{"className":3560},[2204],[2183,3562,3564,3567],{"className":3563},[2204],[2183,3565,2438],{"className":3566},[2204,2205],[2183,3568,3570],{"className":3569},[2230],[2183,3571,3573,3602],{"className":3572},[2234,2302],[2183,3574,3576,3599],{"className":3575},[2238],[2183,3577,3579],{"className":3578,"style":2960},[2242],[2183,3580,3581,3584],{"style":2425},[2183,3582],{"className":3583,"style":2251},[2250],[2183,3585,3587],{"className":3586},[2255,2256,2257,2258],[2183,3588,3590,3593,3596],{"className":3589},[2204,2258],[2183,3591,2409],{"className":3592},[2204,2205,2258],[2183,3594,50],{"className":3595},[2204,2205,2258],[2183,3597,3068],{"className":3598,"style":2692},[2204,2205,2258],[2183,3600,2337],{"className":3601},[2336],[2183,3603,3605],{"className":3604},[2238],[2183,3606,3608],{"className":3607,"style":2344},[2242],[2183,3609],{},[2183,3611,3612,3615],{"style":2530},[2183,3613],{"className":3614,"style":2395},[2250],[2183,3616],{"className":3617,"style":2538},[2537],[2183,3619,3620,3623],{"style":2541},[2183,3621],{"className":3622,"style":2395},[2250],[2183,3624,3626],{"className":3625},[2204],[2183,3627,2269],{"className":3628},[2204],[2183,3630,2337],{"className":3631},[2336],[2183,3633,3635],{"className":3634},[2238],[2183,3636,3638],{"className":3637,"style":2560},[2242],[2183,3639],{},[2183,3641],{"className":3642},[2527,2374],[2183,3644,3646],{"className":3645,"style":3530},[2527,3529],[2183,3647,746],{"className":3648},[3534,2257],[2183,3650],{"className":3651,"style":2793},[2350],[2183,3653,2846],{"className":3654,"style":3197},[2797,2844,2845],[2183,3656,2402],{"className":3657},[2373],[2183,3659,3661,3664],{"className":3660},[2204],[2183,3662,2409],{"className":3663},[2204,2205],[2183,3665,3667],{"className":3666},[2230],[2183,3668,3670,3732],{"className":3669},[2234,2302],[2183,3671,3673,3729],{"className":3672},[2238],[2183,3674,3676],{"className":3675,"style":2422},[2242],[2183,3677,3678,3681],{"style":2425},[2183,3679],{"className":3680,"style":2251},[2250],[2183,3682,3684],{"className":3683},[2255,2256,2257,2258],[2183,3685,3687],{"className":3686},[2204,2258],[2183,3688,3690,3693],{"className":3689},[2204,2258],[2183,3691,2438],{"className":3692},[2204,2205,2258],[2183,3694,3696],{"className":3695},[2230],[2183,3697,3699,3721],{"className":3698},[2234,2302],[2183,3700,3702,3718],{"className":3701},[2238],[2183,3703,3706],{"className":3704,"style":3705},[2242],"height:0.3281em;",[2183,3707,3708,3711],{"style":3470},[2183,3709],{"className":3710,"style":3474},[2250],[2183,3712,3714],{"className":3713},[2255,3478,3479,2258],[2183,3715,3717],{"className":3716},[2204,2205,2258],"i",[2183,3719,2337],{"className":3720},[2336],[2183,3722,3724],{"className":3723},[2238],[2183,3725,3727],{"className":3726,"style":3492},[2242],[2183,3728],{},[2183,3730,2337],{"className":3731},[2336],[2183,3733,3735],{"className":3734},[2238],[2183,3736,3739],{"className":3737,"style":3738},[2242],"height:0.2501em;",[2183,3740],{},[2183,3742],{"className":3743,"style":2464},[2350],[2183,3745,2265],{"className":3746},[2468],[2183,3748],{"className":3749,"style":2464},[2350],[2183,3751,3753,3757,3840],{"className":3752},[2195],[2183,3754],{"className":3755,"style":3756},[2199],"height:1.0001em;vertical-align:-0.2501em;",[2183,3758,3760,3763],{"className":3759},[2204],[2183,3761,2409],{"className":3762},[2204,2205],[2183,3764,3766],{"className":3765},[2230],[2183,3767,3769,3832],{"className":3768},[2234,2302],[2183,3770,3772,3829],{"className":3771},[2238],[2183,3773,3775],{"className":3774,"style":2309},[2242],[2183,3776,3777,3780],{"style":2425},[2183,3778],{"className":3779,"style":2251},[2250],[2183,3781,3783],{"className":3782},[2255,2256,2257,2258],[2183,3784,3786,3789],{"className":3785},[2204,2258],[2183,3787,3134],{"className":3788},[2204,2205,2258],[2183,3790,3792,3795],{"className":3791},[2204,2258],[2183,3793,2211],{"className":3794},[2204,2205,2258],[2183,3796,3798],{"className":3797},[2230],[2183,3799,3801,3821],{"className":3800},[2234,2302],[2183,3802,3804,3818],{"className":3803},[2238],[2183,3805,3807],{"className":3806,"style":3705},[2242],[2183,3808,3809,3812],{"style":3470},[2183,3810],{"className":3811,"style":3474},[2250],[2183,3813,3815],{"className":3814},[2255,3478,3479,2258],[2183,3816,3717],{"className":3817},[2204,2205,2258],[2183,3819,2337],{"className":3820},[2336],[2183,3822,3824],{"className":3823},[2238],[2183,3825,3827],{"className":3826,"style":3492},[2242],[2183,3828],{},[2183,3830,2337],{"className":3831},[2336],[2183,3833,3835],{"className":3834},[2238],[2183,3836,3838],{"className":3837,"style":3738},[2242],[2183,3839],{},[2183,3841,746],{"className":3842},[2527],[19,3844,3845],{},"où :",[277,3847,3848,3944,4042],{},[280,3849,3850,3943],{},[2183,3851,3853],{"className":3852},[2186],[2183,3854,3856],{"className":3855,"ariaHidden":2191},[2190],[2183,3857,3859,3863],{"className":3858},[2195],[2183,3860],{"className":3861,"style":3862},[2199],"height:0.8652em;vertical-align:-0.2501em;",[2183,3864,3866,3869],{"className":3865},[2204],[2183,3867,2409],{"className":3868},[2204,2205],[2183,3870,3872],{"className":3871},[2230],[2183,3873,3875,3935],{"className":3874},[2234,2302],[2183,3876,3878,3932],{"className":3877},[2238],[2183,3879,3881],{"className":3880,"style":2422},[2242],[2183,3882,3883,3886],{"style":2425},[2183,3884],{"className":3885,"style":2251},[2250],[2183,3887,3889],{"className":3888},[2255,2256,2257,2258],[2183,3890,3892],{"className":3891},[2204,2258],[2183,3893,3895,3898],{"className":3894},[2204,2258],[2183,3896,2438],{"className":3897},[2204,2205,2258],[2183,3899,3901],{"className":3900},[2230],[2183,3902,3904,3924],{"className":3903},[2234,2302],[2183,3905,3907,3921],{"className":3906},[2238],[2183,3908,3910],{"className":3909,"style":3705},[2242],[2183,3911,3912,3915],{"style":3470},[2183,3913],{"className":3914,"style":3474},[2250],[2183,3916,3918],{"className":3917},[2255,3478,3479,2258],[2183,3919,3717],{"className":3920},[2204,2205,2258],[2183,3922,2337],{"className":3923},[2336],[2183,3925,3927],{"className":3926},[2238],[2183,3928,3930],{"className":3929,"style":3492},[2242],[2183,3931],{},[2183,3933,2337],{"className":3934},[2336],[2183,3936,3938],{"className":3937},[2238],[2183,3939,3941],{"className":3940,"style":3738},[2242],[2183,3942],{}," = Date de déploiement en production",[280,3945,3946,4041],{},[2183,3947,3949],{"className":3948},[2186],[2183,3950,3952],{"className":3951,"ariaHidden":2191},[2190],[2183,3953,3955,3958],{"className":3954},[2195],[2183,3956],{"className":3957,"style":3862},[2199],[2183,3959,3961,3964],{"className":3960},[2204],[2183,3962,2409],{"className":3963},[2204,2205],[2183,3965,3967],{"className":3966},[2230],[2183,3968,3970,4033],{"className":3969},[2234,2302],[2183,3971,3973,4030],{"className":3972},[2238],[2183,3974,3976],{"className":3975,"style":2309},[2242],[2183,3977,3978,3981],{"style":2425},[2183,3979],{"className":3980,"style":2251},[2250],[2183,3982,3984],{"className":3983},[2255,2256,2257,2258],[2183,3985,3987,3990],{"className":3986},[2204,2258],[2183,3988,3134],{"className":3989},[2204,2205,2258],[2183,3991,3993,3996],{"className":3992},[2204,2258],[2183,3994,2211],{"className":3995},[2204,2205,2258],[2183,3997,3999],{"className":3998},[2230],[2183,4000,4002,4022],{"className":4001},[2234,2302],[2183,4003,4005,4019],{"className":4004},[2238],[2183,4006,4008],{"className":4007,"style":3705},[2242],[2183,4009,4010,4013],{"style":3470},[2183,4011],{"className":4012,"style":3474},[2250],[2183,4014,4016],{"className":4015},[2255,3478,3479,2258],[2183,4017,3717],{"className":4018},[2204,2205,2258],[2183,4020,2337],{"className":4021},[2336],[2183,4023,4025],{"className":4024},[2238],[2183,4026,4028],{"className":4027,"style":3492},[2242],[2183,4029],{},[2183,4031,2337],{"className":4032},[2336],[2183,4034,4036],{"className":4035},[2238],[2183,4037,4039],{"className":4038,"style":3738},[2242],[2183,4040],{}," = Date du dernier commit de la version",[280,4043,4044,4105],{},[2183,4045,4047],{"className":4046},[2186],[2183,4048,4050],{"className":4049,"ariaHidden":2191},[2190],[2183,4051,4053,4056],{"className":4052},[2195],[2183,4054],{"className":4055,"style":2287},[2199],[2183,4057,4059,4062],{"className":4058},[2204],[2183,4060,2438],{"className":4061},[2204,2205],[2183,4063,4065],{"className":4064},[2230],[2183,4066,4068,4097],{"className":4067},[2234,2302],[2183,4069,4071,4094],{"className":4070},[2238],[2183,4072,4074],{"className":4073,"style":2960},[2242],[2183,4075,4076,4079],{"style":2425},[2183,4077],{"className":4078,"style":2251},[2250],[2183,4080,4082],{"className":4081},[2255,2256,2257,2258],[2183,4083,4085,4088,4091],{"className":4084},[2204,2258],[2183,4086,2409],{"className":4087},[2204,2205,2258],[2183,4089,50],{"className":4090},[2204,2205,2258],[2183,4092,3068],{"className":4093,"style":2692},[2204,2205,2258],[2183,4095,2337],{"className":4096},[2336],[2183,4098,4100],{"className":4099},[2238],[2183,4101,4103],{"className":4102,"style":2344},[2242],[2183,4104],{}," = Nombre de déploiements en production associés à un tag Git",[19,4107,4108],{},[414,4109,4110],{},"Niveau Produit",[2183,4112,4114],{"className":4113},[2274],[2183,4115,4117],{"className":4116},[2186],[2183,4118,4120,4227],{"className":4119,"ariaHidden":2191},[2190],[2183,4121,4123,4127,4130,4218,4221,4224],{"className":4122},[2195],[2183,4124],{"className":4125,"style":4126},[2199],"height:1.0307em;vertical-align:-0.3473em;",[2183,4128,3412],{"className":4129},[2204],[2183,4131,4133,4136],{"className":4132},[2204],[2183,4134,2409],{"className":4135},[2204,2205],[2183,4137,4139],{"className":4138},[2230],[2183,4140,4142,4209],{"className":4141},[2234,2302],[2183,4143,4145,4206],{"className":4144},[2238],[2183,4146,4148],{"className":4147,"style":2422},[2242],[2183,4149,4150,4153],{"style":2425},[2183,4151],{"className":4152,"style":2251},[2250],[2183,4154,4156],{"className":4155},[2255,2256,2257,2258],[2183,4157,4159,4162,4165],{"className":4158},[2204,2258],[2183,4160,3445],{"className":4161},[2204,2205,2258],[2183,4163,2295],{"className":4164,"style":2294},[2204,2205,2258],[2183,4166,4168,4171],{"className":4167},[2204,2258],[2183,4169,3134],{"className":4170},[2204,2205,2258],[2183,4172,4174],{"className":4173},[2230],[2183,4175,4177,4197],{"className":4176},[2234,2302],[2183,4178,4180,4194],{"className":4179},[2238],[2183,4181,4183],{"className":4182,"style":3467},[2242],[2183,4184,4185,4188],{"style":3470},[2183,4186],{"className":4187,"style":3474},[2250],[2183,4189,4191],{"className":4190},[2255,3478,3479,2258],[2183,4192,19],{"className":4193},[2204,2205,2258],[2183,4195,2337],{"className":4196},[2336],[2183,4198,4200],{"className":4199},[2238],[2183,4201,4204],{"className":4202,"style":4203},[2242],"height:0.2819em;",[2183,4205],{},[2183,4207,2337],{"className":4208},[2336],[2183,4210,4212],{"className":4211},[2238],[2183,4213,4216],{"className":4214,"style":4215},[2242],"height:0.3473em;",[2183,4217],{},[2183,4219],{"className":4220,"style":2351},[2350],[2183,4222,2356],{"className":4223},[2355],[2183,4225],{"className":4226,"style":2351},[2350],[2183,4228,4230,4234,4334,4337,4340,4343],{"className":4229},[2195],[2183,4231],{"className":4232,"style":4233},[2199],"height:2.1574em;vertical-align:-0.836em;",[2183,4235,4237,4240,4331],{"className":4236},[2204],[2183,4238],{"className":4239},[2373,2374],[2183,4241,4243],{"className":4242},[2378],[2183,4244,4246,4322],{"className":4245},[2234,2302],[2183,4247,4249,4319],{"className":4248},[2238],[2183,4250,4252,4300,4308],{"className":4251,"style":2388},[2242],[2183,4253,4254,4257],{"style":2391},[2183,4255],{"className":4256,"style":2395},[2250],[2183,4258,4260],{"className":4259},[2204],[2183,4261,4263,4266],{"className":4262},[2204],[2183,4264,2755],{"className":4265},[2204,2205],[2183,4267,4269],{"className":4268},[2230],[2183,4270,4272,4292],{"className":4271},[2234,2302],[2183,4273,4275,4289],{"className":4274},[2238],[2183,4276,4278],{"className":4277,"style":2309},[2242],[2183,4279,4280,4283],{"style":2425},[2183,4281],{"className":4282,"style":2251},[2250],[2183,4284,4286],{"className":4285},[2255,2256,2257,2258],[2183,4287,3134],{"className":4288},[2204,2205,2258],[2183,4290,2337],{"className":4291},[2336],[2183,4293,4295],{"className":4294},[2238],[2183,4296,4298],{"className":4297,"style":2707},[2242],[2183,4299],{},[2183,4301,4302,4305],{"style":2530},[2183,4303],{"className":4304,"style":2395},[2250],[2183,4306],{"className":4307,"style":2538},[2537],[2183,4309,4310,4313],{"style":2541},[2183,4311],{"className":4312,"style":2395},[2250],[2183,4314,4316],{"className":4315},[2204],[2183,4317,2269],{"className":4318},[2204],[2183,4320,2337],{"className":4321},[2336],[2183,4323,4325],{"className":4324},[2238],[2183,4326,4329],{"className":4327,"style":4328},[2242],"height:0.836em;",[2183,4330],{},[2183,4332],{"className":4333},[2527,2374],[2183,4335],{"className":4336,"style":2793},[2350],[2183,4338,2846],{"className":4339,"style":3197},[2797,2844,2845],[2183,4341],{"className":4342,"style":2793},[2350],[2183,4344,4346,4352,4355,4484],{"className":4345},[3525],[2183,4347,4349],{"className":4348,"style":3530},[2373,3529],[2183,4350,2402],{"className":4351},[3534,3479],[2183,4353,3412],{"className":4354},[2204],[2183,4356,4358,4361],{"className":4357},[2204],[2183,4359,2409],{"className":4360},[2204,2205],[2183,4362,4364],{"className":4363},[2230],[2183,4365,4367,4475],{"className":4366},[2234,2302],[2183,4368,4370,4472],{"className":4369},[2238],[2183,4371,4373],{"className":4372,"style":2422},[2242],[2183,4374,4375,4378],{"style":2425},[2183,4376],{"className":4377,"style":2251},[2250],[2183,4379,4381],{"className":4380},[2255,2256,2257,2258],[2183,4382,4384,4387,4390],{"className":4383},[2204,2258],[2183,4385,3445],{"className":4386},[2204,2205,2258],[2183,4388,2295],{"className":4389,"style":2294},[2204,2205,2258],[2183,4391,4393,4396],{"className":4392},[2204,2258],[2183,4394,3134],{"className":4395},[2204,2205,2258],[2183,4397,4399],{"className":4398},[2230],[2183,4400,4402,4463],{"className":4401},[2234,2302],[2183,4403,4405,4460],{"className":4404},[2238],[2183,4406,4408],{"className":4407,"style":3467},[2242],[2183,4409,4410,4413],{"style":3470},[2183,4411],{"className":4412,"style":3474},[2250],[2183,4414,4416],{"className":4415},[2255,3478,3479,2258],[2183,4417,4419],{"className":4418},[2204,2258],[2183,4420,4422,4425],{"className":4421},[2204,2258],[2183,4423,3134],{"className":4424},[2204,2205,2258],[2183,4426,4428],{"className":4427},[2230],[2183,4429,4431,4451],{"className":4430},[2234,2302],[2183,4432,4434,4448],{"className":4433},[2238],[2183,4435,4438],{"className":4436,"style":4437},[2242],"height:0.3448em;",[2183,4439,4441,4445],{"style":4440},"top:-2.3448em;margin-left:0em;margin-right:0.1em;",[2183,4442],{"className":4443,"style":4444},[2250],"height:2.6595em;",[2183,4446,3717],{"className":4447},[2204,2205,2258],[2183,4449,2337],{"className":4450},[2336],[2183,4452,4454],{"className":4453},[2238],[2183,4455,4458],{"className":4456,"style":4457},[2242],"height:0.3147em;",[2183,4459],{},[2183,4461,2337],{"className":4462},[2336],[2183,4464,4466],{"className":4465},[2238],[2183,4467,4470],{"className":4468,"style":4469},[2242],"height:0.3678em;",[2183,4471],{},[2183,4473,2337],{"className":4474},[2336],[2183,4476,4478],{"className":4477},[2238],[2183,4479,4482],{"className":4480,"style":4481},[2242],"height:0.4075em;",[2183,4483],{},[2183,4485,4487],{"className":4486,"style":3530},[2527,3529],[2183,4488,746],{"className":4489},[3534,3479],[19,4491,3845],{},[277,4493,4494,4636],{},[280,4495,4496,4635],{},[2183,4497,4499],{"className":4498},[2186],[2183,4500,4502],{"className":4501,"ariaHidden":2191},[2190],[2183,4503,4505,4509,4512],{"className":4504},[2195],[2183,4506],{"className":4507,"style":4508},[2199],"height:1.0908em;vertical-align:-0.4075em;",[2183,4510,3412],{"className":4511},[2204],[2183,4513,4515,4518],{"className":4514},[2204],[2183,4516,2409],{"className":4517},[2204,2205],[2183,4519,4521],{"className":4520},[2230],[2183,4522,4524,4627],{"className":4523},[2234,2302],[2183,4525,4527,4624],{"className":4526},[2238],[2183,4528,4530],{"className":4529,"style":2422},[2242],[2183,4531,4532,4535],{"style":2425},[2183,4533],{"className":4534,"style":2251},[2250],[2183,4536,4538],{"className":4537},[2255,2256,2257,2258],[2183,4539,4541,4544,4547],{"className":4540},[2204,2258],[2183,4542,3445],{"className":4543},[2204,2205,2258],[2183,4545,2295],{"className":4546,"style":2294},[2204,2205,2258],[2183,4548,4550,4553],{"className":4549},[2204,2258],[2183,4551,3134],{"className":4552},[2204,2205,2258],[2183,4554,4556],{"className":4555},[2230],[2183,4557,4559,4616],{"className":4558},[2234,2302],[2183,4560,4562,4613],{"className":4561},[2238],[2183,4563,4565],{"className":4564,"style":3467},[2242],[2183,4566,4567,4570],{"style":3470},[2183,4568],{"className":4569,"style":3474},[2250],[2183,4571,4573],{"className":4572},[2255,3478,3479,2258],[2183,4574,4576],{"className":4575},[2204,2258],[2183,4577,4579,4582],{"className":4578},[2204,2258],[2183,4580,3134],{"className":4581},[2204,2205,2258],[2183,4583,4585],{"className":4584},[2230],[2183,4586,4588,4605],{"className":4587},[2234,2302],[2183,4589,4591,4602],{"className":4590},[2238],[2183,4592,4594],{"className":4593,"style":4437},[2242],[2183,4595,4596,4599],{"style":4440},[2183,4597],{"className":4598,"style":4444},[2250],[2183,4600,3717],{"className":4601},[2204,2205,2258],[2183,4603,2337],{"className":4604},[2336],[2183,4606,4608],{"className":4607},[2238],[2183,4609,4611],{"className":4610,"style":4457},[2242],[2183,4612],{},[2183,4614,2337],{"className":4615},[2336],[2183,4617,4619],{"className":4618},[2238],[2183,4620,4622],{"className":4621,"style":4469},[2242],[2183,4623],{},[2183,4625,2337],{"className":4626},[2336],[2183,4628,4630],{"className":4629},[2238],[2183,4631,4633],{"className":4632,"style":4481},[2242],[2183,4634],{}," = Lead Time du composant i",[280,4637,4638,4691],{},[2183,4639,4641],{"className":4640},[2186],[2183,4642,4644],{"className":4643,"ariaHidden":2191},[2190],[2183,4645,4647,4651],{"className":4646},[2195],[2183,4648],{"className":4649,"style":4650},[2199],"height:0.5806em;vertical-align:-0.15em;",[2183,4652,4654,4657],{"className":4653},[2204],[2183,4655,2755],{"className":4656},[2204,2205],[2183,4658,4660],{"className":4659},[2230],[2183,4661,4663,4683],{"className":4662},[2234,2302],[2183,4664,4666,4680],{"className":4665},[2238],[2183,4667,4669],{"className":4668,"style":2309},[2242],[2183,4670,4671,4674],{"style":2425},[2183,4672],{"className":4673,"style":2251},[2250],[2183,4675,4677],{"className":4676},[2255,2256,2257,2258],[2183,4678,3134],{"className":4679},[2204,2205,2258],[2183,4681,2337],{"className":4682},[2336],[2183,4684,4686],{"className":4685},[2238],[2183,4687,4689],{"className":4688,"style":2707},[2242],[2183,4690],{}," = Nombre de composants du produit",[19,4693,4694],{},[414,4695,4696],{},"Niveau Domaine",[2183,4698,4700],{"className":4699},[2274],[2183,4701,4703],{"className":4702},[2186],[2183,4704,4706,4812],{"className":4705,"ariaHidden":2191},[2190],[2183,4707,4709,4712,4715,4803,4806,4809],{"className":4708},[2195],[2183,4710],{"className":4711,"style":3408},[2199],[2183,4713,3412],{"className":4714},[2204],[2183,4716,4718,4721],{"className":4717},[2204],[2183,4719,2409],{"className":4720},[2204,2205],[2183,4722,4724],{"className":4723},[2230],[2183,4725,4727,4795],{"className":4726},[2234,2302],[2183,4728,4730,4792],{"className":4729},[2238],[2183,4731,4733],{"className":4732,"style":2422},[2242],[2183,4734,4735,4738],{"style":2425},[2183,4736],{"className":4737,"style":2251},[2250],[2183,4739,4741],{"className":4740},[2255,2256,2257,2258],[2183,4742,4744,4747,4750],{"className":4743},[2204,2258],[2183,4745,3445],{"className":4746},[2204,2205,2258],[2183,4748,2295],{"className":4749,"style":2294},[2204,2205,2258],[2183,4751,4753,4756],{"className":4752},[2204,2258],[2183,4754,3134],{"className":4755},[2204,2205,2258],[2183,4757,4759],{"className":4758},[2230],[2183,4760,4762,4783],{"className":4761},[2234,2302],[2183,4763,4765,4780],{"className":4764},[2238],[2183,4766,4768],{"className":4767,"style":4437},[2242],[2183,4769,4771,4774],{"style":4770},"top:-2.3488em;margin-left:0em;margin-right:0.0714em;",[2183,4772],{"className":4773,"style":3474},[2250],[2183,4775,4777],{"className":4776},[2255,3478,3479,2258],[2183,4778,2438],{"className":4779},[2204,2205,2258],[2183,4781,2337],{"className":4782},[2336],[2183,4784,4786],{"className":4785},[2238],[2183,4787,4790],{"className":4788,"style":4789},[2242],"height:0.1512em;",[2183,4791],{},[2183,4793,2337],{"className":4794},[2336],[2183,4796,4798],{"className":4797},[2238],[2183,4799,4801],{"className":4800,"style":2344},[2242],[2183,4802],{},[2183,4804],{"className":4805,"style":2351},[2350],[2183,4807,2356],{"className":4808},[2355],[2183,4810],{"className":4811,"style":2351},[2350],[2183,4813,4815,4818,4917,4920,4923,4926],{"className":4814},[2195],[2183,4816],{"className":4817,"style":2366},[2199],[2183,4819,4821,4824,4914],{"className":4820},[2204],[2183,4822],{"className":4823},[2373,2374],[2183,4825,4827],{"className":4826},[2378],[2183,4828,4830,4906],{"className":4829},[2234,2302],[2183,4831,4833,4903],{"className":4832},[2238],[2183,4834,4836,4884,4892],{"className":4835,"style":2388},[2242],[2183,4837,4838,4841],{"style":2391},[2183,4839],{"className":4840,"style":2395},[2250],[2183,4842,4844],{"className":4843},[2204],[2183,4845,4847,4850],{"className":4846},[2204],[2183,4848,2755],{"className":4849},[2204,2205],[2183,4851,4853],{"className":4852},[2230],[2183,4854,4856,4876],{"className":4855},[2234,2302],[2183,4857,4859,4873],{"className":4858},[2238],[2183,4860,4862],{"className":4861,"style":2309},[2242],[2183,4863,4864,4867],{"style":2425},[2183,4865],{"className":4866,"style":2251},[2250],[2183,4868,4870],{"className":4869},[2255,2256,2257,2258],[2183,4871,19],{"className":4872},[2204,2205,2258],[2183,4874,2337],{"className":4875},[2336],[2183,4877,4879],{"className":4878},[2238],[2183,4880,4882],{"className":4881,"style":2344},[2242],[2183,4883],{},[2183,4885,4886,4889],{"style":2530},[2183,4887],{"className":4888,"style":2395},[2250],[2183,4890],{"className":4891,"style":2538},[2537],[2183,4893,4894,4897],{"style":2541},[2183,4895],{"className":4896,"style":2395},[2250],[2183,4898,4900],{"className":4899},[2204],[2183,4901,2269],{"className":4902},[2204],[2183,4904,2337],{"className":4905},[2336],[2183,4907,4909],{"className":4908},[2238],[2183,4910,4912],{"className":4911,"style":2560},[2242],[2183,4913],{},[2183,4915],{"className":4916},[2527,2374],[2183,4918],{"className":4919,"style":2793},[2350],[2183,4921,2846],{"className":4922,"style":3197},[2797,2844,2845],[2183,4924],{"className":4925,"style":2793},[2350],[2183,4927,4929,4935,4938,5061],{"className":4928},[3525],[2183,4930,4932],{"className":4931,"style":3530},[2373,3529],[2183,4933,2402],{"className":4934},[3534,3479],[2183,4936,3412],{"className":4937},[2204],[2183,4939,4941,4944],{"className":4940},[2204],[2183,4942,2409],{"className":4943},[2204,2205],[2183,4945,4947],{"className":4946},[2230],[2183,4948,4950,5053],{"className":4949},[2234,2302],[2183,4951,4953,5050],{"className":4952},[2238],[2183,4954,4956],{"className":4955,"style":2422},[2242],[2183,4957,4958,4961],{"style":2425},[2183,4959],{"className":4960,"style":2251},[2250],[2183,4962,4964],{"className":4963},[2255,2256,2257,2258],[2183,4965,4967,4970,4973],{"className":4966},[2204,2258],[2183,4968,3445],{"className":4969},[2204,2205,2258],[2183,4971,2295],{"className":4972,"style":2294},[2204,2205,2258],[2183,4974,4976,4979],{"className":4975},[2204,2258],[2183,4977,3134],{"className":4978},[2204,2205,2258],[2183,4980,4982],{"className":4981},[2230],[2183,4983,4985,5042],{"className":4984},[2234,2302],[2183,4986,4988,5039],{"className":4987},[2238],[2183,4989,4991],{"className":4990,"style":3467},[2242],[2183,4992,4993,4996],{"style":3470},[2183,4994],{"className":4995,"style":3474},[2250],[2183,4997,4999],{"className":4998},[2255,3478,3479,2258],[2183,5000,5002],{"className":5001},[2204,2258],[2183,5003,5005,5008],{"className":5004},[2204,2258],[2183,5006,19],{"className":5007},[2204,2205,2258],[2183,5009,5011],{"className":5010},[2230],[2183,5012,5014,5031],{"className":5013},[2234,2302],[2183,5015,5017,5028],{"className":5016},[2238],[2183,5018,5020],{"className":5019,"style":4437},[2242],[2183,5021,5022,5025],{"style":4440},[2183,5023],{"className":5024,"style":4444},[2250],[2183,5026,3717],{"className":5027},[2204,2205,2258],[2183,5029,2337],{"className":5030},[2336],[2183,5032,5034],{"className":5033},[2238],[2183,5035,5037],{"className":5036,"style":4457},[2242],[2183,5038],{},[2183,5040,2337],{"className":5041},[2336],[2183,5043,5045],{"className":5044},[2238],[2183,5046,5048],{"className":5047,"style":4469},[2242],[2183,5049],{},[2183,5051,2337],{"className":5052},[2336],[2183,5054,5056],{"className":5055},[2238],[2183,5057,5059],{"className":5058,"style":4481},[2242],[2183,5060],{},[2183,5062,5064],{"className":5063,"style":3530},[2527,3529],[2183,5065,746],{"className":5066},[3534,3479],[19,5068,3845],{},[277,5070,5071,5212],{},[280,5072,5073,5211],{},[2183,5074,5076],{"className":5075},[2186],[2183,5077,5079],{"className":5078,"ariaHidden":2191},[2190],[2183,5080,5082,5085,5088],{"className":5081},[2195],[2183,5083],{"className":5084,"style":4508},[2199],[2183,5086,3412],{"className":5087},[2204],[2183,5089,5091,5094],{"className":5090},[2204],[2183,5092,2409],{"className":5093},[2204,2205],[2183,5095,5097],{"className":5096},[2230],[2183,5098,5100,5203],{"className":5099},[2234,2302],[2183,5101,5103,5200],{"className":5102},[2238],[2183,5104,5106],{"className":5105,"style":2422},[2242],[2183,5107,5108,5111],{"style":2425},[2183,5109],{"className":5110,"style":2251},[2250],[2183,5112,5114],{"className":5113},[2255,2256,2257,2258],[2183,5115,5117,5120,5123],{"className":5116},[2204,2258],[2183,5118,3445],{"className":5119},[2204,2205,2258],[2183,5121,2295],{"className":5122,"style":2294},[2204,2205,2258],[2183,5124,5126,5129],{"className":5125},[2204,2258],[2183,5127,3134],{"className":5128},[2204,2205,2258],[2183,5130,5132],{"className":5131},[2230],[2183,5133,5135,5192],{"className":5134},[2234,2302],[2183,5136,5138,5189],{"className":5137},[2238],[2183,5139,5141],{"className":5140,"style":3467},[2242],[2183,5142,5143,5146],{"style":3470},[2183,5144],{"className":5145,"style":3474},[2250],[2183,5147,5149],{"className":5148},[2255,3478,3479,2258],[2183,5150,5152],{"className":5151},[2204,2258],[2183,5153,5155,5158],{"className":5154},[2204,2258],[2183,5156,19],{"className":5157},[2204,2205,2258],[2183,5159,5161],{"className":5160},[2230],[2183,5162,5164,5181],{"className":5163},[2234,2302],[2183,5165,5167,5178],{"className":5166},[2238],[2183,5168,5170],{"className":5169,"style":4437},[2242],[2183,5171,5172,5175],{"style":4440},[2183,5173],{"className":5174,"style":4444},[2250],[2183,5176,3717],{"className":5177},[2204,2205,2258],[2183,5179,2337],{"className":5180},[2336],[2183,5182,5184],{"className":5183},[2238],[2183,5185,5187],{"className":5186,"style":4457},[2242],[2183,5188],{},[2183,5190,2337],{"className":5191},[2336],[2183,5193,5195],{"className":5194},[2238],[2183,5196,5198],{"className":5197,"style":4469},[2242],[2183,5199],{},[2183,5201,2337],{"className":5202},[2336],[2183,5204,5206],{"className":5205},[2238],[2183,5207,5209],{"className":5208,"style":4481},[2242],[2183,5210],{}," = Lead Time du produit i",[280,5213,5214,5270],{},[2183,5215,5217],{"className":5216},[2186],[2183,5218,5220],{"className":5219,"ariaHidden":2191},[2190],[2183,5221,5223,5227],{"className":5222},[2195],[2183,5224],{"className":5225,"style":5226},[2199],"height:0.7167em;vertical-align:-0.2861em;",[2183,5228,5230],{"className":5229},[2204],[2183,5231,5233,5236],{"className":5232},[2204],[2183,5234,2755],{"className":5235},[2204,2205],[2183,5237,5239],{"className":5238},[2230],[2183,5240,5242,5262],{"className":5241},[2234,2302],[2183,5243,5245,5259],{"className":5244},[2238],[2183,5246,5248],{"className":5247,"style":2309},[2242],[2183,5249,5250,5253],{"style":2425},[2183,5251],{"className":5252,"style":2251},[2250],[2183,5254,5256],{"className":5255},[2255,2256,2257,2258],[2183,5257,19],{"className":5258},[2204,2205,2258],[2183,5260,2337],{"className":5261},[2336],[2183,5263,5265],{"className":5264},[2238],[2183,5266,5268],{"className":5267,"style":2344},[2242],[2183,5269],{}," = Nombre de produits dans le domaine",[19,5272,5273],{},[414,5274,5275],{},"Niveau Plateforme",[2183,5277,5279],{"className":5278},[2274],[2183,5280,5282],{"className":5281},[2186],[2183,5283,5285,5392],{"className":5284,"ariaHidden":2191},[2190],[2183,5286,5288,5291,5294,5383,5386,5389],{"className":5287},[2195],[2183,5289],{"className":5290,"style":3408},[2199],[2183,5292,3412],{"className":5293},[2204],[2183,5295,5297,5300],{"className":5296},[2204],[2183,5298,2409],{"className":5299},[2204,2205],[2183,5301,5303],{"className":5302},[2230],[2183,5304,5306,5375],{"className":5305},[2234,2302],[2183,5307,5309,5372],{"className":5308},[2238],[2183,5310,5312],{"className":5311,"style":2422},[2242],[2183,5313,5314,5317],{"style":2425},[2183,5315],{"className":5316,"style":2251},[2250],[2183,5318,5320],{"className":5319},[2255,2256,2257,2258],[2183,5321,5323,5326,5329],{"className":5322},[2204,2258],[2183,5324,3445],{"className":5325},[2204,2205,2258],[2183,5327,2295],{"className":5328,"style":2294},[2204,2205,2258],[2183,5330,5332,5335],{"className":5331},[2204,2258],[2183,5333,3134],{"className":5334},[2204,2205,2258],[2183,5336,5338],{"className":5337},[2230],[2183,5339,5341,5363],{"className":5340},[2234,2302],[2183,5342,5344,5360],{"className":5343},[2238],[2183,5345,5347],{"className":5346,"style":4437},[2242],[2183,5348,5350,5353],{"style":5349},"top:-2.3567em;margin-left:0em;margin-right:0.0714em;",[2183,5351],{"className":5352,"style":3474},[2250],[2183,5354,5356],{"className":5355},[2255,3478,3479,2258],[2183,5357,5359],{"className":5358,"style":3075},[2204,2205,2258],"P",[2183,5361,2337],{"className":5362},[2336],[2183,5364,5366],{"className":5365},[2238],[2183,5367,5370],{"className":5368,"style":5369},[2242],"height:0.1433em;",[2183,5371],{},[2183,5373,2337],{"className":5374},[2336],[2183,5376,5378],{"className":5377},[2238],[2183,5379,5381],{"className":5380,"style":2344},[2242],[2183,5382],{},[2183,5384],{"className":5385,"style":2351},[2350],[2183,5387,2356],{"className":5388},[2355],[2183,5390],{"className":5391,"style":2351},[2350],[2183,5393,5395,5398,5497,5500,5503,5506],{"className":5394},[2195],[2183,5396],{"className":5397,"style":4233},[2199],[2183,5399,5401,5404,5494],{"className":5400},[2204],[2183,5402],{"className":5403},[2373,2374],[2183,5405,5407],{"className":5406},[2378],[2183,5408,5410,5486],{"className":5409},[2234,2302],[2183,5411,5413,5483],{"className":5412},[2238],[2183,5414,5416,5464,5472],{"className":5415,"style":2388},[2242],[2183,5417,5418,5421],{"style":2391},[2183,5419],{"className":5420,"style":2395},[2250],[2183,5422,5424],{"className":5423},[2204],[2183,5425,5427,5430],{"className":5426},[2204],[2183,5428,2755],{"className":5429},[2204,2205],[2183,5431,5433],{"className":5432},[2230],[2183,5434,5436,5456],{"className":5435},[2234,2302],[2183,5437,5439,5453],{"className":5438},[2238],[2183,5440,5442],{"className":5441,"style":2422},[2242],[2183,5443,5444,5447],{"style":2425},[2183,5445],{"className":5446,"style":2251},[2250],[2183,5448,5450],{"className":5449},[2255,2256,2257,2258],[2183,5451,2438],{"className":5452},[2204,2205,2258],[2183,5454,2337],{"className":5455},[2336],[2183,5457,5459],{"className":5458},[2238],[2183,5460,5462],{"className":5461,"style":2707},[2242],[2183,5463],{},[2183,5465,5466,5469],{"style":2530},[2183,5467],{"className":5468,"style":2395},[2250],[2183,5470],{"className":5471,"style":2538},[2537],[2183,5473,5474,5477],{"style":2541},[2183,5475],{"className":5476,"style":2395},[2250],[2183,5478,5480],{"className":5479},[2204],[2183,5481,2269],{"className":5482},[2204],[2183,5484,2337],{"className":5485},[2336],[2183,5487,5489],{"className":5488},[2238],[2183,5490,5492],{"className":5491,"style":4328},[2242],[2183,5493],{},[2183,5495],{"className":5496},[2527,2374],[2183,5498],{"className":5499,"style":2793},[2350],[2183,5501,2846],{"className":5502,"style":3197},[2797,2844,2845],[2183,5504],{"className":5505,"style":2793},[2350],[2183,5507,5509,5515,5518,5643],{"className":5508},[3525],[2183,5510,5512],{"className":5511,"style":3530},[2373,3529],[2183,5513,2402],{"className":5514},[3534,3479],[2183,5516,3412],{"className":5517},[2204],[2183,5519,5521,5524],{"className":5520},[2204],[2183,5522,2409],{"className":5523},[2204,2205],[2183,5525,5527],{"className":5526},[2230],[2183,5528,5530,5634],{"className":5529},[2234,2302],[2183,5531,5533,5631],{"className":5532},[2238],[2183,5534,5536],{"className":5535,"style":2422},[2242],[2183,5537,5538,5541],{"style":2425},[2183,5539],{"className":5540,"style":2251},[2250],[2183,5542,5544],{"className":5543},[2255,2256,2257,2258],[2183,5545,5547,5550,5553],{"className":5546},[2204,2258],[2183,5548,3445],{"className":5549},[2204,2205,2258],[2183,5551,2295],{"className":5552,"style":2294},[2204,2205,2258],[2183,5554,5556,5559],{"className":5555},[2204,2258],[2183,5557,3134],{"className":5558},[2204,2205,2258],[2183,5560,5562],{"className":5561},[2230],[2183,5563,5565,5622],{"className":5564},[2234,2302],[2183,5566,5568,5619],{"className":5567},[2238],[2183,5569,5571],{"className":5570,"style":4437},[2242],[2183,5572,5573,5576],{"style":4770},[2183,5574],{"className":5575,"style":3474},[2250],[2183,5577,5579],{"className":5578},[2255,3478,3479,2258],[2183,5580,5582],{"className":5581},[2204,2258],[2183,5583,5585,5588],{"className":5584},[2204,2258],[2183,5586,2438],{"className":5587},[2204,2205,2258],[2183,5589,5591],{"className":5590},[2230],[2183,5592,5594,5611],{"className":5593},[2234,2302],[2183,5595,5597,5608],{"className":5596},[2238],[2183,5598,5600],{"className":5599,"style":4437},[2242],[2183,5601,5602,5605],{"style":4440},[2183,5603],{"className":5604,"style":4444},[2250],[2183,5606,3717],{"className":5607},[2204,2205,2258],[2183,5609,2337],{"className":5610},[2336],[2183,5612,5614],{"className":5613},[2238],[2183,5615,5617],{"className":5616,"style":4457},[2242],[2183,5618],{},[2183,5620,2337],{"className":5621},[2336],[2183,5623,5625],{"className":5624},[2238],[2183,5626,5629],{"className":5627,"style":5628},[2242],"height:0.376em;",[2183,5630],{},[2183,5632,2337],{"className":5633},[2336],[2183,5635,5637],{"className":5636},[2238],[2183,5638,5641],{"className":5639,"style":5640},[2242],"height:0.4132em;",[2183,5642],{},[2183,5644,5646],{"className":5645,"style":3530},[2527,3529],[2183,5647,746],{"className":5648},[3534,3479],[19,5650,3845],{},[277,5652,5653,5795],{},[280,5654,5655,5794],{},[2183,5656,5658],{"className":5657},[2186],[2183,5659,5661],{"className":5660,"ariaHidden":2191},[2190],[2183,5662,5664,5668,5671],{"className":5663},[2195],[2183,5665],{"className":5666,"style":5667},[2199],"height:1.0965em;vertical-align:-0.4132em;",[2183,5669,3412],{"className":5670},[2204],[2183,5672,5674,5677],{"className":5673},[2204],[2183,5675,2409],{"className":5676},[2204,2205],[2183,5678,5680],{"className":5679},[2230],[2183,5681,5683,5786],{"className":5682},[2234,2302],[2183,5684,5686,5783],{"className":5685},[2238],[2183,5687,5689],{"className":5688,"style":2422},[2242],[2183,5690,5691,5694],{"style":2425},[2183,5692],{"className":5693,"style":2251},[2250],[2183,5695,5697],{"className":5696},[2255,2256,2257,2258],[2183,5698,5700,5703,5706],{"className":5699},[2204,2258],[2183,5701,3445],{"className":5702},[2204,2205,2258],[2183,5704,2295],{"className":5705,"style":2294},[2204,2205,2258],[2183,5707,5709,5712],{"className":5708},[2204,2258],[2183,5710,3134],{"className":5711},[2204,2205,2258],[2183,5713,5715],{"className":5714},[2230],[2183,5716,5718,5775],{"className":5717},[2234,2302],[2183,5719,5721,5772],{"className":5720},[2238],[2183,5722,5724],{"className":5723,"style":4437},[2242],[2183,5725,5726,5729],{"style":4770},[2183,5727],{"className":5728,"style":3474},[2250],[2183,5730,5732],{"className":5731},[2255,3478,3479,2258],[2183,5733,5735],{"className":5734},[2204,2258],[2183,5736,5738,5741],{"className":5737},[2204,2258],[2183,5739,2438],{"className":5740},[2204,2205,2258],[2183,5742,5744],{"className":5743},[2230],[2183,5745,5747,5764],{"className":5746},[2234,2302],[2183,5748,5750,5761],{"className":5749},[2238],[2183,5751,5753],{"className":5752,"style":4437},[2242],[2183,5754,5755,5758],{"style":4440},[2183,5756],{"className":5757,"style":4444},[2250],[2183,5759,3717],{"className":5760},[2204,2205,2258],[2183,5762,2337],{"className":5763},[2336],[2183,5765,5767],{"className":5766},[2238],[2183,5768,5770],{"className":5769,"style":4457},[2242],[2183,5771],{},[2183,5773,2337],{"className":5774},[2336],[2183,5776,5778],{"className":5777},[2238],[2183,5779,5781],{"className":5780,"style":5628},[2242],[2183,5782],{},[2183,5784,2337],{"className":5785},[2336],[2183,5787,5789],{"className":5788},[2238],[2183,5790,5792],{"className":5791,"style":5640},[2242],[2183,5793],{}," = Lead Time du domaine i",[280,5796,5797,5849],{},[2183,5798,5800],{"className":5799},[2186],[2183,5801,5803],{"className":5802,"ariaHidden":2191},[2190],[2183,5804,5806,5809],{"className":5805},[2195],[2183,5807],{"className":5808,"style":4650},[2199],[2183,5810,5812,5815],{"className":5811},[2204],[2183,5813,2755],{"className":5814},[2204,2205],[2183,5816,5818],{"className":5817},[2230],[2183,5819,5821,5841],{"className":5820},[2234,2302],[2183,5822,5824,5838],{"className":5823},[2238],[2183,5825,5827],{"className":5826,"style":2422},[2242],[2183,5828,5829,5832],{"style":2425},[2183,5830],{"className":5831,"style":2251},[2250],[2183,5833,5835],{"className":5834},[2255,2256,2257,2258],[2183,5836,2438],{"className":5837},[2204,2205,2258],[2183,5839,2337],{"className":5840},[2336],[2183,5842,5844],{"className":5843},[2238],[2183,5845,5847],{"className":5846,"style":2707},[2242],[2183,5848],{}," = Nombre de domaines dans la plateforme",[87,5851,1277],{"id":5852},"deployment-frequency",[19,5854,5855],{},[414,5856,3392],{},[2183,5858,5860],{"className":5859},[2274],[2183,5861,5863],{"className":5862},[2186],[2183,5864,5866,5930],{"className":5865,"ariaHidden":2191},[2190],[2183,5867,5869,5872,5921,5924,5927],{"className":5868},[2195],[2183,5870],{"className":5871,"style":2287},[2199],[2183,5873,5875,5878],{"className":5874},[2204],[2183,5876,2295],{"className":5877,"style":2294},[2204,2205],[2183,5879,5881],{"className":5880},[2230],[2183,5882,5884,5913],{"className":5883},[2234,2302],[2183,5885,5887,5910],{"className":5886},[2238],[2183,5888,5890],{"className":5889,"style":2309},[2242],[2183,5891,5892,5895],{"style":2312},[2183,5893],{"className":5894,"style":2251},[2250],[2183,5896,5898],{"className":5897},[2255,2256,2257,2258],[2183,5899,5901,5904,5907],{"className":5900},[2204,2258],[2183,5902,2325],{"className":5903},[2204,2205,2258],[2183,5905,2329],{"className":5906},[2204,2205,2258],[2183,5908,19],{"className":5909},[2204,2205,2258],[2183,5911,2337],{"className":5912},[2336],[2183,5914,5916],{"className":5915},[2238],[2183,5917,5919],{"className":5918,"style":2344},[2242],[2183,5920],{},[2183,5922],{"className":5923,"style":2351},[2350],[2183,5925,2356],{"className":5926},[2355],[2183,5928],{"className":5929,"style":2351},[2350],[2183,5931,5933,5936],{"className":5932},[2195],[2183,5934],{"className":5935,"style":2366},[2199],[2183,5937,5939,5942,6105],{"className":5938},[2204],[2183,5940],{"className":5941},[2373,2374],[2183,5943,5945],{"className":5944},[2378],[2183,5946,5948,6097],{"className":5947},[2234,2302],[2183,5949,5951,6094],{"className":5950},[2238],[2183,5952,5954,6075,6083],{"className":5953,"style":2388},[2242],[2183,5955,5956,5959],{"style":2391},[2183,5957],{"className":5958,"style":2395},[2250],[2183,5960,5962,6014,6017,6020,6023],{"className":5961},[2204],[2183,5963,5965,5968],{"className":5964},[2204],[2183,5966,2409],{"className":5967},[2204,2205],[2183,5969,5971],{"className":5970},[2230],[2183,5972,5974,6006],{"className":5973},[2234,2302],[2183,5975,5977,6003],{"className":5976},[2238],[2183,5978,5980],{"className":5979,"style":2422},[2242],[2183,5981,5982,5985],{"style":2425},[2183,5983],{"className":5984,"style":2251},[2250],[2183,5986,5988],{"className":5987},[2255,2256,2257,2258],[2183,5989,5991,5994,5997,6000],{"className":5990},[2204,2258],[2183,5992,2438],{"className":5993},[2204,2205,2258],[2183,5995,2442],{"className":5996},[2204,2205,2258],[2183,5998,19],{"className":5999},[2204,2205,2258],[2183,6001,2449],{"className":6002},[2204,2258],[2183,6004,2337],{"className":6005},[2336],[2183,6007,6009],{"className":6008},[2238],[2183,6010,6012],{"className":6011,"style":2344},[2242],[2183,6013],{},[2183,6015],{"className":6016,"style":2464},[2350],[2183,6018,2265],{"className":6019},[2468],[2183,6021],{"className":6022,"style":2464},[2350],[2183,6024,6026,6029],{"className":6025},[2204],[2183,6027,2409],{"className":6028},[2204,2205],[2183,6030,6032],{"className":6031},[2230],[2183,6033,6035,6067],{"className":6034},[2234,2302],[2183,6036,6038,6064],{"className":6037},[2238],[2183,6039,6041],{"className":6040,"style":2422},[2242],[2183,6042,6043,6046],{"style":2425},[2183,6044],{"className":6045,"style":2251},[2250],[2183,6047,6049],{"className":6048},[2255,2256,2257,2258],[2183,6050,6052,6055,6058,6061],{"className":6051},[2204,2258],[2183,6053,2438],{"className":6054},[2204,2205,2258],[2183,6056,2442],{"className":6057},[2204,2205,2258],[2183,6059,19],{"className":6060},[2204,2205,2258],[2183,6062,2269],{"className":6063},[2204,2258],[2183,6065,2337],{"className":6066},[2336],[2183,6068,6070],{"className":6069},[2238],[2183,6071,6073],{"className":6072,"style":2344},[2242],[2183,6074],{},[2183,6076,6077,6080],{"style":2530},[2183,6078],{"className":6079,"style":2395},[2250],[2183,6081],{"className":6082,"style":2538},[2537],[2183,6084,6085,6088],{"style":2541},[2183,6086],{"className":6087,"style":2395},[2250],[2183,6089,6091],{"className":6090},[2204],[2183,6092,2269],{"className":6093},[2204],[2183,6095,2337],{"className":6096},[2336],[2183,6098,6100],{"className":6099},[2238],[2183,6101,6103],{"className":6102,"style":2560},[2242],[2183,6104],{},[2183,6106],{"className":6107},[2527,2374],[19,6109,3845],{},[277,6111,6112,6180],{},[280,6113,6114,6179],{},[2183,6115,6117],{"className":6116},[2186],[2183,6118,6120],{"className":6119,"ariaHidden":2191},[2190],[2183,6121,6123,6127],{"className":6122},[2195],[2183,6124],{"className":6125,"style":6126},[2199],"height:0.9012em;vertical-align:-0.2861em;",[2183,6128,6130,6133],{"className":6129},[2204],[2183,6131,2409],{"className":6132},[2204,2205],[2183,6134,6136],{"className":6135},[2230],[2183,6137,6139,6171],{"className":6138},[2234,2302],[2183,6140,6142,6168],{"className":6141},[2238],[2183,6143,6145],{"className":6144,"style":2422},[2242],[2183,6146,6147,6150],{"style":2425},[2183,6148],{"className":6149,"style":2251},[2250],[2183,6151,6153],{"className":6152},[2255,2256,2257,2258],[2183,6154,6156,6159,6162,6165],{"className":6155},[2204,2258],[2183,6157,2438],{"className":6158},[2204,2205,2258],[2183,6160,2442],{"className":6161},[2204,2205,2258],[2183,6163,19],{"className":6164},[2204,2205,2258],[2183,6166,2449],{"className":6167},[2204,2258],[2183,6169,2337],{"className":6170},[2336],[2183,6172,6174],{"className":6173},[2238],[2183,6175,6177],{"className":6176,"style":2344},[2242],[2183,6178],{}," = Date du déploiement actuel",[280,6181,6182,6246],{},[2183,6183,6185],{"className":6184},[2186],[2183,6186,6188],{"className":6187,"ariaHidden":2191},[2190],[2183,6189,6191,6194],{"className":6190},[2195],[2183,6192],{"className":6193,"style":6126},[2199],[2183,6195,6197,6200],{"className":6196},[2204],[2183,6198,2409],{"className":6199},[2204,2205],[2183,6201,6203],{"className":6202},[2230],[2183,6204,6206,6238],{"className":6205},[2234,2302],[2183,6207,6209,6235],{"className":6208},[2238],[2183,6210,6212],{"className":6211,"style":2422},[2242],[2183,6213,6214,6217],{"style":2425},[2183,6215],{"className":6216,"style":2251},[2250],[2183,6218,6220],{"className":6219},[2255,2256,2257,2258],[2183,6221,6223,6226,6229,6232],{"className":6222},[2204,2258],[2183,6224,2438],{"className":6225},[2204,2205,2258],[2183,6227,2442],{"className":6228},[2204,2205,2258],[2183,6230,19],{"className":6231},[2204,2205,2258],[2183,6233,2269],{"className":6234},[2204,2258],[2183,6236,2337],{"className":6237},[2336],[2183,6239,6241],{"className":6240},[2238],[2183,6242,6244],{"className":6243,"style":2344},[2242],[2183,6245],{}," = Date du déploiement précédent",[19,6248,6249],{},[414,6250,4110],{},[2183,6252,6254],{"className":6253},[2274],[2183,6255,6257],{"className":6256},[2186],[2183,6258,6260,6324],{"className":6259,"ariaHidden":2191},[2190],[2183,6261,6263,6266,6315,6318,6321],{"className":6262},[2195],[2183,6264],{"className":6265,"style":2287},[2199],[2183,6267,6269,6272],{"className":6268},[2204],[2183,6270,2295],{"className":6271,"style":2294},[2204,2205],[2183,6273,6275],{"className":6274},[2230],[2183,6276,6278,6307],{"className":6277},[2234,2302],[2183,6279,6281,6304],{"className":6280},[2238],[2183,6282,6284],{"className":6283,"style":2422},[2242],[2183,6285,6286,6289],{"style":2312},[2183,6287],{"className":6288,"style":2251},[2250],[2183,6290,6292],{"className":6291},[2255,2256,2257,2258],[2183,6293,6295,6298,6301],{"className":6294},[2204,2258],[2183,6296,19],{"className":6297},[2204,2205,2258],[2183,6299,3124],{"className":6300},[2204,2205,2258],[2183,6302,2438],{"className":6303},[2204,2205,2258],[2183,6305,2337],{"className":6306},[2336],[2183,6308,6310],{"className":6309},[2238],[2183,6311,6313],{"className":6312,"style":2344},[2242],[2183,6314],{},[2183,6316],{"className":6317,"style":2351},[2350],[2183,6319,2356],{"className":6320},[2355],[2183,6322],{"className":6323,"style":2351},[2350],[2183,6325,6327,6331,6393,6396,6399,6402],{"className":6326},[2195],[2183,6328],{"className":6329,"style":6330},[2199],"height:2.0074em;vertical-align:-0.686em;",[2183,6332,6334,6337,6390],{"className":6333},[2204],[2183,6335],{"className":6336},[2373,2374],[2183,6338,6340],{"className":6339},[2378],[2183,6341,6343,6382],{"className":6342},[2234,2302],[2183,6344,6346,6379],{"className":6345},[2238],[2183,6347,6349,6360,6368],{"className":6348,"style":2388},[2242],[2183,6350,6351,6354],{"style":2391},[2183,6352],{"className":6353,"style":2395},[2250],[2183,6355,6357],{"className":6356},[2204],[2183,6358,2755],{"className":6359},[2204,2205],[2183,6361,6362,6365],{"style":2530},[2183,6363],{"className":6364,"style":2395},[2250],[2183,6366],{"className":6367,"style":2538},[2537],[2183,6369,6370,6373],{"style":2541},[2183,6371],{"className":6372,"style":2395},[2250],[2183,6374,6376],{"className":6375},[2204],[2183,6377,2269],{"className":6378},[2204],[2183,6380,2337],{"className":6381},[2336],[2183,6383,6385],{"className":6384},[2238],[2183,6386,6388],{"className":6387,"style":2784},[2242],[2183,6389],{},[2183,6391],{"className":6392},[2527,2374],[2183,6394],{"className":6395,"style":2793},[2350],[2183,6397,2846],{"className":6398,"style":3197},[2797,2844,2845],[2183,6400],{"className":6401,"style":2793},[2350],[2183,6403,6405,6408,6457],{"className":6404},[3525],[2183,6406,2402],{"className":6407,"style":3530},[2373,3529],[2183,6409,6411,6414],{"className":6410},[2204],[2183,6412,2295],{"className":6413,"style":2294},[2204,2205],[2183,6415,6417],{"className":6416},[2230],[2183,6418,6420,6449],{"className":6419},[2234,2302],[2183,6421,6423,6446],{"className":6422},[2238],[2183,6424,6426],{"className":6425,"style":2309},[2242],[2183,6427,6428,6431],{"style":2312},[2183,6429],{"className":6430,"style":2251},[2250],[2183,6432,6434],{"className":6433},[2255,2256,2257,2258],[2183,6435,6437,6440,6443],{"className":6436},[2204,2258],[2183,6438,2325],{"className":6439},[2204,2205,2258],[2183,6441,2329],{"className":6442},[2204,2205,2258],[2183,6444,19],{"className":6445},[2204,2205,2258],[2183,6447,2337],{"className":6448},[2336],[2183,6450,6452],{"className":6451},[2238],[2183,6453,6455],{"className":6454,"style":2344},[2242],[2183,6456],{},[2183,6458,746],{"className":6459,"style":3530},[2527,3529],[19,6461,3845],{},[277,6463,6464,6483],{},[280,6465,6466,6482],{},[2183,6467,6469],{"className":6468},[2186],[2183,6470,6472],{"className":6471,"ariaHidden":2191},[2190],[2183,6473,6475,6479],{"className":6474},[2195],[2183,6476],{"className":6477,"style":6478},[2199],"height:0.4306em;",[2183,6480,2755],{"className":6481},[2204,2205]," = Nombre de déploiements composants",[280,6484,6485,6546],{},[2183,6486,6488],{"className":6487},[2186],[2183,6489,6491],{"className":6490,"ariaHidden":2191},[2190],[2183,6492,6494,6497],{"className":6493},[2195],[2183,6495],{"className":6496,"style":2287},[2199],[2183,6498,6500,6503],{"className":6499},[2204],[2183,6501,2295],{"className":6502,"style":2294},[2204,2205],[2183,6504,6506],{"className":6505},[2230],[2183,6507,6509,6538],{"className":6508},[2234,2302],[2183,6510,6512,6535],{"className":6511},[2238],[2183,6513,6515],{"className":6514,"style":2309},[2242],[2183,6516,6517,6520],{"style":2312},[2183,6518],{"className":6519,"style":2251},[2250],[2183,6521,6523],{"className":6522},[2255,2256,2257,2258],[2183,6524,6526,6529,6532],{"className":6525},[2204,2258],[2183,6527,2325],{"className":6528},[2204,2205,2258],[2183,6530,2329],{"className":6531},[2204,2205,2258],[2183,6533,19],{"className":6534},[2204,2205,2258],[2183,6536,2337],{"className":6537},[2336],[2183,6539,6541],{"className":6540},[2238],[2183,6542,6544],{"className":6543,"style":2344},[2242],[2183,6545],{}," = Fréquence de déploiement du composant",[19,6548,6549],{},[414,6550,4696],{},[2183,6552,6554],{"className":6553},[2274],[2183,6555,6557],{"className":6556},[2186],[2183,6558,6560,6626],{"className":6559,"ariaHidden":2191},[2190],[2183,6561,6563,6567,6617,6620,6623],{"className":6562},[2195],[2183,6564],{"className":6565,"style":6566},[2199],"height:0.8889em;vertical-align:-0.1944em;",[2183,6568,6570,6573],{"className":6569},[2204],[2183,6571,2295],{"className":6572,"style":2294},[2204,2205],[2183,6574,6576],{"className":6575},[2230],[2183,6577,6579,6609],{"className":6578},[2234,2302],[2183,6580,6582,6606],{"className":6581},[2238],[2183,6583,6585],{"className":6584,"style":2422},[2242],[2183,6586,6587,6590],{"style":2312},[2183,6588],{"className":6589,"style":2251},[2250],[2183,6591,6593],{"className":6592},[2255,2256,2257,2258],[2183,6594,6596,6599,6602],{"className":6595},[2204,2258],[2183,6597,2438],{"className":6598},[2204,2205,2258],[2183,6600,2211],{"className":6601},[2204,2205,2258],[2183,6603,6605],{"className":6604},[2204,2205,2258],"main",[2183,6607,2337],{"className":6608},[2336],[2183,6610,6612],{"className":6611},[2238],[2183,6613,6615],{"className":6614,"style":2707},[2242],[2183,6616],{},[2183,6618],{"className":6619,"style":2351},[2350],[2183,6621,2356],{"className":6622},[2355],[2183,6624],{"className":6625,"style":2351},[2350],[2183,6627,6629,6632,6694,6697,6700,6703],{"className":6628},[2195],[2183,6630],{"className":6631,"style":6330},[2199],[2183,6633,6635,6638,6691],{"className":6634},[2204],[2183,6636],{"className":6637},[2373,2374],[2183,6639,6641],{"className":6640},[2378],[2183,6642,6644,6683],{"className":6643},[2234,2302],[2183,6645,6647,6680],{"className":6646},[2238],[2183,6648,6650,6661,6669],{"className":6649,"style":2388},[2242],[2183,6651,6652,6655],{"style":2391},[2183,6653],{"className":6654,"style":2395},[2250],[2183,6656,6658],{"className":6657},[2204],[2183,6659,2329],{"className":6660},[2204,2205],[2183,6662,6663,6666],{"style":2530},[2183,6664],{"className":6665,"style":2395},[2250],[2183,6667],{"className":6668,"style":2538},[2537],[2183,6670,6671,6674],{"style":2541},[2183,6672],{"className":6673,"style":2395},[2250],[2183,6675,6677],{"className":6676},[2204],[2183,6678,2269],{"className":6679},[2204],[2183,6681,2337],{"className":6682},[2336],[2183,6684,6686],{"className":6685},[2238],[2183,6687,6689],{"className":6688,"style":2784},[2242],[2183,6690],{},[2183,6692],{"className":6693},[2527,2374],[2183,6695],{"className":6696,"style":2793},[2350],[2183,6698,2846],{"className":6699,"style":3197},[2797,2844,2845],[2183,6701],{"className":6702,"style":2793},[2350],[2183,6704,6706,6709,6758],{"className":6705},[3525],[2183,6707,2402],{"className":6708,"style":3530},[2373,3529],[2183,6710,6712,6715],{"className":6711},[2204],[2183,6713,2295],{"className":6714,"style":2294},[2204,2205],[2183,6716,6718],{"className":6717},[2230],[2183,6719,6721,6750],{"className":6720},[2234,2302],[2183,6722,6724,6747],{"className":6723},[2238],[2183,6725,6727],{"className":6726,"style":2422},[2242],[2183,6728,6729,6732],{"style":2312},[2183,6730],{"className":6731,"style":2251},[2250],[2183,6733,6735],{"className":6734},[2255,2256,2257,2258],[2183,6736,6738,6741,6744],{"className":6737},[2204,2258],[2183,6739,19],{"className":6740},[2204,2205,2258],[2183,6742,3124],{"className":6743},[2204,2205,2258],[2183,6745,2438],{"className":6746},[2204,2205,2258],[2183,6748,2337],{"className":6749},[2336],[2183,6751,6753],{"className":6752},[2238],[2183,6754,6756],{"className":6755,"style":2344},[2242],[2183,6757],{},[2183,6759,746],{"className":6760,"style":3530},[2527,3529],[19,6762,3845],{},[277,6764,6765,6783],{},[280,6766,6767,6782],{},[2183,6768,6770],{"className":6769},[2186],[2183,6771,6773],{"className":6772,"ariaHidden":2191},[2190],[2183,6774,6776,6779],{"className":6775},[2195],[2183,6777],{"className":6778,"style":6478},[2199],[2183,6780,2329],{"className":6781},[2204,2205]," = Nombre de produits",[280,6784,6785,6846],{},[2183,6786,6788],{"className":6787},[2186],[2183,6789,6791],{"className":6790,"ariaHidden":2191},[2190],[2183,6792,6794,6797],{"className":6793},[2195],[2183,6795],{"className":6796,"style":2287},[2199],[2183,6798,6800,6803],{"className":6799},[2204],[2183,6801,2295],{"className":6802,"style":2294},[2204,2205],[2183,6804,6806],{"className":6805},[2230],[2183,6807,6809,6838],{"className":6808},[2234,2302],[2183,6810,6812,6835],{"className":6811},[2238],[2183,6813,6815],{"className":6814,"style":2422},[2242],[2183,6816,6817,6820],{"style":2312},[2183,6818],{"className":6819,"style":2251},[2250],[2183,6821,6823],{"className":6822},[2255,2256,2257,2258],[2183,6824,6826,6829,6832],{"className":6825},[2204,2258],[2183,6827,19],{"className":6828},[2204,2205,2258],[2183,6830,3124],{"className":6831},[2204,2205,2258],[2183,6833,2438],{"className":6834},[2204,2205,2258],[2183,6836,2337],{"className":6837},[2336],[2183,6839,6841],{"className":6840},[2238],[2183,6842,6844],{"className":6843,"style":2344},[2242],[2183,6845],{}," = Fréquence de déploiement du produit",[19,6848,6849],{},[414,6850,5275],{},[2183,6852,6854],{"className":6853},[2274],[2183,6855,6857],{"className":6856},[2186],[2183,6858,6860,6935],{"className":6859,"ariaHidden":2191},[2190],[2183,6861,6863,6866,6926,6929,6932],{"className":6862},[2195],[2183,6864],{"className":6865,"style":2287},[2199],[2183,6867,6869,6872],{"className":6868},[2204],[2183,6870,2295],{"className":6871,"style":2294},[2204,2205],[2183,6873,6875],{"className":6874},[2230],[2183,6876,6878,6918],{"className":6877},[2234,2302],[2183,6879,6881,6915],{"className":6880},[2238],[2183,6882,6884],{"className":6883,"style":2422},[2242],[2183,6885,6886,6889],{"style":2312},[2183,6887],{"className":6888,"style":2251},[2250],[2183,6890,6892],{"className":6891},[2255,2256,2257,2258],[2183,6893,6895,6899,6902,6905,6908,6912],{"className":6894},[2204,2258],[2183,6896,6898],{"className":6897,"style":3084},[2204,2205,2258],"pl",[2183,6900,50],{"className":6901},[2204,2205,2258],[2183,6903,2409],{"className":6904},[2204,2205,2258],[2183,6906,2295],{"className":6907,"style":2294},[2204,2205,2258],[2183,6909,6911],{"className":6910,"style":2218},[2204,2205,2258],"or",[2183,6913,2329],{"className":6914},[2204,2205,2258],[2183,6916,2337],{"className":6917},[2336],[2183,6919,6921],{"className":6920},[2238],[2183,6922,6924],{"className":6923,"style":2344},[2242],[2183,6925],{},[2183,6927],{"className":6928,"style":2351},[2350],[2183,6930,2356],{"className":6931},[2355],[2183,6933],{"className":6934,"style":2351},[2350],[2183,6936,6938,6941,7003,7006,7009,7012],{"className":6937},[2195],[2183,6939],{"className":6940,"style":6330},[2199],[2183,6942,6944,6947,7000],{"className":6943},[2204],[2183,6945],{"className":6946},[2373,2374],[2183,6948,6950],{"className":6949},[2378],[2183,6951,6953,6992],{"className":6952},[2234,2302],[2183,6954,6956,6989],{"className":6955},[2238],[2183,6957,6959,6970,6978],{"className":6958,"style":2388},[2242],[2183,6960,6961,6964],{"style":2391},[2183,6962],{"className":6963,"style":2395},[2250],[2183,6965,6967],{"className":6966},[2204],[2183,6968,2211],{"className":6969},[2204,2205],[2183,6971,6972,6975],{"style":2530},[2183,6973],{"className":6974,"style":2395},[2250],[2183,6976],{"className":6977,"style":2538},[2537],[2183,6979,6980,6983],{"style":2541},[2183,6981],{"className":6982,"style":2395},[2250],[2183,6984,6986],{"className":6985},[2204],[2183,6987,2269],{"className":6988},[2204],[2183,6990,2337],{"className":6991},[2336],[2183,6993,6995],{"className":6994},[2238],[2183,6996,6998],{"className":6997,"style":2784},[2242],[2183,6999],{},[2183,7001],{"className":7002},[2527,2374],[2183,7004],{"className":7005,"style":2793},[2350],[2183,7007,2846],{"className":7008,"style":3197},[2797,2844,2845],[2183,7010],{"className":7011,"style":2793},[2350],[2183,7013,7015,7018,7067],{"className":7014},[3525],[2183,7016,2402],{"className":7017,"style":3530},[2373,3529],[2183,7019,7021,7024],{"className":7020},[2204],[2183,7022,2295],{"className":7023,"style":2294},[2204,2205],[2183,7025,7027],{"className":7026},[2230],[2183,7028,7030,7059],{"className":7029},[2234,2302],[2183,7031,7033,7056],{"className":7032},[2238],[2183,7034,7036],{"className":7035,"style":2422},[2242],[2183,7037,7038,7041],{"style":2312},[2183,7039],{"className":7040,"style":2251},[2250],[2183,7042,7044],{"className":7043},[2255,2256,2257,2258],[2183,7045,7047,7050,7053],{"className":7046},[2204,2258],[2183,7048,2438],{"className":7049},[2204,2205,2258],[2183,7051,2211],{"className":7052},[2204,2205,2258],[2183,7054,6605],{"className":7055},[2204,2205,2258],[2183,7057,2337],{"className":7058},[2336],[2183,7060,7062],{"className":7061},[2238],[2183,7063,7065],{"className":7064,"style":2707},[2242],[2183,7066],{},[2183,7068,746],{"className":7069,"style":3530},[2527,3529],[19,7071,3845],{},[277,7073,7074,7092],{},[280,7075,7076,7091],{},[2183,7077,7079],{"className":7078},[2186],[2183,7080,7082],{"className":7081,"ariaHidden":2191},[2190],[2183,7083,7085,7088],{"className":7084},[2195],[2183,7086],{"className":7087,"style":6478},[2199],[2183,7089,2211],{"className":7090},[2204,2205]," = Nombre de domaines",[280,7093,7094,7155],{},[2183,7095,7097],{"className":7096},[2186],[2183,7098,7100],{"className":7099,"ariaHidden":2191},[2190],[2183,7101,7103,7106],{"className":7102},[2195],[2183,7104],{"className":7105,"style":6566},[2199],[2183,7107,7109,7112],{"className":7108},[2204],[2183,7110,2295],{"className":7111,"style":2294},[2204,2205],[2183,7113,7115],{"className":7114},[2230],[2183,7116,7118,7147],{"className":7117},[2234,2302],[2183,7119,7121,7144],{"className":7120},[2238],[2183,7122,7124],{"className":7123,"style":2422},[2242],[2183,7125,7126,7129],{"style":2312},[2183,7127],{"className":7128,"style":2251},[2250],[2183,7130,7132],{"className":7131},[2255,2256,2257,2258],[2183,7133,7135,7138,7141],{"className":7134},[2204,2258],[2183,7136,2438],{"className":7137},[2204,2205,2258],[2183,7139,2211],{"className":7140},[2204,2205,2258],[2183,7142,6605],{"className":7143},[2204,2205,2258],[2183,7145,2337],{"className":7146},[2336],[2183,7148,7150],{"className":7149},[2238],[2183,7151,7153],{"className":7152,"style":2707},[2242],[2183,7154],{}," = Fréquence de déploiement du domaine",[87,7157,1287],{"id":7158},"change-failure-rate",[19,7160,7161],{},[414,7162,3392],{},[277,7164,7165],{},[280,7166,7167],{},"Non calculé à ce niveau en raison de la difficulté à associer précisément les incidents à des composants spécifiques",[19,7169,7170],{},[414,7171,4110],{},[2183,7173,7175],{"className":7174},[2274],[2183,7176,7178],{"className":7177},[2186],[2183,7179,7181,7281],{"className":7180,"ariaHidden":2191},[2190],[2183,7182,7184,7187,7190,7193,7196,7199,7202,7205,7208,7211,7214,7272,7275,7278],{"className":7183},[2195],[2183,7185],{"className":7186,"style":2287},[2199],[2183,7188,3060],{"className":7189,"style":3059},[2204,2205],[2183,7191,3064],{"className":7192},[2204,2205],[2183,7194,3068],{"className":7195,"style":2692},[2204,2205],[2183,7197,2442],{"className":7198},[2204,2205],[2183,7200,3076],{"className":7201,"style":3075},[2204,2205],[2183,7203,3080],{"className":7204},[2204,2205],[2183,7206,3085],{"className":7207,"style":3084},[2204,2205],[2183,7209,2139],{"className":7210},[2204,2205],[2183,7212,2219],{"className":7213,"style":2218},[2204,2205],[2183,7215,7217,7220],{"className":7216},[2204],[2183,7218,2442],{"className":7219},[2204,2205],[2183,7221,7223],{"className":7222},[2230],[2183,7224,7226,7264],{"className":7225},[2234,2302],[2183,7227,7229,7261],{"className":7228},[2238],[2183,7230,7232],{"className":7231,"style":2422},[2242],[2183,7233,7234,7237],{"style":2425},[2183,7235],{"className":7236,"style":2251},[2250],[2183,7238,7240],{"className":7239},[2255,2256,2257,2258],[2183,7241,7243,7246,7249,7252,7255,7258],{"className":7242},[2204,2258],[2183,7244,19],{"className":7245},[2204,2205,2258],[2183,7247,3124],{"className":7248},[2204,2205,2258],[2183,7250,2438],{"className":7251},[2204,2205,2258],[2183,7253,2139],{"className":7254},[2204,2205,2258],[2183,7256,3134],{"className":7257},[2204,2205,2258],[2183,7259,2409],{"className":7260},[2204,2205,2258],[2183,7262,2337],{"className":7263},[2336],[2183,7265,7267],{"className":7266},[2238],[2183,7268,7270],{"className":7269,"style":2344},[2242],[2183,7271],{},[2183,7273],{"className":7274,"style":2351},[2350],[2183,7276,2356],{"className":7277},[2355],[2183,7279],{"className":7280,"style":2351},[2350],[2183,7282,7284,7287],{"className":7283},[2195],[2183,7285],{"className":7286,"style":3165},[2199],[2183,7288,7290,7293,7456],{"className":7289},[2204],[2183,7291],{"className":7292},[2373,2374],[2183,7294,7296],{"className":7295},[2378],[2183,7297,7299,7448],{"className":7298},[2234,2302],[2183,7300,7302,7445],{"className":7301},[2238],[2183,7303,7305,7374,7382],{"className":7304,"style":3184},[2242],[2183,7306,7307,7310],{"style":2391},[2183,7308],{"className":7309,"style":2395},[2250],[2183,7311,7313,7316,7319],{"className":7312},[2204],[2183,7314,2846],{"className":7315,"style":3197},[2797,2844,3196],[2183,7317],{"className":7318,"style":2793},[2350],[2183,7320,7322,7325],{"className":7321},[2204],[2183,7323,2438],{"className":7324},[2204,2205],[2183,7326,7328],{"className":7327},[2230],[2183,7329,7331,7366],{"className":7330},[2234,2302],[2183,7332,7334,7363],{"className":7333},[2238],[2183,7335,7337],{"className":7336,"style":2422},[2242],[2183,7338,7339,7342],{"style":2425},[2183,7340],{"className":7341,"style":2251},[2250],[2183,7343,7345],{"className":7344},[2255,2256,2257,2258],[2183,7346,7348,7351,7354,7357,7360],{"className":7347},[2204,2258],[2183,7349,2409],{"className":7350},[2204,2205,2258],[2183,7352,2211],{"className":7353},[2204,2205,2258],[2183,7355,2409],{"className":7356},[2204,2205,2258],[2183,7358,50],{"className":7359},[2204,2205,2258],[2183,7361,3085],{"className":7362,"style":3084},[2204,2205,2258],[2183,7364,2337],{"className":7365},[2336],[2183,7367,7369],{"className":7368},[2238],[2183,7370,7372],{"className":7371,"style":2707},[2242],[2183,7373],{},[2183,7375,7376,7379],{"style":2530},[2183,7377],{"className":7378,"style":2395},[2250],[2183,7380],{"className":7381,"style":2538},[2537],[2183,7383,7384,7387],{"style":2541},[2183,7385],{"className":7386,"style":2395},[2250],[2183,7388,7390,7393,7396],{"className":7389},[2204],[2183,7391,2846],{"className":7392,"style":3197},[2797,2844,3196],[2183,7394],{"className":7395,"style":2793},[2350],[2183,7397,7399,7402],{"className":7398},[2204],[2183,7400,2438],{"className":7401},[2204,2205],[2183,7403,7405],{"className":7404},[2230],[2183,7406,7408,7437],{"className":7407},[2234,2302],[2183,7409,7411,7434],{"className":7410},[2238],[2183,7412,7414],{"className":7413,"style":2422},[2242],[2183,7415,7416,7419],{"style":2425},[2183,7417],{"className":7418,"style":2251},[2250],[2183,7420,7422],{"className":7421},[2255,2256,2257,2258],[2183,7423,7425,7428,7431],{"className":7424},[2204,2258],[2183,7426,2295],{"className":7427,"style":2294},[2204,2205,2258],[2183,7429,3080],{"className":7430},[2204,2205,2258],[2183,7432,3085],{"className":7433,"style":3084},[2204,2205,2258],[2183,7435,2337],{"className":7436},[2336],[2183,7438,7440],{"className":7439},[2238],[2183,7441,7443],{"className":7442,"style":2344},[2242],[2183,7444],{},[2183,7446,2337],{"className":7447},[2336],[2183,7449,7451],{"className":7450},[2238],[2183,7452,7454],{"className":7453,"style":3342},[2242],[2183,7455],{},[2183,7457],{"className":7458},[2527,2374],[19,7460,3845],{},[277,7462,7463,7527],{},[280,7464,7465,7526],{},[2183,7466,7468],{"className":7467},[2186],[2183,7469,7471],{"className":7470,"ariaHidden":2191},[2190],[2183,7472,7474,7477],{"className":7473},[2195],[2183,7475],{"className":7476,"style":2287},[2199],[2183,7478,7480,7483],{"className":7479},[2204],[2183,7481,2438],{"className":7482},[2204,2205],[2183,7484,7486],{"className":7485},[2230],[2183,7487,7489,7518],{"className":7488},[2234,2302],[2183,7490,7492,7515],{"className":7491},[2238],[2183,7493,7495],{"className":7494,"style":2422},[2242],[2183,7496,7497,7500],{"style":2425},[2183,7498],{"className":7499,"style":2251},[2250],[2183,7501,7503],{"className":7502},[2255,2256,2257,2258],[2183,7504,7506,7509,7512],{"className":7505},[2204,2258],[2183,7507,2295],{"className":7508,"style":2294},[2204,2205,2258],[2183,7510,3080],{"className":7511},[2204,2205,2258],[2183,7513,3085],{"className":7514,"style":3084},[2204,2205,2258],[2183,7516,2337],{"className":7517},[2336],[2183,7519,7521],{"className":7520},[2238],[2183,7522,7524],{"className":7523,"style":2344},[2242],[2183,7525],{}," = Nombre de déploiements précédant au moins un incident",[280,7528,7529,7597],{},[2183,7530,7532],{"className":7531},[2186],[2183,7533,7535],{"className":7534,"ariaHidden":2191},[2190],[2183,7536,7538,7542],{"className":7537},[2195],[2183,7539],{"className":7540,"style":7541},[2199],"height:0.8444em;vertical-align:-0.15em;",[2183,7543,7545,7548],{"className":7544},[2204],[2183,7546,2438],{"className":7547},[2204,2205],[2183,7549,7551],{"className":7550},[2230],[2183,7552,7554,7589],{"className":7553},[2234,2302],[2183,7555,7557,7586],{"className":7556},[2238],[2183,7558,7560],{"className":7559,"style":2422},[2242],[2183,7561,7562,7565],{"style":2425},[2183,7563],{"className":7564,"style":2251},[2250],[2183,7566,7568],{"className":7567},[2255,2256,2257,2258],[2183,7569,7571,7574,7577,7580,7583],{"className":7570},[2204,2258],[2183,7572,2409],{"className":7573},[2204,2205,2258],[2183,7575,2211],{"className":7576},[2204,2205,2258],[2183,7578,2409],{"className":7579},[2204,2205,2258],[2183,7581,50],{"className":7582},[2204,2205,2258],[2183,7584,3085],{"className":7585,"style":3084},[2204,2205,2258],[2183,7587,2337],{"className":7588},[2336],[2183,7590,7592],{"className":7591},[2238],[2183,7593,7595],{"className":7594,"style":2707},[2242],[2183,7596],{}," = Nombre total de déploiements du produit",[19,7599,7600],{},[414,7601,4696],{},[2183,7603,7605],{"className":7604},[2274],[2183,7606,7608],{"className":7607},[2186],[2183,7609,7611,7702],{"className":7610,"ariaHidden":2191},[2190],[2183,7612,7614,7617,7620,7623,7626,7629,7632,7635,7638,7641,7644,7693,7696,7699],{"className":7613},[2195],[2183,7615],{"className":7616,"style":6566},[2199],[2183,7618,3060],{"className":7619,"style":3059},[2204,2205],[2183,7621,3064],{"className":7622},[2204,2205],[2183,7624,3068],{"className":7625,"style":2692},[2204,2205],[2183,7627,2442],{"className":7628},[2204,2205],[2183,7630,3076],{"className":7631,"style":3075},[2204,2205],[2183,7633,3080],{"className":7634},[2204,2205],[2183,7636,3085],{"className":7637,"style":3084},[2204,2205],[2183,7639,2139],{"className":7640},[2204,2205],[2183,7642,2219],{"className":7643,"style":2218},[2204,2205],[2183,7645,7647,7650],{"className":7646},[2204],[2183,7648,2442],{"className":7649},[2204,2205],[2183,7651,7653],{"className":7652},[2230],[2183,7654,7656,7685],{"className":7655},[2234,2302],[2183,7657,7659,7682],{"className":7658},[2238],[2183,7660,7662],{"className":7661,"style":2422},[2242],[2183,7663,7664,7667],{"style":2425},[2183,7665],{"className":7666,"style":2251},[2250],[2183,7668,7670],{"className":7669},[2255,2256,2257,2258],[2183,7671,7673,7676,7679],{"className":7672},[2204,2258],[2183,7674,2438],{"className":7675},[2204,2205,2258],[2183,7677,2211],{"className":7678},[2204,2205,2258],[2183,7680,6605],{"className":7681},[2204,2205,2258],[2183,7683,2337],{"className":7684},[2336],[2183,7686,7688],{"className":7687},[2238],[2183,7689,7691],{"className":7690,"style":2707},[2242],[2183,7692],{},[2183,7694],{"className":7695,"style":2351},[2350],[2183,7697,2356],{"className":7698},[2355],[2183,7700],{"className":7701,"style":2351},[2350],[2183,7703,7705,7708,7807,7810,7813,7816],{"className":7704},[2195],[2183,7706],{"className":7707,"style":2366},[2199],[2183,7709,7711,7714,7804],{"className":7710},[2204],[2183,7712],{"className":7713},[2373,2374],[2183,7715,7717],{"className":7716},[2378],[2183,7718,7720,7796],{"className":7719},[2234,2302],[2183,7721,7723,7793],{"className":7722},[2238],[2183,7724,7726,7774,7782],{"className":7725,"style":2388},[2242],[2183,7727,7728,7731],{"style":2391},[2183,7729],{"className":7730,"style":2395},[2250],[2183,7732,7734],{"className":7733},[2204],[2183,7735,7737,7740],{"className":7736},[2204],[2183,7738,2755],{"className":7739},[2204,2205],[2183,7741,7743],{"className":7742},[2230],[2183,7744,7746,7766],{"className":7745},[2234,2302],[2183,7747,7749,7763],{"className":7748},[2238],[2183,7750,7752],{"className":7751,"style":2309},[2242],[2183,7753,7754,7757],{"style":2425},[2183,7755],{"className":7756,"style":2251},[2250],[2183,7758,7760],{"className":7759},[2255,2256,2257,2258],[2183,7761,19],{"className":7762},[2204,2205,2258],[2183,7764,2337],{"className":7765},[2336],[2183,7767,7769],{"className":7768},[2238],[2183,7770,7772],{"className":7771,"style":2344},[2242],[2183,7773],{},[2183,7775,7776,7779],{"style":2530},[2183,7777],{"className":7778,"style":2395},[2250],[2183,7780],{"className":7781,"style":2538},[2537],[2183,7783,7784,7787],{"style":2541},[2183,7785],{"className":7786,"style":2395},[2250],[2183,7788,7790],{"className":7789},[2204],[2183,7791,2269],{"className":7792},[2204],[2183,7794,2337],{"className":7795},[2336],[2183,7797,7799],{"className":7798},[2238],[2183,7800,7802],{"className":7801,"style":2560},[2242],[2183,7803],{},[2183,7805],{"className":7806},[2527,2374],[2183,7808],{"className":7809,"style":2793},[2350],[2183,7811,2846],{"className":7812,"style":3197},[2797,2844,2845],[2183,7814],{"className":7815,"style":2793},[2350],[2183,7817,7819,7822,7825,7828,7831,7834,7837,7840,7843,7846,7849,7907],{"className":7818},[3525],[2183,7820,2402],{"className":7821,"style":3530},[2373,3529],[2183,7823,3060],{"className":7824,"style":3059},[2204,2205],[2183,7826,3064],{"className":7827},[2204,2205],[2183,7829,3068],{"className":7830,"style":2692},[2204,2205],[2183,7832,2442],{"className":7833},[2204,2205],[2183,7835,3076],{"className":7836,"style":3075},[2204,2205],[2183,7838,3080],{"className":7839},[2204,2205],[2183,7841,3085],{"className":7842,"style":3084},[2204,2205],[2183,7844,2139],{"className":7845},[2204,2205],[2183,7847,2219],{"className":7848,"style":2218},[2204,2205],[2183,7850,7852,7855],{"className":7851},[2204],[2183,7853,2442],{"className":7854},[2204,2205],[2183,7856,7858],{"className":7857},[2230],[2183,7859,7861,7899],{"className":7860},[2234,2302],[2183,7862,7864,7896],{"className":7863},[2238],[2183,7865,7867],{"className":7866,"style":2422},[2242],[2183,7868,7869,7872],{"style":2425},[2183,7870],{"className":7871,"style":2251},[2250],[2183,7873,7875],{"className":7874},[2255,2256,2257,2258],[2183,7876,7878,7881,7884,7887,7890,7893],{"className":7877},[2204,2258],[2183,7879,19],{"className":7880},[2204,2205,2258],[2183,7882,3124],{"className":7883},[2204,2205,2258],[2183,7885,2438],{"className":7886},[2204,2205,2258],[2183,7888,2139],{"className":7889},[2204,2205,2258],[2183,7891,3134],{"className":7892},[2204,2205,2258],[2183,7894,2409],{"className":7895},[2204,2205,2258],[2183,7897,2337],{"className":7898},[2336],[2183,7900,7902],{"className":7901},[2238],[2183,7903,7905],{"className":7904,"style":2344},[2242],[2183,7906],{},[2183,7908,746],{"className":7909,"style":3530},[2527,3529],[19,7911,3845],{},[277,7913,7914],{},[280,7915,7916,5270],{},[2183,7917,7919],{"className":7918},[2186],[2183,7920,7922],{"className":7921,"ariaHidden":2191},[2190],[2183,7923,7925,7928],{"className":7924},[2195],[2183,7926],{"className":7927,"style":5226},[2199],[2183,7929,7931,7934],{"className":7930},[2204],[2183,7932,2755],{"className":7933},[2204,2205],[2183,7935,7937],{"className":7936},[2230],[2183,7938,7940,7960],{"className":7939},[2234,2302],[2183,7941,7943,7957],{"className":7942},[2238],[2183,7944,7946],{"className":7945,"style":2309},[2242],[2183,7947,7948,7951],{"style":2425},[2183,7949],{"className":7950,"style":2251},[2250],[2183,7952,7954],{"className":7953},[2255,2256,2257,2258],[2183,7955,19],{"className":7956},[2204,2205,2258],[2183,7958,2337],{"className":7959},[2336],[2183,7961,7963],{"className":7962},[2238],[2183,7964,7966],{"className":7965,"style":2344},[2242],[2183,7967],{},[19,7969,7970],{},[414,7971,5275],{},[2183,7973,7975],{"className":7974},[2274],[2183,7976,7978],{"className":7977},[2186],[2183,7979,7981,8081],{"className":7980,"ariaHidden":2191},[2190],[2183,7982,7984,7987,7990,7993,7996,7999,8002,8005,8008,8011,8014,8072,8075,8078],{"className":7983},[2195],[2183,7985],{"className":7986,"style":2287},[2199],[2183,7988,3060],{"className":7989,"style":3059},[2204,2205],[2183,7991,3064],{"className":7992},[2204,2205],[2183,7994,3068],{"className":7995,"style":2692},[2204,2205],[2183,7997,2442],{"className":7998},[2204,2205],[2183,8000,3076],{"className":8001,"style":3075},[2204,2205],[2183,8003,3080],{"className":8004},[2204,2205],[2183,8006,3085],{"className":8007,"style":3084},[2204,2205],[2183,8009,2139],{"className":8010},[2204,2205],[2183,8012,2219],{"className":8013,"style":2218},[2204,2205],[2183,8015,8017,8020],{"className":8016},[2204],[2183,8018,2442],{"className":8019},[2204,2205],[2183,8021,8023],{"className":8022},[2230],[2183,8024,8026,8064],{"className":8025},[2234,2302],[2183,8027,8029,8061],{"className":8028},[2238],[2183,8030,8032],{"className":8031,"style":2422},[2242],[2183,8033,8034,8037],{"style":2425},[2183,8035],{"className":8036,"style":2251},[2250],[2183,8038,8040],{"className":8039},[2255,2256,2257,2258],[2183,8041,8043,8046,8049,8052,8055,8058],{"className":8042},[2204,2258],[2183,8044,6898],{"className":8045,"style":3084},[2204,2205,2258],[2183,8047,50],{"className":8048},[2204,2205,2258],[2183,8050,2409],{"className":8051},[2204,2205,2258],[2183,8053,2295],{"className":8054,"style":2294},[2204,2205,2258],[2183,8056,6911],{"className":8057,"style":2218},[2204,2205,2258],[2183,8059,2329],{"className":8060},[2204,2205,2258],[2183,8062,2337],{"className":8063},[2336],[2183,8065,8067],{"className":8066},[2238],[2183,8068,8070],{"className":8069,"style":2344},[2242],[2183,8071],{},[2183,8073],{"className":8074,"style":2351},[2350],[2183,8076,2356],{"className":8077},[2355],[2183,8079],{"className":8080,"style":2351},[2350],[2183,8082,8084,8087,8186,8189,8192,8195],{"className":8083},[2195],[2183,8085],{"className":8086,"style":4233},[2199],[2183,8088,8090,8093,8183],{"className":8089},[2204],[2183,8091],{"className":8092},[2373,2374],[2183,8094,8096],{"className":8095},[2378],[2183,8097,8099,8175],{"className":8098},[2234,2302],[2183,8100,8102,8172],{"className":8101},[2238],[2183,8103,8105,8153,8161],{"className":8104,"style":2388},[2242],[2183,8106,8107,8110],{"style":2391},[2183,8108],{"className":8109,"style":2395},[2250],[2183,8111,8113],{"className":8112},[2204],[2183,8114,8116,8119],{"className":8115},[2204],[2183,8117,2755],{"className":8118},[2204,2205],[2183,8120,8122],{"className":8121},[2230],[2183,8123,8125,8145],{"className":8124},[2234,2302],[2183,8126,8128,8142],{"className":8127},[2238],[2183,8129,8131],{"className":8130,"style":2422},[2242],[2183,8132,8133,8136],{"style":2425},[2183,8134],{"className":8135,"style":2251},[2250],[2183,8137,8139],{"className":8138},[2255,2256,2257,2258],[2183,8140,2438],{"className":8141},[2204,2205,2258],[2183,8143,2337],{"className":8144},[2336],[2183,8146,8148],{"className":8147},[2238],[2183,8149,8151],{"className":8150,"style":2707},[2242],[2183,8152],{},[2183,8154,8155,8158],{"style":2530},[2183,8156],{"className":8157,"style":2395},[2250],[2183,8159],{"className":8160,"style":2538},[2537],[2183,8162,8163,8166],{"style":2541},[2183,8164],{"className":8165,"style":2395},[2250],[2183,8167,8169],{"className":8168},[2204],[2183,8170,2269],{"className":8171},[2204],[2183,8173,2337],{"className":8174},[2336],[2183,8176,8178],{"className":8177},[2238],[2183,8179,8181],{"className":8180,"style":4328},[2242],[2183,8182],{},[2183,8184],{"className":8185},[2527,2374],[2183,8187],{"className":8188,"style":2793},[2350],[2183,8190,2846],{"className":8191,"style":3197},[2797,2844,2845],[2183,8193],{"className":8194,"style":2793},[2350],[2183,8196,8198,8201,8204,8207,8210,8213,8216,8219,8222,8225,8228,8277],{"className":8197},[3525],[2183,8199,2402],{"className":8200,"style":3530},[2373,3529],[2183,8202,3060],{"className":8203,"style":3059},[2204,2205],[2183,8205,3064],{"className":8206},[2204,2205],[2183,8208,3068],{"className":8209,"style":2692},[2204,2205],[2183,8211,2442],{"className":8212},[2204,2205],[2183,8214,3076],{"className":8215,"style":3075},[2204,2205],[2183,8217,3080],{"className":8218},[2204,2205],[2183,8220,3085],{"className":8221,"style":3084},[2204,2205],[2183,8223,2139],{"className":8224},[2204,2205],[2183,8226,2219],{"className":8227,"style":2218},[2204,2205],[2183,8229,8231,8234],{"className":8230},[2204],[2183,8232,2442],{"className":8233},[2204,2205],[2183,8235,8237],{"className":8236},[2230],[2183,8238,8240,8269],{"className":8239},[2234,2302],[2183,8241,8243,8266],{"className":8242},[2238],[2183,8244,8246],{"className":8245,"style":2422},[2242],[2183,8247,8248,8251],{"style":2425},[2183,8249],{"className":8250,"style":2251},[2250],[2183,8252,8254],{"className":8253},[2255,2256,2257,2258],[2183,8255,8257,8260,8263],{"className":8256},[2204,2258],[2183,8258,2438],{"className":8259},[2204,2205,2258],[2183,8261,2211],{"className":8262},[2204,2205,2258],[2183,8264,6605],{"className":8265},[2204,2205,2258],[2183,8267,2337],{"className":8268},[2336],[2183,8270,8272],{"className":8271},[2238],[2183,8273,8275],{"className":8274,"style":2707},[2242],[2183,8276],{},[2183,8278,746],{"className":8279,"style":3530},[2527,3529],[19,8281,3845],{},[277,8283,8284],{},[280,8285,8286,5849],{},[2183,8287,8289],{"className":8288},[2186],[2183,8290,8292],{"className":8291,"ariaHidden":2191},[2190],[2183,8293,8295,8298],{"className":8294},[2195],[2183,8296],{"className":8297,"style":4650},[2199],[2183,8299,8301,8304],{"className":8300},[2204],[2183,8302,2755],{"className":8303},[2204,2205],[2183,8305,8307],{"className":8306},[2230],[2183,8308,8310,8330],{"className":8309},[2234,2302],[2183,8311,8313,8327],{"className":8312},[2238],[2183,8314,8316],{"className":8315,"style":2422},[2242],[2183,8317,8318,8321],{"style":2425},[2183,8319],{"className":8320,"style":2251},[2250],[2183,8322,8324],{"className":8323},[2255,2256,2257,2258],[2183,8325,2438],{"className":8326},[2204,2205,2258],[2183,8328,2337],{"className":8329},[2336],[2183,8331,8333],{"className":8332},[2238],[2183,8334,8336],{"className":8335,"style":2707},[2242],[2183,8337],{},[87,8339,8341],{"id":8340},"mean-time-to-recover","Mean Time To Recover",[19,8343,8344],{},[414,8345,3392],{},[277,8347,8348],{},[280,8349,8350],{},"Non calculé à ce niveau car les incidents sont tracés au niveau produit",[19,8352,8353],{},[414,8354,4110],{},[2183,8356,8358],{"className":8357},[2274],[2183,8359,8361],{"className":8360},[2186],[2183,8362,8364,8444],{"className":8363,"ariaHidden":2191},[2190],[2183,8365,8367,8370,8374,8435,8438,8441],{"className":8366},[2195],[2183,8368],{"className":8369,"style":3408},[2199],[2183,8371,8373],{"className":8372,"style":3075},[2204,2205],"MTT",[2183,8375,8377,8382],{"className":8376},[2204],[2183,8378,8381],{"className":8379,"style":8380},[2204,2205],"margin-right:0.00773em;","R",[2183,8383,8385],{"className":8384},[2230],[2183,8386,8388,8427],{"className":8387},[2234,2302],[2183,8389,8391,8424],{"className":8390},[2238],[2183,8392,8394],{"className":8393,"style":2422},[2242],[2183,8395,8397,8400],{"style":8396},"top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;",[2183,8398],{"className":8399,"style":2251},[2250],[2183,8401,8403],{"className":8402},[2255,2256,2257,2258],[2183,8404,8406,8409,8412,8415,8418,8421],{"className":8405},[2204,2258],[2183,8407,19],{"className":8408},[2204,2205,2258],[2183,8410,3124],{"className":8411},[2204,2205,2258],[2183,8413,2438],{"className":8414},[2204,2205,2258],[2183,8416,2139],{"className":8417},[2204,2205,2258],[2183,8419,3134],{"className":8420},[2204,2205,2258],[2183,8422,2409],{"className":8423},[2204,2205,2258],[2183,8425,2337],{"className":8426},[2336],[2183,8428,8430],{"className":8429},[2238],[2183,8431,8433],{"className":8432,"style":2344},[2242],[2183,8434],{},[2183,8436],{"className":8437,"style":2351},[2350],[2183,8439,2356],{"className":8440},[2355],[2183,8442],{"className":8443,"style":2351},[2350],[2183,8445,8447,8450,8512,8515,8518,8521],{"className":8446},[2195],[2183,8448],{"className":8449,"style":6330},[2199],[2183,8451,8453,8456,8509],{"className":8452},[2204],[2183,8454],{"className":8455},[2373,2374],[2183,8457,8459],{"className":8458},[2378],[2183,8460,8462,8501],{"className":8461},[2234,2302],[2183,8463,8465,8498],{"className":8464},[2238],[2183,8466,8468,8479,8487],{"className":8467,"style":2388},[2242],[2183,8469,8470,8473],{"style":2391},[2183,8471],{"className":8472,"style":2395},[2250],[2183,8474,8476],{"className":8475},[2204],[2183,8477,2755],{"className":8478},[2204,2205],[2183,8480,8481,8484],{"style":2530},[2183,8482],{"className":8483,"style":2395},[2250],[2183,8485],{"className":8486,"style":2538},[2537],[2183,8488,8489,8492],{"style":2541},[2183,8490],{"className":8491,"style":2395},[2250],[2183,8493,8495],{"className":8494},[2204],[2183,8496,2269],{"className":8497},[2204],[2183,8499,2337],{"className":8500},[2336],[2183,8502,8504],{"className":8503},[2238],[2183,8505,8507],{"className":8506,"style":2784},[2242],[2183,8508],{},[2183,8510],{"className":8511},[2527,2374],[2183,8513],{"className":8514,"style":2793},[2350],[2183,8516,2846],{"className":8517,"style":3197},[2797,2844,2845],[2183,8519],{"className":8520,"style":2793},[2350],[2183,8522,8524,8527,8576,8579,8582,8585,8640],{"className":8523},[3525],[2183,8525,2402],{"className":8526,"style":3530},[2373,3529],[2183,8528,8530,8533],{"className":8529},[2204],[2183,8531,2409],{"className":8532},[2204,2205],[2183,8534,8536],{"className":8535},[2230],[2183,8537,8539,8568],{"className":8538},[2234,2302],[2183,8540,8542,8565],{"className":8541},[2238],[2183,8543,8545],{"className":8544,"style":2422},[2242],[2183,8546,8547,8550],{"style":2425},[2183,8548],{"className":8549,"style":2251},[2250],[2183,8551,8553],{"className":8552},[2255,2256,2257,2258],[2183,8554,8556,8559,8562],{"className":8555},[2204,2258],[2183,8557,2442],{"className":8558},[2204,2205,2258],[2183,8560,2755],{"className":8561},[2204,2205,2258],[2183,8563,2438],{"className":8564},[2204,2205,2258],[2183,8566,2337],{"className":8567},[2336],[2183,8569,8571],{"className":8570},[2238],[2183,8572,8574],{"className":8573,"style":2707},[2242],[2183,8575],{},[2183,8577],{"className":8578,"style":2464},[2350],[2183,8580,2265],{"className":8581},[2468],[2183,8583],{"className":8584,"style":2464},[2350],[2183,8586,8588,8591],{"className":8587},[2204],[2183,8589,2409],{"className":8590},[2204,2205],[2183,8592,8594],{"className":8593},[2230],[2183,8595,8597,8632],{"className":8596},[2234,2302],[2183,8598,8600,8629],{"className":8599},[2238],[2183,8601,8603],{"className":8602,"style":2960},[2242],[2183,8604,8605,8608],{"style":2425},[2183,8606],{"className":8607,"style":2251},[2250],[2183,8609,8611],{"className":8610},[2255,2256,2257,2258],[2183,8612,8614,8617,8620,8623,8626],{"className":8613},[2204,2258],[2183,8615,2226],{"className":8616},[2204,2205,2258],[2183,8618,2409],{"className":8619},[2204,2205,2258],[2183,8621,50],{"className":8622},[2204,2205,2258],[2183,8624,2219],{"className":8625,"style":2218},[2204,2205,2258],[2183,8627,2409],{"className":8628},[2204,2205,2258],[2183,8630,2337],{"className":8631},[2336],[2183,8633,8635],{"className":8634},[2238],[2183,8636,8638],{"className":8637,"style":2707},[2242],[2183,8639],{},[2183,8641,746],{"className":8642,"style":3530},[2527,3529],[19,8644,3845],{},[277,8646,8647,8665,8730],{},[280,8648,8649,8664],{},[2183,8650,8652],{"className":8651},[2186],[2183,8653,8655],{"className":8654,"ariaHidden":2191},[2190],[2183,8656,8658,8661],{"className":8657},[2195],[2183,8659],{"className":8660,"style":6478},[2199],[2183,8662,2755],{"className":8663},[2204,2205]," = Nombre d'incidents",[280,8666,8667,8729],{},[2183,8668,8670],{"className":8669},[2186],[2183,8671,8673],{"className":8672,"ariaHidden":2191},[2190],[2183,8674,8676,8680],{"className":8675},[2195],[2183,8677],{"className":8678,"style":8679},[2199],"height:0.7651em;vertical-align:-0.15em;",[2183,8681,8683,8686],{"className":8682},[2204],[2183,8684,2409],{"className":8685},[2204,2205],[2183,8687,8689],{"className":8688},[2230],[2183,8690,8692,8721],{"className":8691},[2234,2302],[2183,8693,8695,8718],{"className":8694},[2238],[2183,8696,8698],{"className":8697,"style":2422},[2242],[2183,8699,8700,8703],{"style":2425},[2183,8701],{"className":8702,"style":2251},[2250],[2183,8704,8706],{"className":8705},[2255,2256,2257,2258],[2183,8707,8709,8712,8715],{"className":8708},[2204,2258],[2183,8710,2442],{"className":8711},[2204,2205,2258],[2183,8713,2755],{"className":8714},[2204,2205,2258],[2183,8716,2438],{"className":8717},[2204,2205,2258],[2183,8719,2337],{"className":8720},[2336],[2183,8722,8724],{"className":8723},[2238],[2183,8725,8727],{"className":8726,"style":2707},[2242],[2183,8728],{}," = Date de résolution de l'incident",[280,8731,8732,8799],{},[2183,8733,8735],{"className":8734},[2186],[2183,8736,8738],{"className":8737,"ariaHidden":2191},[2190],[2183,8739,8741,8744],{"className":8740},[2195],[2183,8742],{"className":8743,"style":8679},[2199],[2183,8745,8747,8750],{"className":8746},[2204],[2183,8748,2409],{"className":8749},[2204,2205],[2183,8751,8753],{"className":8752},[2230],[2183,8754,8756,8791],{"className":8755},[2234,2302],[2183,8757,8759,8788],{"className":8758},[2238],[2183,8760,8762],{"className":8761,"style":2960},[2242],[2183,8763,8764,8767],{"style":2425},[2183,8765],{"className":8766,"style":2251},[2250],[2183,8768,8770],{"className":8769},[2255,2256,2257,2258],[2183,8771,8773,8776,8779,8782,8785],{"className":8772},[2204,2258],[2183,8774,2226],{"className":8775},[2204,2205,2258],[2183,8777,2409],{"className":8778},[2204,2205,2258],[2183,8780,50],{"className":8781},[2204,2205,2258],[2183,8783,2219],{"className":8784,"style":2218},[2204,2205,2258],[2183,8786,2409],{"className":8787},[2204,2205,2258],[2183,8789,2337],{"className":8790},[2336],[2183,8792,8794],{"className":8793},[2238],[2183,8795,8797],{"className":8796,"style":2707},[2242],[2183,8798],{}," = Date de début de l'incident",[19,8801,8802],{},[414,8803,4696],{},[2183,8805,8807],{"className":8806},[2274],[2183,8808,8810],{"className":8809},[2186],[2183,8811,8813,8881],{"className":8812,"ariaHidden":2191},[2190],[2183,8814,8816,8820,8823,8872,8875,8878],{"className":8815},[2195],[2183,8817],{"className":8818,"style":8819},[2199],"height:0.8333em;vertical-align:-0.15em;",[2183,8821,8373],{"className":8822,"style":3075},[2204,2205],[2183,8824,8826,8829],{"className":8825},[2204],[2183,8827,8381],{"className":8828,"style":8380},[2204,2205],[2183,8830,8832],{"className":8831},[2230],[2183,8833,8835,8864],{"className":8834},[2234,2302],[2183,8836,8838,8861],{"className":8837},[2238],[2183,8839,8841],{"className":8840,"style":2422},[2242],[2183,8842,8843,8846],{"style":8396},[2183,8844],{"className":8845,"style":2251},[2250],[2183,8847,8849],{"className":8848},[2255,2256,2257,2258],[2183,8850,8852,8855,8858],{"className":8851},[2204,2258],[2183,8853,2438],{"className":8854},[2204,2205,2258],[2183,8856,2211],{"className":8857},[2204,2205,2258],[2183,8859,6605],{"className":8860},[2204,2205,2258],[2183,8862,2337],{"className":8863},[2336],[2183,8865,8867],{"className":8866},[2238],[2183,8868,8870],{"className":8869,"style":2707},[2242],[2183,8871],{},[2183,8873],{"className":8874,"style":2351},[2350],[2183,8876,2356],{"className":8877},[2355],[2183,8879],{"className":8880,"style":2351},[2350],[2183,8882,8884,8887,8949,8952,8955,8958],{"className":8883},[2195],[2183,8885],{"className":8886,"style":6330},[2199],[2183,8888,8890,8893,8946],{"className":8889},[2204],[2183,8891],{"className":8892},[2373,2374],[2183,8894,8896],{"className":8895},[2378],[2183,8897,8899,8938],{"className":8898},[2234,2302],[2183,8900,8902,8935],{"className":8901},[2238],[2183,8903,8905,8916,8924],{"className":8904,"style":2388},[2242],[2183,8906,8907,8910],{"style":2391},[2183,8908],{"className":8909,"style":2395},[2250],[2183,8911,8913],{"className":8912},[2204],[2183,8914,2329],{"className":8915},[2204,2205],[2183,8917,8918,8921],{"style":2530},[2183,8919],{"className":8920,"style":2395},[2250],[2183,8922],{"className":8923,"style":2538},[2537],[2183,8925,8926,8929],{"style":2541},[2183,8927],{"className":8928,"style":2395},[2250],[2183,8930,8932],{"className":8931},[2204],[2183,8933,2269],{"className":8934},[2204],[2183,8936,2337],{"className":8937},[2336],[2183,8939,8941],{"className":8940},[2238],[2183,8942,8944],{"className":8943,"style":2784},[2242],[2183,8945],{},[2183,8947],{"className":8948},[2527,2374],[2183,8950],{"className":8951,"style":2793},[2350],[2183,8953,2846],{"className":8954,"style":3197},[2797,2844,2845],[2183,8956],{"className":8957,"style":2793},[2350],[2183,8959,8961,8964,8967,9025],{"className":8960},[3525],[2183,8962,2402],{"className":8963,"style":3530},[2373,3529],[2183,8965,8373],{"className":8966,"style":3075},[2204,2205],[2183,8968,8970,8973],{"className":8969},[2204],[2183,8971,8381],{"className":8972,"style":8380},[2204,2205],[2183,8974,8976],{"className":8975},[2230],[2183,8977,8979,9017],{"className":8978},[2234,2302],[2183,8980,8982,9014],{"className":8981},[2238],[2183,8983,8985],{"className":8984,"style":2422},[2242],[2183,8986,8987,8990],{"style":8396},[2183,8988],{"className":8989,"style":2251},[2250],[2183,8991,8993],{"className":8992},[2255,2256,2257,2258],[2183,8994,8996,8999,9002,9005,9008,9011],{"className":8995},[2204,2258],[2183,8997,19],{"className":8998},[2204,2205,2258],[2183,9000,3124],{"className":9001},[2204,2205,2258],[2183,9003,2438],{"className":9004},[2204,2205,2258],[2183,9006,2139],{"className":9007},[2204,2205,2258],[2183,9009,3134],{"className":9010},[2204,2205,2258],[2183,9012,2409],{"className":9013},[2204,2205,2258],[2183,9015,2337],{"className":9016},[2336],[2183,9018,9020],{"className":9019},[2238],[2183,9021,9023],{"className":9022,"style":2344},[2242],[2183,9024],{},[2183,9026,746],{"className":9027,"style":3530},[2527,3529],[19,9029,3845],{},[277,9031,9032],{},[280,9033,9034,5270],{},[2183,9035,9037],{"className":9036},[2186],[2183,9038,9040],{"className":9039,"ariaHidden":2191},[2190],[2183,9041,9043,9046],{"className":9042},[2195],[2183,9044],{"className":9045,"style":6478},[2199],[2183,9047,2329],{"className":9048},[2204,2205],[19,9050,9051],{},[414,9052,5275],{},[2183,9054,9056],{"className":9055},[2274],[2183,9057,9059],{"className":9058},[2186],[2183,9060,9062,9138],{"className":9061,"ariaHidden":2191},[2190],[2183,9063,9065,9068,9071,9129,9132,9135],{"className":9064},[2195],[2183,9066],{"className":9067,"style":3408},[2199],[2183,9069,8373],{"className":9070,"style":3075},[2204,2205],[2183,9072,9074,9077],{"className":9073},[2204],[2183,9075,8381],{"className":9076,"style":8380},[2204,2205],[2183,9078,9080],{"className":9079},[2230],[2183,9081,9083,9121],{"className":9082},[2234,2302],[2183,9084,9086,9118],{"className":9085},[2238],[2183,9087,9089],{"className":9088,"style":2422},[2242],[2183,9090,9091,9094],{"style":8396},[2183,9092],{"className":9093,"style":2251},[2250],[2183,9095,9097],{"className":9096},[2255,2256,2257,2258],[2183,9098,9100,9103,9106,9109,9112,9115],{"className":9099},[2204,2258],[2183,9101,6898],{"className":9102,"style":3084},[2204,2205,2258],[2183,9104,50],{"className":9105},[2204,2205,2258],[2183,9107,2409],{"className":9108},[2204,2205,2258],[2183,9110,2295],{"className":9111,"style":2294},[2204,2205,2258],[2183,9113,6911],{"className":9114,"style":2218},[2204,2205,2258],[2183,9116,2329],{"className":9117},[2204,2205,2258],[2183,9119,2337],{"className":9120},[2336],[2183,9122,9124],{"className":9123},[2238],[2183,9125,9127],{"className":9126,"style":2344},[2242],[2183,9128],{},[2183,9130],{"className":9131,"style":2351},[2350],[2183,9133,2356],{"className":9134},[2355],[2183,9136],{"className":9137,"style":2351},[2350],[2183,9139,9141,9144,9206,9209,9212,9215],{"className":9140},[2195],[2183,9142],{"className":9143,"style":6330},[2199],[2183,9145,9147,9150,9203],{"className":9146},[2204],[2183,9148],{"className":9149},[2373,2374],[2183,9151,9153],{"className":9152},[2378],[2183,9154,9156,9195],{"className":9155},[2234,2302],[2183,9157,9159,9192],{"className":9158},[2238],[2183,9160,9162,9173,9181],{"className":9161,"style":2388},[2242],[2183,9163,9164,9167],{"style":2391},[2183,9165],{"className":9166,"style":2395},[2250],[2183,9168,9170],{"className":9169},[2204],[2183,9171,2211],{"className":9172},[2204,2205],[2183,9174,9175,9178],{"style":2530},[2183,9176],{"className":9177,"style":2395},[2250],[2183,9179],{"className":9180,"style":2538},[2537],[2183,9182,9183,9186],{"style":2541},[2183,9184],{"className":9185,"style":2395},[2250],[2183,9187,9189],{"className":9188},[2204],[2183,9190,2269],{"className":9191},[2204],[2183,9193,2337],{"className":9194},[2336],[2183,9196,9198],{"className":9197},[2238],[2183,9199,9201],{"className":9200,"style":2784},[2242],[2183,9202],{},[2183,9204],{"className":9205},[2527,2374],[2183,9207],{"className":9208,"style":2793},[2350],[2183,9210,2846],{"className":9211,"style":3197},[2797,2844,2845],[2183,9213],{"className":9214,"style":2793},[2350],[2183,9216,9218,9221,9224,9273],{"className":9217},[3525],[2183,9219,2402],{"className":9220,"style":3530},[2373,3529],[2183,9222,8373],{"className":9223,"style":3075},[2204,2205],[2183,9225,9227,9230],{"className":9226},[2204],[2183,9228,8381],{"className":9229,"style":8380},[2204,2205],[2183,9231,9233],{"className":9232},[2230],[2183,9234,9236,9265],{"className":9235},[2234,2302],[2183,9237,9239,9262],{"className":9238},[2238],[2183,9240,9242],{"className":9241,"style":2422},[2242],[2183,9243,9244,9247],{"style":8396},[2183,9245],{"className":9246,"style":2251},[2250],[2183,9248,9250],{"className":9249},[2255,2256,2257,2258],[2183,9251,9253,9256,9259],{"className":9252},[2204,2258],[2183,9254,2438],{"className":9255},[2204,2205,2258],[2183,9257,2211],{"className":9258},[2204,2205,2258],[2183,9260,6605],{"className":9261},[2204,2205,2258],[2183,9263,2337],{"className":9264},[2336],[2183,9266,9268],{"className":9267},[2238],[2183,9269,9271],{"className":9270,"style":2707},[2242],[2183,9272],{},[2183,9274,746],{"className":9275,"style":3530},[2527,3529],[19,9277,3845],{},[277,9279,9280],{},[280,9281,9282,5849],{},[2183,9283,9285],{"className":9284},[2186],[2183,9286,9288],{"className":9287,"ariaHidden":2191},[2190],[2183,9289,9291,9294],{"className":9290},[2195],[2183,9292],{"className":9293,"style":6478},[2199],[2183,9295,2211],{"className":9296},[2204,2205],[87,9298,9300],{"id":9299},"calcul-des-métriques-avec-bigquery","Calcul des métriques avec BigQuery",[19,9302,9303],{},[66,9304],{"alt":9305,"src":9306},"Image de datacenter","\u002Fcontent-assets\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex\u002Fassets\u002Fimg4.webp",[19,9308,9309,9312,9313,9312,9320,9312,9323],{},[1032,9310,9311],{},"Photo by"," ",[50,9314,9317],{"href":9315,"rel":9316},"https:\u002F\u002Funsplash.com\u002F@tvick?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash",[54],[1032,9318,9319],{},"Taylor Vick",[1032,9321,9322],{},"on",[50,9324,9327],{"href":9325,"rel":9326},"https:\u002F\u002Funsplash.com\u002Fphotos\u002Fcable-network-M5tzZtFCOfs?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash",[54],[1032,9328,9329],{},"Unsplash",[19,9331,9332],{},"Toutes nos métriques sont calculées via des requêtes SQL exécutées sur BigQuery. Voici comment nous procédons pour chaque métrique :",[19,9334,9335],{},[414,9336,3387],{},[277,9338,9339,9342],{},[280,9340,9341],{},"Mesure le temps entre une modification de code et son déploiement en production",[280,9343,9344,9345],{},"Formule : ",[2183,9346,9348],{"className":9347},[2186],[2183,9349,9351,9418,9525],{"className":9350,"ariaHidden":2191},[2190],[2183,9352,9354,9357,9360,9409,9412,9415],{"className":9353},[2195],[2183,9355],{"className":9356,"style":3408},[2199],[2183,9358,3412],{"className":9359},[2204],[2183,9361,9363,9366],{"className":9362},[2204],[2183,9364,2409],{"className":9365},[2204,2205],[2183,9367,9369],{"className":9368},[2230],[2183,9370,9372,9401],{"className":9371},[2234,2302],[2183,9373,9375,9398],{"className":9374},[2238],[2183,9376,9378],{"className":9377,"style":2422},[2242],[2183,9379,9380,9383],{"style":2425},[2183,9381],{"className":9382,"style":2251},[2250],[2183,9384,9386],{"className":9385},[2255,2256,2257,2258],[2183,9387,9389,9392,9395],{"className":9388},[2204,2258],[2183,9390,3445],{"className":9391},[2204,2205,2258],[2183,9393,2295],{"className":9394,"style":2294},[2204,2205,2258],[2183,9396,3134],{"className":9397},[2204,2205,2258],[2183,9399,2337],{"className":9400},[2336],[2183,9402,9404],{"className":9403},[2238],[2183,9405,9407],{"className":9406,"style":2344},[2242],[2183,9408],{},[2183,9410],{"className":9411,"style":2351},[2350],[2183,9413,2356],{"className":9414},[2355],[2183,9416],{"className":9417,"style":2351},[2350],[2183,9419,9421,9425,9516,9519,9522],{"className":9420},[2195],[2183,9422],{"className":9423,"style":9424},[2199],"height:0.9682em;vertical-align:-0.3531em;",[2183,9426,9428,9431],{"className":9427},[2204],[2183,9429,2409],{"className":9430},[2204,2205],[2183,9432,9434],{"className":9433},[2230],[2183,9435,9437,9507],{"className":9436},[2234,2302],[2183,9438,9440,9504],{"className":9439},[2238],[2183,9441,9443],{"className":9442,"style":2422},[2242],[2183,9444,9445,9448],{"style":2425},[2183,9446],{"className":9447,"style":2251},[2250],[2183,9449,9451],{"className":9450},[2255,2256,2257,2258],[2183,9452,9454],{"className":9453},[2204,2258],[2183,9455,9457,9460],{"className":9456},[2204,2258],[2183,9458,2438],{"className":9459},[2204,2205,2258],[2183,9461,9463],{"className":9462},[2230],[2183,9464,9466,9495],{"className":9465},[2234,2302],[2183,9467,9469,9492],{"className":9468},[2238],[2183,9470,9472],{"className":9471,"style":4437},[2242],[2183,9473,9474,9477],{"style":4770},[2183,9475],{"className":9476,"style":3474},[2250],[2183,9478,9480],{"className":9479},[2255,3478,3479,2258],[2183,9481,9483,9486,9489],{"className":9482},[2204,2258],[2183,9484,19],{"className":9485},[2204,2205,2258],[2183,9487,3124],{"className":9488},[2204,2205,2258],[2183,9490,2438],{"className":9491},[2204,2205,2258],[2183,9493,2337],{"className":9494},[2336],[2183,9496,9498],{"className":9497},[2238],[2183,9499,9502],{"className":9500,"style":9501},[2242],"height:0.2901em;",[2183,9503],{},[2183,9505,2337],{"className":9506},[2336],[2183,9508,9510],{"className":9509},[2238],[2183,9511,9514],{"className":9512,"style":9513},[2242],"height:0.3531em;",[2183,9515],{},[2183,9517],{"className":9518,"style":2464},[2350],[2183,9520,2265],{"className":9521},[2468],[2183,9523],{"className":9524,"style":2464},[2350],[2183,9526,9528,9531],{"className":9527},[2195],[2183,9529],{"className":9530,"style":8679},[2199],[2183,9532,9534,9537],{"className":9533},[2204],[2183,9535,2409],{"className":9536},[2204,2205],[2183,9538,9540],{"className":9539},[2230],[2183,9541,9543,9566],{"className":9542},[2234,2302],[2183,9544,9546,9563],{"className":9545},[2238],[2183,9547,9549],{"className":9548,"style":2309},[2242],[2183,9550,9551,9554],{"style":2425},[2183,9552],{"className":9553,"style":2251},[2250],[2183,9555,9557],{"className":9556},[2255,2256,2257,2258],[2183,9558,9560],{"className":9559},[2204,2258],[2183,9561,2325],{"className":9562},[2204,2205,2258],[2183,9564,2337],{"className":9565},[2336],[2183,9567,9569],{"className":9568},[2238],[2183,9570,9572],{"className":9571,"style":2707},[2242],[2183,9573],{},[9575,9576,9580],"pre",{"className":9577,"code":9578,"language":9579,"meta":116,"style":116},"language-sql shiki shiki-themes github-dark-default","-- Calcul du Lead Time For Changes par composant\nSELECT d.component_name,\n       d.product_id,\n       AVG(TIMESTAMP_DIFF(d.deployment_timestamp, c.commit_timestamp, HOUR)) as lead_time_hours\nFROM `dora_metrics.deployments` d\n         JOIN\n     `dora_metrics.git_commits` c\n     ON\n         d.git_tag = c.tag\nWHERE d.environment = 'prod'\n  AND d.deployment_timestamp BETWEEN '2024-01-01' AND '2024-12-31'\nGROUP BY d.component_name, d.product_id\n","sql",[1676,9581,9582,9590,9609,9621,9660,9673,9679,9688,9694,9716,9734,9758],{"__ignoreMap":116},[2183,9583,9586],{"class":9584,"line":9585},"line",1,[2183,9587,9589],{"class":9588},"sH3jZ","-- Calcul du Lead Time For Changes par composant\n",[2183,9591,9592,9596,9600,9603,9606],{"class":9584,"line":117},[2183,9593,9595],{"class":9594},"suJrU","SELECT",[2183,9597,9599],{"class":9598},"sFSAA"," d",[2183,9601,388],{"class":9602},"sZEs4",[2183,9604,9605],{"class":9598},"component_name",[2183,9607,9608],{"class":9602},",\n",[2183,9610,9611,9614,9616,9619],{"class":9584,"line":124},[2183,9612,9613],{"class":9598},"       d",[2183,9615,388],{"class":9602},[2183,9617,9618],{"class":9598},"product_id",[2183,9620,9608],{"class":9602},[2183,9622,9623,9626,9629,9631,9633,9636,9639,9641,9643,9646,9648,9651,9654,9657],{"class":9584,"line":442},[2183,9624,9625],{"class":9598},"       AVG",[2183,9627,9628],{"class":9602},"(TIMESTAMP_DIFF(",[2183,9630,2438],{"class":9598},[2183,9632,388],{"class":9602},[2183,9634,9635],{"class":9598},"deployment_timestamp",[2183,9637,9638],{"class":9602},", ",[2183,9640,3134],{"class":9598},[2183,9642,388],{"class":9602},[2183,9644,9645],{"class":9598},"commit_timestamp",[2183,9647,9638],{"class":9602},[2183,9649,9650],{"class":9594},"HOUR",[2183,9652,9653],{"class":9602},")) ",[2183,9655,9656],{"class":9594},"as",[2183,9658,9659],{"class":9602}," lead_time_hours\n",[2183,9661,9663,9666,9670],{"class":9584,"line":9662},5,[2183,9664,9665],{"class":9594},"FROM",[2183,9667,9669],{"class":9668},"s9uIt"," `dora_metrics.deployments`",[2183,9671,9672],{"class":9602}," d\n",[2183,9674,9676],{"class":9584,"line":9675},6,[2183,9677,9678],{"class":9594},"         JOIN\n",[2183,9680,9682,9685],{"class":9584,"line":9681},7,[2183,9683,9684],{"class":9668},"     `dora_metrics.git_commits`",[2183,9686,9687],{"class":9602}," c\n",[2183,9689,9691],{"class":9584,"line":9690},8,[2183,9692,9693],{"class":9594},"     ON\n",[2183,9695,9697,9700,9702,9705,9708,9711,9713],{"class":9584,"line":9696},9,[2183,9698,9699],{"class":9598},"         d",[2183,9701,388],{"class":9602},[2183,9703,9704],{"class":9598},"git_tag",[2183,9706,9707],{"class":9594}," =",[2183,9709,9710],{"class":9598}," c",[2183,9712,388],{"class":9602},[2183,9714,9715],{"class":9598},"tag\n",[2183,9717,9719,9722,9724,9726,9729,9731],{"class":9584,"line":9718},10,[2183,9720,9721],{"class":9594},"WHERE",[2183,9723,9599],{"class":9598},[2183,9725,388],{"class":9602},[2183,9727,9728],{"class":9598},"environment",[2183,9730,9707],{"class":9594},[2183,9732,9733],{"class":9668}," 'prod'\n",[2183,9735,9737,9740,9742,9744,9746,9749,9752,9755],{"class":9584,"line":9736},11,[2183,9738,9739],{"class":9594},"  AND",[2183,9741,9599],{"class":9598},[2183,9743,388],{"class":9602},[2183,9745,9635],{"class":9598},[2183,9747,9748],{"class":9594}," BETWEEN",[2183,9750,9751],{"class":9668}," '2024-01-01'",[2183,9753,9754],{"class":9594}," AND",[2183,9756,9757],{"class":9668}," '2024-12-31'\n",[2183,9759,9761,9764,9766,9768,9770,9772,9774,9776],{"class":9584,"line":9760},12,[2183,9762,9763],{"class":9594},"GROUP BY",[2183,9765,9599],{"class":9598},[2183,9767,388],{"class":9602},[2183,9769,9605],{"class":9598},[2183,9771,9638],{"class":9602},[2183,9773,2438],{"class":9598},[2183,9775,388],{"class":9602},[2183,9777,9778],{"class":9598},"product_id\n",[19,9780,9781],{},[414,9782,1277],{},[277,9784,9785,9788,9791],{},[280,9786,9787],{},"Fréquence des déploiements en production",[280,9789,9790],{},"Calculée par composant puis agrégée au niveau produit",[280,9792,9793],{},"Exclusion des déploiements de configuration",[9575,9795,9797],{"className":9577,"code":9796,"language":9579,"meta":116,"style":116},"-- Calcul de la fréquence de déploiement par composant\nWITH deployments_ordered AS (SELECT component_name,\n                                    product_id,\n                                    deployment_timestamp,\n                                    LAG(deployment_timestamp) OVER (\n      PARTITION BY component_name\n      ORDER BY deployment_timestamp\n    ) as previous_deployment\n                             FROM `dora_metrics.deployments`\n                             WHERE environment = 'prod'\n                               AND is_config_only = FALSE\n                               AND deployment_timestamp BETWEEN '2024-01-01' AND '2024-12-31')\nSELECT component_name,\n       product_id,\n       COUNT(*)                                                            as deployment_count,\n       AVG(TIMESTAMP_DIFF(deployment_timestamp, previous_deployment, DAY)) as avg_days_between_deployments,\n       SAFE_DIVIDE(COUNT(*), 365)                                          as deployments_per_day\nFROM deployments_ordered\nWHERE previous_deployment IS NOT NULL\nGROUP BY component_name, product_id\n",[1676,9798,9799,9804,9823,9828,9833,9847,9858,9866,9876,9884,9896,9909,9929,9936,9942,9961,9979,10006,10014,10025],{"__ignoreMap":116},[2183,9800,9801],{"class":9584,"line":9585},[2183,9802,9803],{"class":9588},"-- Calcul de la fréquence de déploiement par composant\n",[2183,9805,9806,9809,9812,9815,9818,9820],{"class":9584,"line":117},[2183,9807,9808],{"class":9594},"WITH",[2183,9810,9811],{"class":9602}," deployments_ordered ",[2183,9813,9814],{"class":9594},"AS",[2183,9816,9817],{"class":9602}," (",[2183,9819,9595],{"class":9594},[2183,9821,9822],{"class":9602}," component_name,\n",[2183,9824,9825],{"class":9584,"line":124},[2183,9826,9827],{"class":9602},"                                    product_id,\n",[2183,9829,9830],{"class":9584,"line":442},[2183,9831,9832],{"class":9602},"                                    deployment_timestamp,\n",[2183,9834,9835,9838,9841,9844],{"class":9584,"line":9662},[2183,9836,9837],{"class":9598},"                                    LAG",[2183,9839,9840],{"class":9602},"(deployment_timestamp) ",[2183,9842,9843],{"class":9594},"OVER",[2183,9845,9846],{"class":9602}," (\n",[2183,9848,9849,9852,9855],{"class":9584,"line":9675},[2183,9850,9851],{"class":9594},"      PARTITION",[2183,9853,9854],{"class":9594}," BY",[2183,9856,9857],{"class":9602}," component_name\n",[2183,9859,9860,9863],{"class":9584,"line":9681},[2183,9861,9862],{"class":9594},"      ORDER BY",[2183,9864,9865],{"class":9602}," deployment_timestamp\n",[2183,9867,9868,9871,9873],{"class":9584,"line":9690},[2183,9869,9870],{"class":9602},"    ) ",[2183,9872,9656],{"class":9594},[2183,9874,9875],{"class":9602}," previous_deployment\n",[2183,9877,9878,9881],{"class":9584,"line":9696},[2183,9879,9880],{"class":9594},"                             FROM",[2183,9882,9883],{"class":9668}," `dora_metrics.deployments`\n",[2183,9885,9886,9889,9892,9894],{"class":9584,"line":9718},[2183,9887,9888],{"class":9594},"                             WHERE",[2183,9890,9891],{"class":9602}," environment ",[2183,9893,2356],{"class":9594},[2183,9895,9733],{"class":9668},[2183,9897,9898,9901,9904,9906],{"class":9584,"line":9736},[2183,9899,9900],{"class":9594},"                               AND",[2183,9902,9903],{"class":9602}," is_config_only ",[2183,9905,2356],{"class":9594},[2183,9907,9908],{"class":9602}," FALSE\n",[2183,9910,9911,9913,9916,9919,9921,9923,9926],{"class":9584,"line":9760},[2183,9912,9900],{"class":9594},[2183,9914,9915],{"class":9602}," deployment_timestamp ",[2183,9917,9918],{"class":9594},"BETWEEN",[2183,9920,9751],{"class":9668},[2183,9922,9754],{"class":9594},[2183,9924,9925],{"class":9668}," '2024-12-31'",[2183,9927,9928],{"class":9602},")\n",[2183,9930,9932,9934],{"class":9584,"line":9931},13,[2183,9933,9595],{"class":9594},[2183,9935,9822],{"class":9602},[2183,9937,9939],{"class":9584,"line":9938},14,[2183,9940,9941],{"class":9602},"       product_id,\n",[2183,9943,9945,9948,9950,9953,9956,9958],{"class":9584,"line":9944},15,[2183,9946,9947],{"class":9598},"       COUNT",[2183,9949,2402],{"class":9602},[2183,9951,9952],{"class":9594},"*",[2183,9954,9955],{"class":9602},")                                                            ",[2183,9957,9656],{"class":9594},[2183,9959,9960],{"class":9602}," deployment_count,\n",[2183,9962,9964,9966,9969,9972,9974,9976],{"class":9584,"line":9963},16,[2183,9965,9625],{"class":9598},[2183,9967,9968],{"class":9602},"(TIMESTAMP_DIFF(deployment_timestamp, previous_deployment, ",[2183,9970,9971],{"class":9594},"DAY",[2183,9973,9653],{"class":9602},[2183,9975,9656],{"class":9594},[2183,9977,9978],{"class":9602}," avg_days_between_deployments,\n",[2183,9980,9982,9985,9988,9990,9992,9995,9998,10001,10003],{"class":9584,"line":9981},17,[2183,9983,9984],{"class":9602},"       SAFE_DIVIDE(",[2183,9986,9987],{"class":9598},"COUNT",[2183,9989,2402],{"class":9602},[2183,9991,9952],{"class":9594},[2183,9993,9994],{"class":9602},"), ",[2183,9996,9997],{"class":9598},"365",[2183,9999,10000],{"class":9602},")                                          ",[2183,10002,9656],{"class":9594},[2183,10004,10005],{"class":9602}," deployments_per_day\n",[2183,10007,10009,10011],{"class":9584,"line":10008},18,[2183,10010,9665],{"class":9594},[2183,10012,10013],{"class":9602}," deployments_ordered\n",[2183,10015,10017,10019,10022],{"class":9584,"line":10016},19,[2183,10018,9721],{"class":9594},[2183,10020,10021],{"class":9602}," previous_deployment ",[2183,10023,10024],{"class":9594},"IS NOT NULL\n",[2183,10026,10028,10030],{"class":9584,"line":10027},20,[2183,10029,9763],{"class":9594},[2183,10031,10032],{"class":9602}," component_name, product_id\n",[19,10034,10035],{},[414,10036,1287],{},[277,10038,10039,10042,10045],{},[280,10040,10041],{},"Taux de déploiements causant au moins un incident en production",[280,10043,10044],{},"Exprimé en pourcentage",[280,10046,10047],{},"Basé sur les déploiements Kubernetes réussis et les incidents ServiceNow résolus",[9575,10049,10051],{"className":9577,"code":10050,"language":9579,"meta":116,"style":116},"-- Calcul du Change Failure Rate par produit\nWITH deployments_with_incidents AS (SELECT d.deployment_id,\n                                           d.product_id,\n                                           MAX(CASE WHEN i.incident_id IS NOT NULL THEN 1 ELSE 0 END) as has_incident\n                                    FROM `dora_metrics.deployments` d\n                                             LEFT JOIN\n                                         `dora_metrics.incidents` i\n                                         ON\n                                             d.product_id = i.product_id\n                                                 AND i.created_timestamp > d.deployment_timestamp\n                                                 AND i.created_timestamp \u003C= (SELECT MIN(next_d.deployment_timestamp)\n                                                                             FROM `dora_metrics.deployments` next_d\n                                                                             WHERE next_d.product_id = d.product_id\n                                                                               AND next_d.deployment_timestamp > d.deployment_timestamp)\n                                    WHERE d.environment = 'prod'\n                                      AND d.deployment_timestamp BETWEEN '2024-01-01' AND '2024-12-31'\n                                    GROUP BY d.deployment_id, d.product_id)\nSELECT product_id,\n       COUNT(*)                                       as total_deployments,\n       SUM(has_incident)                              as failed_deployments,\n       SAFE_DIVIDE(SUM(has_incident), COUNT(*)) * 100 as change_failure_rate_percent\nFROM deployments_with_incidents\nGROUP BY product_id\n",[1676,10052,10053,10058,10080,10091,10138,10147,10152,10160,10165,10182,10204,10235,10245,10265,10286,10301,10320,10341,10348,10364,10377,10407,10415],{"__ignoreMap":116},[2183,10054,10055],{"class":9584,"line":9585},[2183,10056,10057],{"class":9588},"-- Calcul du Change Failure Rate par produit\n",[2183,10059,10060,10062,10065,10067,10069,10071,10073,10075,10078],{"class":9584,"line":117},[2183,10061,9808],{"class":9594},[2183,10063,10064],{"class":9602}," deployments_with_incidents ",[2183,10066,9814],{"class":9594},[2183,10068,9817],{"class":9602},[2183,10070,9595],{"class":9594},[2183,10072,9599],{"class":9598},[2183,10074,388],{"class":9602},[2183,10076,10077],{"class":9598},"deployment_id",[2183,10079,9608],{"class":9602},[2183,10081,10082,10085,10087,10089],{"class":9584,"line":124},[2183,10083,10084],{"class":9598},"                                           d",[2183,10086,388],{"class":9602},[2183,10088,9618],{"class":9598},[2183,10090,9608],{"class":9602},[2183,10092,10093,10096,10098,10101,10104,10107,10109,10112,10115,10118,10121,10124,10127,10130,10133,10135],{"class":9584,"line":442},[2183,10094,10095],{"class":9598},"                                           MAX",[2183,10097,2402],{"class":9602},[2183,10099,10100],{"class":9594},"CASE",[2183,10102,10103],{"class":9594}," WHEN",[2183,10105,10106],{"class":9598}," i",[2183,10108,388],{"class":9602},[2183,10110,10111],{"class":9598},"incident_id",[2183,10113,10114],{"class":9594}," IS NOT NULL",[2183,10116,10117],{"class":9594}," THEN",[2183,10119,10120],{"class":9598}," 1",[2183,10122,10123],{"class":9594}," ELSE",[2183,10125,10126],{"class":9598}," 0",[2183,10128,10129],{"class":9594}," END",[2183,10131,10132],{"class":9602},") ",[2183,10134,9656],{"class":9594},[2183,10136,10137],{"class":9602}," has_incident\n",[2183,10139,10140,10143,10145],{"class":9584,"line":9662},[2183,10141,10142],{"class":9594},"                                    FROM",[2183,10144,9669],{"class":9668},[2183,10146,9672],{"class":9602},[2183,10148,10149],{"class":9584,"line":9675},[2183,10150,10151],{"class":9594},"                                             LEFT JOIN\n",[2183,10153,10154,10157],{"class":9584,"line":9681},[2183,10155,10156],{"class":9668},"                                         `dora_metrics.incidents`",[2183,10158,10159],{"class":9602}," i\n",[2183,10161,10162],{"class":9584,"line":9690},[2183,10163,10164],{"class":9594},"                                         ON\n",[2183,10166,10167,10170,10172,10174,10176,10178,10180],{"class":9584,"line":9696},[2183,10168,10169],{"class":9598},"                                             d",[2183,10171,388],{"class":9602},[2183,10173,9618],{"class":9598},[2183,10175,9707],{"class":9594},[2183,10177,10106],{"class":9598},[2183,10179,388],{"class":9602},[2183,10181,9778],{"class":9598},[2183,10183,10184,10187,10189,10191,10194,10197,10199,10201],{"class":9584,"line":9718},[2183,10185,10186],{"class":9594},"                                                 AND",[2183,10188,10106],{"class":9598},[2183,10190,388],{"class":9602},[2183,10192,10193],{"class":9598},"created_timestamp",[2183,10195,10196],{"class":9594}," >",[2183,10198,9599],{"class":9598},[2183,10200,388],{"class":9602},[2183,10202,10203],{"class":9598},"deployment_timestamp\n",[2183,10205,10206,10208,10210,10212,10214,10217,10219,10221,10224,10226,10229,10231,10233],{"class":9584,"line":9736},[2183,10207,10186],{"class":9594},[2183,10209,10106],{"class":9598},[2183,10211,388],{"class":9602},[2183,10213,10193],{"class":9598},[2183,10215,10216],{"class":9594}," \u003C=",[2183,10218,9817],{"class":9602},[2183,10220,9595],{"class":9594},[2183,10222,10223],{"class":9598}," MIN",[2183,10225,2402],{"class":9602},[2183,10227,10228],{"class":9598},"next_d",[2183,10230,388],{"class":9602},[2183,10232,9635],{"class":9598},[2183,10234,9928],{"class":9602},[2183,10236,10237,10240,10242],{"class":9584,"line":9760},[2183,10238,10239],{"class":9594},"                                                                             FROM",[2183,10241,9669],{"class":9668},[2183,10243,10244],{"class":9602}," next_d\n",[2183,10246,10247,10250,10253,10255,10257,10259,10261,10263],{"class":9584,"line":9931},[2183,10248,10249],{"class":9594},"                                                                             WHERE",[2183,10251,10252],{"class":9598}," next_d",[2183,10254,388],{"class":9602},[2183,10256,9618],{"class":9598},[2183,10258,9707],{"class":9594},[2183,10260,9599],{"class":9598},[2183,10262,388],{"class":9602},[2183,10264,9778],{"class":9598},[2183,10266,10267,10270,10272,10274,10276,10278,10280,10282,10284],{"class":9584,"line":9938},[2183,10268,10269],{"class":9594},"                                                                               AND",[2183,10271,10252],{"class":9598},[2183,10273,388],{"class":9602},[2183,10275,9635],{"class":9598},[2183,10277,10196],{"class":9594},[2183,10279,9599],{"class":9598},[2183,10281,388],{"class":9602},[2183,10283,9635],{"class":9598},[2183,10285,9928],{"class":9602},[2183,10287,10288,10291,10293,10295,10297,10299],{"class":9584,"line":9944},[2183,10289,10290],{"class":9594},"                                    WHERE",[2183,10292,9599],{"class":9598},[2183,10294,388],{"class":9602},[2183,10296,9728],{"class":9598},[2183,10298,9707],{"class":9594},[2183,10300,9733],{"class":9668},[2183,10302,10303,10306,10308,10310,10312,10314,10316,10318],{"class":9584,"line":9963},[2183,10304,10305],{"class":9594},"                                      AND",[2183,10307,9599],{"class":9598},[2183,10309,388],{"class":9602},[2183,10311,9635],{"class":9598},[2183,10313,9748],{"class":9594},[2183,10315,9751],{"class":9668},[2183,10317,9754],{"class":9594},[2183,10319,9757],{"class":9668},[2183,10321,10322,10325,10327,10329,10331,10333,10335,10337,10339],{"class":9584,"line":9981},[2183,10323,10324],{"class":9594},"                                    GROUP BY",[2183,10326,9599],{"class":9598},[2183,10328,388],{"class":9602},[2183,10330,10077],{"class":9598},[2183,10332,9638],{"class":9602},[2183,10334,2438],{"class":9598},[2183,10336,388],{"class":9602},[2183,10338,9618],{"class":9598},[2183,10340,9928],{"class":9602},[2183,10342,10343,10345],{"class":9584,"line":10008},[2183,10344,9595],{"class":9594},[2183,10346,10347],{"class":9602}," product_id,\n",[2183,10349,10350,10352,10354,10356,10359,10361],{"class":9584,"line":10016},[2183,10351,9947],{"class":9598},[2183,10353,2402],{"class":9602},[2183,10355,9952],{"class":9594},[2183,10357,10358],{"class":9602},")                                       ",[2183,10360,9656],{"class":9594},[2183,10362,10363],{"class":9602}," total_deployments,\n",[2183,10365,10366,10369,10372,10374],{"class":9584,"line":10027},[2183,10367,10368],{"class":9598},"       SUM",[2183,10370,10371],{"class":9602},"(has_incident)                              ",[2183,10373,9656],{"class":9594},[2183,10375,10376],{"class":9602}," failed_deployments,\n",[2183,10378,10380,10382,10385,10388,10390,10392,10394,10396,10398,10401,10404],{"class":9584,"line":10379},21,[2183,10381,9984],{"class":9602},[2183,10383,10384],{"class":9598},"SUM",[2183,10386,10387],{"class":9602},"(has_incident), ",[2183,10389,9987],{"class":9598},[2183,10391,2402],{"class":9602},[2183,10393,9952],{"class":9594},[2183,10395,9653],{"class":9602},[2183,10397,9952],{"class":9594},[2183,10399,10400],{"class":9598}," 100",[2183,10402,10403],{"class":9594}," as",[2183,10405,10406],{"class":9602}," change_failure_rate_percent\n",[2183,10408,10410,10412],{"class":9584,"line":10409},22,[2183,10411,9665],{"class":9594},[2183,10413,10414],{"class":9602}," deployments_with_incidents\n",[2183,10416,10418,10420],{"class":9584,"line":10417},23,[2183,10419,9763],{"class":9594},[2183,10421,10422],{"class":9602}," product_id\n",[19,10424,10425],{},[414,10426,8341],{},[277,10428,10429,10432,10435],{},[280,10430,10431],{},"Temps moyen de résolution des incidents",[280,10433,10434],{},"Calculé à partir des dates d'ouverture et de résolution dans ServiceNow",[280,10436,10437],{},"Agrégé au niveau produit",[9575,10439,10441],{"className":9577,"code":10440,"language":9579,"meta":116,"style":116},"-- Calcul du Mean Time To Recover par produit\nSELECT product_id,\n       COUNT(*)                                                         as incident_count,\n       AVG(TIMESTAMP_DIFF(resolved_timestamp, created_timestamp, HOUR)) as mttr_hours\nFROM `dora_metrics.incidents`\nWHERE status = 'Resolved'\n  AND created_timestamp BETWEEN '2024-01-01' AND '2024-12-31'\n  AND resolved_timestamp IS NOT NULL\nGROUP BY product_id\n",[1676,10442,10443,10448,10454,10470,10486,10493,10505,10520,10529],{"__ignoreMap":116},[2183,10444,10445],{"class":9584,"line":9585},[2183,10446,10447],{"class":9588},"-- Calcul du Mean Time To Recover par produit\n",[2183,10449,10450,10452],{"class":9584,"line":117},[2183,10451,9595],{"class":9594},[2183,10453,10347],{"class":9602},[2183,10455,10456,10458,10460,10462,10465,10467],{"class":9584,"line":124},[2183,10457,9947],{"class":9598},[2183,10459,2402],{"class":9602},[2183,10461,9952],{"class":9594},[2183,10463,10464],{"class":9602},")                                                         ",[2183,10466,9656],{"class":9594},[2183,10468,10469],{"class":9602}," incident_count,\n",[2183,10471,10472,10474,10477,10479,10481,10483],{"class":9584,"line":442},[2183,10473,9625],{"class":9598},[2183,10475,10476],{"class":9602},"(TIMESTAMP_DIFF(resolved_timestamp, created_timestamp, ",[2183,10478,9650],{"class":9594},[2183,10480,9653],{"class":9602},[2183,10482,9656],{"class":9594},[2183,10484,10485],{"class":9602}," mttr_hours\n",[2183,10487,10488,10490],{"class":9584,"line":9662},[2183,10489,9665],{"class":9594},[2183,10491,10492],{"class":9668}," `dora_metrics.incidents`\n",[2183,10494,10495,10497,10500,10502],{"class":9584,"line":9675},[2183,10496,9721],{"class":9594},[2183,10498,10499],{"class":9594}," status",[2183,10501,9707],{"class":9594},[2183,10503,10504],{"class":9668}," 'Resolved'\n",[2183,10506,10507,10509,10512,10514,10516,10518],{"class":9584,"line":9681},[2183,10508,9739],{"class":9594},[2183,10510,10511],{"class":9602}," created_timestamp ",[2183,10513,9918],{"class":9594},[2183,10515,9751],{"class":9668},[2183,10517,9754],{"class":9594},[2183,10519,9757],{"class":9668},[2183,10521,10522,10524,10527],{"class":9584,"line":9690},[2183,10523,9739],{"class":9594},[2183,10525,10526],{"class":9602}," resolved_timestamp ",[2183,10528,10024],{"class":9594},[2183,10530,10531,10533],{"class":9584,"line":9696},[2183,10532,9763],{"class":9594},[2183,10534,10422],{"class":9602},[87,10536,10538],{"id":10537},"fiabilisation-et-optimisation-des-données","Fiabilisation et optimisation des données",[19,10540,10541],{},[414,10542,10543],{},"Infrastructure as Code",[277,10545,10546,10549,10552],{},[280,10547,10548],{},"Utilisation de Terraform pour standardiser les déploiements",[280,10550,10551],{},"Configuration automatique des annotations requises",[280,10553,10554],{},"Validation des formats de données",[19,10556,10557],{},[414,10558,10559],{},"Bonnes pratiques",[277,10561,10562,10565,10568],{},[280,10563,10564],{},"Tagging systématique des versions",[280,10566,10567],{},"Documentation des conventions",[280,10569,10570],{},"Formation des équipes",[19,10572,10573],{},[414,10574,10575],{},"Monitoring",[277,10577,10578,10581,10584],{},[280,10579,10580],{},"Détection des annotations manquantes",[280,10582,10583],{},"Alertes sur les incohérences",[280,10585,10586],{},"Suivi de la qualité des données",[19,10588,10589],{},[414,10590,10591],{},"Optimisation de BigQuery",[19,10593,10594],{},"La gestion d'un volume important de données dans BigQuery a nécessité plusieurs optimisations :",[9575,10596,10598],{"className":9577,"code":10597,"language":9579,"meta":116,"style":116},"-- Création de tables partitionnées par date pour améliorer les performances\nCREATE TABLE `dora_metrics.deployments_partitioned`\n    PARTITION BY DATE\n(\n    deployment_timestamp\n)\nAS\nSELECT *\nFROM `dora_metrics.deployments`;\n\n-- Création de vues matérialisées pour les requêtes fréquentes\nCREATE\nMATERIALIZED VIEW `dora_metrics.lead_time_daily`\nAS\nSELECT product_id, DATE (deployment_timestamp) as deployment_date, AVG (TIMESTAMP_DIFF(deployment_timestamp, commit_timestamp, HOUR)) as avg_lead_time_hours\nFROM\n    `dora_metrics.deployments_with_commits`\nGROUP BY\n    product_id, deployment_date;\n\n",[1676,10599,10600,10605,10616,10626,10631,10636,10640,10645,10652,10661,10666,10671,10676,10684,10688,10721,10726,10731,10736],{"__ignoreMap":116},[2183,10601,10602],{"class":9584,"line":9585},[2183,10603,10604],{"class":9588},"-- Création de tables partitionnées par date pour améliorer les performances\n",[2183,10606,10607,10610,10613],{"class":9584,"line":117},[2183,10608,10609],{"class":9594},"CREATE",[2183,10611,10612],{"class":9594}," TABLE",[2183,10614,10615],{"class":9668}," `dora_metrics.deployments_partitioned`\n",[2183,10617,10618,10621,10623],{"class":9584,"line":124},[2183,10619,10620],{"class":9594},"    PARTITION",[2183,10622,9854],{"class":9594},[2183,10624,10625],{"class":9594}," DATE\n",[2183,10627,10628],{"class":9584,"line":442},[2183,10629,10630],{"class":9602},"(\n",[2183,10632,10633],{"class":9584,"line":9662},[2183,10634,10635],{"class":9602},"    deployment_timestamp\n",[2183,10637,10638],{"class":9584,"line":9675},[2183,10639,9928],{"class":9602},[2183,10641,10642],{"class":9584,"line":9681},[2183,10643,10644],{"class":9594},"AS\n",[2183,10646,10647,10649],{"class":9584,"line":9690},[2183,10648,9595],{"class":9594},[2183,10650,10651],{"class":9594}," *\n",[2183,10653,10654,10656,10658],{"class":9584,"line":9696},[2183,10655,9665],{"class":9594},[2183,10657,9669],{"class":9668},[2183,10659,10660],{"class":9602},";\n",[2183,10662,10663],{"class":9584,"line":9718},[2183,10664,10665],{"emptyLinePlaceholder":133},"\n",[2183,10667,10668],{"class":9584,"line":9736},[2183,10669,10670],{"class":9588},"-- Création de vues matérialisées pour les requêtes fréquentes\n",[2183,10672,10673],{"class":9584,"line":9760},[2183,10674,10675],{"class":9594},"CREATE\n",[2183,10677,10678,10681],{"class":9584,"line":9931},[2183,10679,10680],{"class":9602},"MATERIALIZED VIEW ",[2183,10682,10683],{"class":9668},"`dora_metrics.lead_time_daily`\n",[2183,10685,10686],{"class":9584,"line":9938},[2183,10687,10644],{"class":9594},[2183,10689,10690,10692,10695,10698,10701,10703,10706,10709,10712,10714,10716,10718],{"class":9584,"line":9944},[2183,10691,9595],{"class":9594},[2183,10693,10694],{"class":9602}," product_id, ",[2183,10696,10697],{"class":9594},"DATE",[2183,10699,10700],{"class":9602}," (deployment_timestamp) ",[2183,10702,9656],{"class":9594},[2183,10704,10705],{"class":9602}," deployment_date, ",[2183,10707,10708],{"class":9598},"AVG",[2183,10710,10711],{"class":9602}," (TIMESTAMP_DIFF(deployment_timestamp, commit_timestamp, ",[2183,10713,9650],{"class":9594},[2183,10715,9653],{"class":9602},[2183,10717,9656],{"class":9594},[2183,10719,10720],{"class":9602}," avg_lead_time_hours\n",[2183,10722,10723],{"class":9584,"line":9963},[2183,10724,10725],{"class":9594},"FROM\n",[2183,10727,10728],{"class":9584,"line":9981},[2183,10729,10730],{"class":9668},"    `dora_metrics.deployments_with_commits`\n",[2183,10732,10733],{"class":9584,"line":10008},[2183,10734,10735],{"class":9594},"GROUP BY\n",[2183,10737,10738],{"class":9584,"line":10016},[2183,10739,10740],{"class":9602},"    product_id, deployment_date;\n",[19,10742,10743],{},[414,10744,10745],{},"Automatisation des flux de données",[19,10747,10748],{},"Nous avons mis en place plusieurs processus automatisés pour maintenir des données à jour :",[277,10750,10751,10754,10757],{},[280,10752,10753],{},"Jobs Cloud Functions pour synchroniser les données ServiceNow toutes les 15 minutes",[280,10755,10756],{},"Webhooks GitHub pour capturer les événements de commit et de tag en temps réel",[280,10758,10759],{},"Export des logs Kubernetes via Cloud Logging avec un délai maximum de 5 minutes",[19,10761,10762],{},"Cette approche nous permet d'obtenir des métriques fiables et exploitables pour l'amélioration continue de nos processus de livraison.",[87,10764,10766],{"id":10765},"points-clés-pour-lagrégation","Points clés pour l'agrégation 🔑",[170,10768,10769],{},[19,10770,10771],{},[414,10772,10773],{},"Garantir la cohérence et la pertinence des métriques agrégées",[277,10775,10776,10781,10786],{},[280,10777,10778],{},[414,10779,10780],{},"Pondération",[280,10782,10783],{},[414,10784,10785],{},"Exclusions",[280,10787,10788],{},[414,10789,10790],{},"Cas particuliers",[19,10792,10793],{},"Cette approche d'agrégation garantit :",[277,10795,10796,10799,10802],{},[280,10797,10798],{},"Une représentation équitable à chaque niveau",[280,10800,10801],{},"Une cohérence dans le calcul des métriques",[280,10803,10804],{},"Une prise en compte appropriée des cas limites",[87,10806,10808],{"id":10807},"synthèse-de-notre-approche-dimplémentation","Synthèse de notre approche d'implémentation",[170,10810,10811],{},[19,10812,10813],{},[414,10814,10815],{},"Une implémentation progressive et adaptée au contexte",[19,10817,10818],{},"Notre approche d'implémentation des DORA Metrics a combiné rigueur méthodologique et pragmatisme. Nous avons défini des formules de calcul précises tout en les adaptant aux réalités opérationnelles de l'entreprise. L'agrégation multi-niveaux nous a permis de répondre aux besoins de tous, du développeur individuel jusqu'au comité de direction.",[19,10820,10821],{},"Cette implémentation technique n'était cependant que la première étape. La véritable valeur des DORA Metrics réside dans leur capacité à transformer les pratiques et la culture de l'organisation.",[29,10823,10825],{"id":10824},"_6-bénéfices-enseignements-et-perspectives","6. Bénéfices, enseignements et perspectives 🤔",[170,10827,10828],{},[19,10829,10830],{},[414,10831,10832],{},"La mise en place des DORA Metrics est un voyage, pas une destination.",[19,10834,10835],{},"Ce retour d'expérience illustre une réalité fondamentale : implémenter les DORA Metrics dans un grand groupe nécessite bien plus qu'une simple application de formules mathématiques. C'est un projet de transformation qui touche à la fois aux aspects techniques, organisationnels et humains.",[87,10837,10839],{"id":10838},"bénéfices-observés","Bénéfices observés",[170,10841,10842],{},[19,10843,10844],{},[414,10845,10846],{},"Impact transformationnel : au-delà des chiffres",[19,10848,10849],{},"L'implémentation des DORA Metrics a généré des bénéfices qui dépassent largement le cadre de la simple mesure de performance. Elle a catalysé une véritable transformation des pratiques et de la culture de livraison logicielle au sein de l'organisation.",[19,10851,10852],{},"Voici les principaux impacts positifs observés :",[277,10854,10855,10861,10867],{},[280,10856,10857,10860],{},[414,10858,10859],{},"Une meilleure visibilité sur la performance de livraison"," : Les équipes ont pu objectiver leurs points forts (par exemple, une fréquence de déploiement élevée) et leurs axes d'amélioration (par exemple, un très long \"Lead Time for Changes\").",[280,10862,10863,10866],{},[414,10864,10865],{},"Un langage commun entre équipes"," : Les DORA Metrics servent désormais de référence partagée. Lorsqu'il y a un incident, tout le monde comprend la corrélation possible entre le \"dernier déploiement\" et le Change Failure Rate.",[280,10868,10869,10872],{},[414,10870,10871],{},"La mise en lumière de la dette de traçabilité"," : Le besoin de taguer systématiquement les versions, d'indiquer l'instance concernée dans les tickets, etc. a été rendu évident grâce à la mesure du Lead Time for Changes et du Change Failure Rate.",[19,10874,10875],{},"Ces métriques sont imparfaites (comme tout indicateur), mais elles offrent un \"socle\" suffisamment solide pour enclencher de vraies discussions et pour s'améliorer en continu.",[87,10877,10879],{"id":10878},"enseignements-clés","Enseignements clés",[19,10881,10882],{},"Cette expérience a impliqué de nombreuses adaptations et m'a permis de tirer plusieurs enseignements importants :",[277,10884,10885,10891,10897,10903,10909],{},[280,10886,10887,10890],{},[414,10888,10889],{},"Standardisation nécessaire"," : Les DORA Metrics nécessitent une standardisation des pratiques DevOps pour être efficaces",[280,10892,10893,10896],{},[414,10894,10895],{},"Adaptation au contexte"," : Il est essentiel d'adapter les métriques au contexte spécifique de l'entreprise",[280,10898,10899,10902],{},[414,10900,10901],{},"Qualité des données cruciale"," : La fiabilité des métriques dépend directement de la qualité des données collectées",[280,10904,10905,10908],{},[414,10906,10907],{},"Dimension humaine prépondérante"," : L'accompagnement des équipes et la gestion du changement sont aussi importants que l'aspect technique",[280,10910,10911,10914],{},[414,10912,10913],{},"Pragmatisme indispensable"," : Accepter les imperfections initiales et itérer progressivement est la clé du succès",[87,10916,10918],{"id":10917},"perspectives-dévolution","Perspectives d'évolution",[19,10920,10921],{},"Cette première phase d'implémentation nous a permis d'identifier plusieurs axes d'amélioration pour l'avenir :",[277,10923,10924,10930,10936],{},[280,10925,10926,10929],{},[414,10927,10928],{},"Détection des changements de Configuration"," : Déployer une solution pour tracer précisément les modifications de configuration, actuellement difficiles à distinguer des déploiements de code.",[280,10931,10932,10935],{},[414,10933,10934],{},"Granularité des incidents"," : Enrichir ServiceNow pour associer chaque incident au composant ou à l'instance spécifique concernée, permettant ainsi un calcul plus précis du Change Failure Rate.",[280,10937,10938,10941],{},[414,10939,10940],{},"Automatisation accrue"," : Réduire les interventions manuelles dans la collecte et le traitement des données pour améliorer la fiabilité et la fréquence de mise à jour des métriques.",[29,10943,10944],{"id":523},"Conclusion 🙌",[19,10946,10947],{},"Ce retour d'expérience démontre que la mise en place des DORA Metrics dans un grand groupe est un projet de transformation à part entière. Au-delà des aspects techniques, c'est avant tout un projet humain qui nécessite pédagogie, pragmatisme et persévérance.",[19,10949,10950],{},"Le parcours n’a pas été sans difficultés. Il y des inquiétudes, notamment parmi les personnes directement impliquées dans les projets. Grâce à des sponsors engagés et, surtout, à une approche basée sur la transparence et le temps accordé à chacun, nous avons pu atteindre nos objectifs.",[19,10952,10953],{},"Les bénéfices sont à la hauteur de l'investissement : une meilleure visibilité sur la performance de livraison, un langage commun entre les équipes, et surtout, une culture d'amélioration continue qui s'installe progressivement dans l'organisation.",[170,10955,10956],{},[19,10957,10958,10959,10963,10964,10968],{},"J'espère que ce partage d'expérience vous sera utile ! N'hésitez à me contacter ",[50,10960,10962],{"href":362,"rel":10961},[54],"sur Linkedin"," ou ",[50,10965,10967],{"href":10966},"mailto:maxime@hoppr.tech","par mail"," si vous souhaitez échanger sur le sujet 🙂",[10970,10971,10972],"style",{},"html pre.shiki code .sH3jZ, html code.shiki .sH3jZ{--shiki-default:#8B949E}html pre.shiki code .suJrU, html code.shiki .suJrU{--shiki-default:#FF7B72}html pre.shiki code .sFSAA, html code.shiki .sFSAA{--shiki-default:#79C0FF}html pre.shiki code .sZEs4, html code.shiki .sZEs4{--shiki-default:#E6EDF3}html pre.shiki code .s9uIt, html code.shiki .s9uIt{--shiki-default:#A5D6FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":116,"searchDepth":117,"depth":117,"links":10974},[10975,10979,10987,10994,11000,11012,11017],{"id":1293,"depth":117,"text":1294,"children":10976},[10977,10978],{"id":1297,"depth":124,"text":1298},{"id":1347,"depth":124,"text":1348},{"id":1393,"depth":117,"text":1394,"children":10980},[10981,10982,10983,10984,10985,10986],{"id":1400,"depth":124,"text":1401},{"id":1426,"depth":124,"text":1427},{"id":1470,"depth":124,"text":1471},{"id":1526,"depth":124,"text":1527},{"id":1575,"depth":124,"text":1576},{"id":1611,"depth":124,"text":1612},{"id":1645,"depth":117,"text":1646,"children":10988},[10989,10990,10991,10992,10993],{"id":1660,"depth":124,"text":1661},{"id":1701,"depth":124,"text":1702},{"id":1734,"depth":124,"text":1735},{"id":1764,"depth":124,"text":1765},{"id":1800,"depth":124,"text":1801},{"id":1839,"depth":117,"text":1840,"children":10995},[10996,10997,10998,10999],{"id":1851,"depth":124,"text":1852},{"id":1880,"depth":124,"text":1881},{"id":2005,"depth":124,"text":2006},{"id":2061,"depth":124,"text":2062},{"id":2119,"depth":117,"text":2120,"children":11001},[11002,11003,11004,11005,11006,11007,11008,11009,11010,11011],{"id":2131,"depth":124,"text":2132},{"id":3353,"depth":124,"text":3354},{"id":3386,"depth":124,"text":3387},{"id":5852,"depth":124,"text":1277},{"id":7158,"depth":124,"text":1287},{"id":8340,"depth":124,"text":8341},{"id":9299,"depth":124,"text":9300},{"id":10537,"depth":124,"text":10538},{"id":10765,"depth":124,"text":10766},{"id":10807,"depth":124,"text":10808},{"id":10824,"depth":117,"text":10825,"children":11013},[11014,11015,11016],{"id":10838,"depth":124,"text":10839},{"id":10878,"depth":124,"text":10879},{"id":10917,"depth":124,"text":10918},{"id":523,"depth":117,"text":10944},"2025-05-19T07:04:21.147Z","  Nouvel article qui fait suite à mon [introduction aux DORA Metrics](https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2024-10-31-dora-metrics-valuer-la-performance-de-livraison-logiciellePour rappel, je vous avais défi",{},"\u002Fblogs\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex",[11023,11025,11027],{"id":137,"name":138,"image":11024,"linkedin":140,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F82ebd0fe-de28-43f3-ab7b-0431af41baad\u002FPhoto_HoppR.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4667VDCLJIY%2F20250519%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20250519T070421Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEM%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJGMEQCIGBBCPT0nDceez3W3BGyZSAp9VTP1gbHP6Nqqr2pE%2BNgAiB3cE3k3RB7rNftOS9EmDVVS1Lsbh5Xb2Ia%2Bfnvn5SduyqIBAiI%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYzNzQyMzE4MzgwNSIMSY9HRup%2BAXGteiXAKtwDmUodglDndRVo1LcYLlVY3v6%2F421tAgt5QE4Km%2BOvwbzlLywe3DWQISAF4AaLgkSap3wRLTVeGvRXDNzu%2Ba70B%2BIwIHRp2Qj4X9JW8eOOad2t2SNsDDQgRJlW51NaoWz2z0DEaA4gV4Wc8qy6DaISJPq7I4jc7F6zaWsenWGcae1Zaw2ItJWg3IuyTvVrGtGV%2Fw%2FJHY3Aib7k6JRoYC3YTqMqFxYPbWnso%2FS4eNS%2Fx5KD01lc9mRA8qEDmVgclhDRSRHNk43K7vJRqy8HMp7eqkHnKgvfwihDYVHBHSR%2BOzVXJw2eWt8JsEgOmDDE7gLX%2BCoE22Zrtw55jpruQp4HT00uNGfb7QB7RjdbVJ%2F%2FpKXmg8FJpigwMln9zroPDZAOggOc4uS6sbOgjtfw95DXwsjQA8CxFFbS7v4z6350%2F1bLmLZmoYmOPxrq0GRtvZMjLVVrYdJYQDyP6BGNHyfw1RHPhao0yvfEqbX5sSMVr0lzQ0PlCaSzO4GWe1uWJh1vEha02YjqPE%2BlgPbYXlm4udoAzLVfC5ksko%2Bh%2BSzeaX4Yjgd6pMttpFzRlx3O75bfCrJ1avfYCWjkiUfv6eBwMruqNbc6j2n6VNlk56IBqkYP6yYwIYWyMZIjmEIwq52rwQY6pgHwBah8BeUChWncYSWs7FXBSY%2BUcuYZhAuJxjoPBxcQ7Bi1%2FF0Bhyznp8a%2FSoz99DSPpob2f4QLRwNU4rlmd7d%2FEJ2enXylud5H3vwXowD%2FyGPio4oEZwwuApGkW0cZBDDYIDrc6RF8IZ6fPFENTBdE2p6nPDjKWS1eR%2FykijI92KZLbk6CgIMJcD6XBB41udml2qGBPkTjtVksXDI3Vd4eo5SaSMhE&X-Amz-Signature=e472e93c2d4eb268a89b6a352180d12f360b654a6fe89a2d143d0641c0670f7f&X-Amz-SignedHeaders=host&x-id=GetObject",{"id":142,"name":143,"image":11026,"linkedin":145,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc88f5dfa-16db-4e6f-acf1-34dd80ee8766\u002Femma_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB46677NLYCVN%2F20250519%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20250519T070420Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEM%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD0EF43nYpEKhTyWKOIGav%2FQ%2BTb25IfMI%2BQIOkFu%2FWCcwIgd5JtEmYcM7on0OKor%2FLc1e2yxxhM9AQPuYtMSuYufY8qiAQIiP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDNbH6feQshRDWGQ2jCrcAyhRSDjT%2BUuGxz3eflkqBL8tuCQUltcfBs0WBNDQIK%2FFuZ0U9WcxktywjfXsC793QYKMsctb%2BSNtHAb2JZiLt%2Fr93O96JjbrzyTEfQWp45tT1DlJOhwLi%2B5AdQWfOGG8qmipV9iRLcIWiWxgjN4YtqSYjo6371UfdR6vpesWFNqWbFmthVReqLspbSlHB7eOxxbxLb%2FxsqXhpG2%2FRhUzidgP%2FkjcvfbtS2Kwb5ZLlU3xygLdhlH4%2BTVjppUEuPBck5%2B2I3Xi0LlTCACg35MnogNs9xMISuUB7dqnfT8gjHwLtDy1vADUYXHWNcGM4qmaPo%2FZYNle8VxCx6G4%2FJE%2BBhJyh9fVyKbmNzk5lP0%2Fa11GC111xaq12K%2FiSP%2BUv1yM%2FxB3uXVol7wue0%2BLt9Y7YgavH7%2BVeU43tfj6tYSEd4MkhEOMmwRdA9xLoLIV2khXRqTk%2BV853BZSVXTtJX%2FhZa1dX565FeaPPUfzj8z8OMh2VEpmoj07%2FhQBM1ZKpNZtiCK%2BmejI1qtAiu3UtyRQ6o4E3%2B27gg1PylN%2FhFSuF7Ler016B%2B%2FMJ3V1aeU2T2A5yaydPG6Of96Y8bR1qbss9JLvM204cHOXIma3SxFeDVmCaD3kGGAnZPSTwEt0MPSeq8EGOqUBCy1nD5O%2FS7qbc7Mg9i5LXGRQm%2F5x6TMMibiryt%2FuPh0tmEcjL52ro3xK1sVEUPPA9CHbL3TBuV3pxfvytRNMeC7s0i1HNur9ntxl1Dfg3zXBB8q%2B%2BjU%2B8%2F%2FpbFVYdzF3edQw8J8EiRIE%2BtTzlzjE6GuplfV2lVfXKzNEsbiWQrMTdzdLStWn3GSLvRjbclK2vCnUkrmEiWim2pdUdQ%2BsJFaALAv6&X-Amz-Signature=547b39163af6e011401dc41737ec0fe9665c995aa2b6a827ee8cbb2cd53d9408&X-Amz-SignedHeaders=host&x-id=GetObject",{"id":552,"name":553,"image":11028,"linkedin":555,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Ff8f82a79-9d41-4302-b1a5-37882985167f\u002Fnicoz_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XQTI4TQI%2F20250519%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20250519T070420Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEM%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJIMEYCIQDRDUDTAmYIqio%2FmaWQri1FF%2F6Z4KBY1PaxOyZbgHhQSgIhAOb9jlC7fm3qoH3eDFj%2BPxZ15AazzVgEBoJH5jIqcLiDKogECIj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNjM3NDIzMTgzODA1IgyjWT7Y4DuO7PvWlMIq3AMUwL5De4lYqqfwLM7fZGLxoh1DyMk6FbV3bBODlECw24G0WCNIt9aQVASmXQCRWv%2F5ohii%2F0FJGjDmIYPx3woYclNVyHLHkfNcX%2FydeEGXDHDzzL%2BAuREI270tWNvBOiinUU%2BBEpyjcMSsgfCybsLZKHpIr%2BPc%2FIzj%2Bt7VUMCQGHLKWWXXJ%2Fb7rtsh55oLR0oeDa3XjE1FepXx9SbdiUtD%2BraseErNeAvR%2BOzUgrMBS6lvdJA6K4TiaVyxTyQspDxP0Z0JgIjYu6s9Zuele8SZaa0mAos%2F7tE2FI3J8zI2%2B3oueeslNr3fpYjKSGv8SIVqSOejK6XkbGhwSpfpGXCmaT55MIgwTVbo0fvQmhIwvXXDKJctfROqrrAyTxJupW%2F4ueUf2GY3GoNWDoV9n8Rj2NDav2J8nDRVVElMAzsanXqzDC5Fs7%2BwmTpUoC8j4kOxRcYqvdTRcBXrnsJOLUx857PAptI3uTul%2Fo65In4d751kK%2FIhVw5A6xOHejESjKpimz1dEDgqUPu56z9ETCFahyat5SEKn1Ox8VEK8%2BZazw1FTlJwQVgeSLioZvXDuZetaa3HaMYJ5FDZrm4FZprisT58%2F5o6%2BS%2BwN%2BP1oqvB1xHr%2F6Elya4khKVmfTDDnavBBjqkAZMWTec8zswzxdFRb3PuwsLPiUxj%2FFvWNesvBoWpkSV5qEhcB13ffmkTz8DqZdMYP2P44zQCRFF5ZVP1zHpWJWQbUmOsIsJgC7DFQtl9u8Tm1eZmCjn%2FYmKSLBlH6cPzyLwgxB75oneLvDtO6d%2B9fuh2taZGzEvS5fuK1uunlQwQjmV%2B5ekg3X37gxFLJcCaWo6fO9xfJqmxL4ZqxNArAW3b7hbZ&X-Amz-Signature=2095f8495e05ff76739c85445fcee827c52e27c5e32bf6b2a08510539e5a1c40&X-Amz-SignedHeaders=host&x-id=GetObject",{"title":1252,"description":11019},"blogs\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex\u002Findex",[565,566,151,568,150,567],"ycA5vXwxJYkyDRph3MaKxn750vp-QRZR-YiTh8WN_No",{"id":11034,"title":11035,"alt":11036,"authors":11037,"body":11044,"date":11189,"description":11190,"extension":130,"image":131,"meta":11191,"navigation":133,"ogImage":131,"path":11192,"published":133,"reviewers":11193,"seo":11196,"stem":11197,"tags":11198,"__hash__":11201},"blogs\u002Fblogs\u002F2025-10-20-cloud-nord-une-aventure-tech-collective-et-engage\u002Findex.md","Cloud Nord: une aventure tech, collective et engagée","image de l’événement cloud nord qui aura lieu le 23 octobre 2025 à l’université catholique de Lille",[11038,11039,11041,11042],{"id":359,"name":360,"image":374,"linkedin":362,"x":363},{"id":142,"name":143,"image":11040,"linkedin":145,"x":14},".\u002Fassets\u002Fauthor-emmanuelle-gouvart.webp",{"id":552,"name":553,"image":905,"linkedin":555,"x":14},{"id":354,"name":355,"image":11043,"linkedin":357,"x":14},".\u002Fassets\u002Fauthor-paul-alexandre-chrtien.webp",{"type":16,"value":11045,"toc":11180},[11046,11049,11055,11058,11061,11067,11070,11073,11076,11079,11085,11088,11091,11094,11097,11103,11106,11109,11112,11115,11122,11128,11131,11134,11137,11140,11146,11149,11152,11155,11161,11164,11167,11170,11173],[909,11047,11035],{"id":11048},"cloud-nord-une-aventure-tech-collective-et-engagée",[29,11050,11052],{"id":11051},"cloud-nord-une-aventure-tech-collective-et-engagée-1",[414,11053,11054],{},"Cloud Nord : une aventure tech, collective et engagée",[19,11056,11057],{},"Organiser un événement tech de 250 à 500 personnes, bâtir un programme de conférences exigeant, coordonner une dizaine de bénévoles, assurer la logistique, la communication, le sponsoring… et faire tout cela bénévolement, en parallèle d’un emploi à temps plein ? C’est le pari que relève chaque année l’équipe organisatrice de Cloud Nord.",[19,11059,11060],{},"Ce rendez-vous devenu incontournable dans l'écosystème tech de Lille, dédié au Cloud et DevOps, est né en 2020 d’une envie simple mais ambitieuse : créer ce qui n’existait pas encore.",[29,11062,11064],{"id":11063},"une-initiative-née-du-terrain-pour-le-terrain",[414,11065,11066],{},"Une initiative née du terrain, pour le terrain",[19,11068,11069],{},"En pleine période de confinement, Nicolas Zago, aux côtés de Maxime Deroullers, Emmanuelle Gouvart et Paul-Alexandre Chrétien (aujourd’hui tous chez HoppR), lance l’idée de créer un événement local, à la fois technique, exigeant, et humain.",[19,11071,11072],{},"« Il existait déjà des événements comme le DevFest (aujourd'hui DevLille) ou AgiLille, qui parlent eux aussi à la communauté tech. Mais aucun ne mettait vraiment le focus sur les enjeux Cloud et DevOps. Alors on a eu envie de créer notre propre rendez-vous, centré sur ces thématiques. » explique Nicolas, CEO fondateur d’HoppR.",[19,11074,11075],{},"La première édition a lieu en ligne, en octobre 2020. Tout est à créer : une association loi 1901, une identité visuelle, un site web, un compte bancaire, une billetterie. Mais l’énergie collective est là. Et surtout, la communauté répond présente.",[19,11077,11078],{},"Depuis, l’événement a grandi, s’est installé à Euratechnologies, puis à l’Université Catholique de Lille en 2025, sans jamais renier son ambition initiale : un programme sérieux dans une ambiance conviviale.",[29,11080,11082],{"id":11081},"un-programme-pensé-pour-et-par-la-communauté-tech",[414,11083,11084],{},"Un programme pensé pour et par la communauté tech",[19,11086,11087],{},"En 2024 Cloud Nord accueille près de 500 participants. L'équipe reçoit en moyenne une centaine de propositions de talks. « Cette année, en 2025, on en a reçu 117, et on en sélectionne une vingtaine » explique Emmanuelle. « On a une plateforme sur laquelle les membres de l’asso et des bénévoles peuvent voter, noter, discuter des propositions. On choisit les sujets qui nous semblent les plus pertinents, utiles, inspirants.»",[19,11089,11090],{},"Le programme est conçu avec une attention particulière à la diversité des sujets, des formats et des profils de speakers. La moitié viennent de la région, l’autre moitié d’ailleurs. Certaines interventions sont très techniques, d’autres plus narratives, toutes partagent une même exigence : transmettre quelque chose de concret.",[19,11092,11093],{},"Dès les premières éditions, les organisateurs ont fait le choix d’un processus de sélection transparent et rigoureux, en s’appuyant sur un comité ouvert à des membres de différentes entreprises et horizons. Objectif : garantir une notation impartiale, éviter toute forme de copinage, et s’assurer d’un événement \"fair\" et de qualité. C’est aussi ce qui a permis de bâtir la fidélité du public au fil des années.",[19,11095,11096],{},"« Ce que les gens nous disent souvent, c’est : j’ai appris plein de choses, j’ai rencontré des gens, j’ai pu poser mes questions » souligne Paul-Alexandre. « Et c’est exactement ce qu’on veut. On n’est pas là pour faire du chiffre, mais pour créer un moment utile. »",[29,11098,11100],{"id":11099},"un-engagement-qui-transforme-aussi-les-organisateurs",[414,11101,11102],{},"Un engagement qui transforme aussi les organisateurs",[19,11104,11105],{},"Au fil des années, les bénévoles ont changé, l’équipe s’est renouvelée, mais le noyau dur reste. Et l’implication dans Cloud Nord est aussi une expérience fondatrice pour celles et ceux qui donnent de leur temps.",[19,11107,11108],{},"Emmanuelle, DRH chez HoppR, voit dans l'organisation de Cloud Nord une activité stimulante et pleinement compatible avec sa vie professionnelle et personnelle. Elle s’occupe notamment du marketing, de la communication et de l’organisation globale de l’événement. « Cet engagement me permet d'être en prise directe avec les enjeux du terrain, d'affiner ma compréhension des pratiques et des attentes des profils tech. Pour recruter efficacement, pour accompagner les carrières, il faut comprendre en profondeur les réalités des métiers. Participer à cet événement me donne une longueur d'avance et me rend plus pertinente dans mon rôle. »",[19,11110,11111],{},"Pour Paul-Alexandre, Senior Cloud Engineer chez HoppR, c’est aussi une façon d’incarner l’esprit craft. Sur les dernières éditions, il a pris en charge plusieurs aspects techniques de l’événement : gestion de la plateforme de billetterie, déploiement de l’application de scan des billets, intégration des outils pour les sponsors afin qu’ils puissent garder le contact avec les visiteurs, mise en ligne et planification des replays sur YouTube, ainsi que le suivi de la plateforme de notation des talks.",[19,11113,11114],{},"« On veut montrer que dans le Nord, on sait faire des choses bien. Ce n’est pas juste un événement, c’est aussi un outil de partage, d’apprentissage, de fierté. Et au fond, c’est très gratifiant de voir quelque chose grandir, année après année. »",[19,11116,11117,11118,11121],{},"Quant à Maxime, Architecte Cloud\u002FDevOps et Agency Leader chez HoppR, il a depuis contribué à la création de ",[414,11119,11120],{},"Cloud Alpes à Lyon",", sur le même modèle : communautaire, qualitatif, accessible.",[29,11123,11125],{"id":11124},"une-vision-alignée-avec-lesprit-hoppr",[414,11126,11127],{},"Une vision alignée avec l'esprit HoppR",[19,11129,11130],{},"L’événement Cloud Nord reflète certaines valeurs profondes que l’on retrouve chez HoppR : le goût du partage, l’engagement dans les communautés, la volonté de faire émerger des talents. Plusieurs membres de l’équipe organisatrice travaillent chez HoppR, et l’événement est naturellement en phase avec ce que l’entreprise cherche à incarner : une culture d’exigence, d’échange, et d’ancrage local.",[19,11132,11133],{},"C'est aussi une mise en pratique concrète de ce que Nicolas encourage au sein de ses équipes : devenir speaker, raconter ses expériences projets, transmettre ce qu'on apprend et apprendre en retour. Aller à la rencontre de la communauté tech pour contribuer à un écosystème qui progresse collectivement. Participer à Cloud Nord, c’est donc aussi prolonger cet engagement dans un cadre plus large, au bénéfice de tous.",[19,11135,11136],{},"Par ailleurs, la mise en lumière de profils, les billets sponsorisés destinés à des publics sous-représentés, les choix de prestataires et partenaires locaux, participent d’une même logique : celle d’un événement qui a du sens.",[19,11138,11139],{},"Depuis trois ans, l’équipe a aussi lancé le \"Tremplin des speakers\", une initiative pour faire émerger de nouveaux talents. Inspiré d’autres formats, mais inédit dans la région, ce mini-événement repose sur un principe simple : les talks présentés sont soumis à un vote, et les mieux notés accèdent ensuite à des scènes comme Cloud Nord, DevLille ou d’autres conférences partenaires. Une manière de créer du renouvellement, de faire circuler les idées et de valoriser les nouvelles voix.",[29,11141,11143],{"id":11142},"zoom-sur-lédition-2025-concentrée-engagée-toujours-gourmande",[414,11144,11145],{},"Zoom sur l'édition 2025 : concentrée, engagée, toujours gourmande",[19,11147,11148],{},"L'édition 2025 s'annonce particulière. Dans un contexte économique moins favorable pour les sponsors, l'équipe a fait le choix d'un format plus resserré, mais sans rien concéder à la qualité. Nouveau lieu (l’Université Catholique de Lille), nouveau traiteur (avec options végé\u002Fvegan et mignardises locales), sponsoring finalisé de justesse… Tout est prêt.",[19,11150,11151],{},"Le programme est en ligne, la billetterie ouverte, et plusieurs places \"diversité\" sont offertes grâce à Exotec, TechSys et Worldline. Comme toujours, ce sont les bénévoles qui ont constitué un programme pointu et varié, parmi lesquels Nicolas cite volontiers quelques coups de cœur : \"K8sGPT\", \"Dapr et Microcks\", \"Docker : plus qu’un choix, une nécessité\"...",[19,11153,11154],{},"Et bien sûr, la pause muffins du matin est de retour, avec ses gaufres, financiers et madeleines locales. Et cette année, petite nouveauté : après avoir mis à l'honneur des brasseurs locaux (tradition bien ancrée dans le Nord), l'événement accueillera pour la première fois un vigneron du Nord : le Domaine du Jeune Bois, qui viendra faire déguster ses cuvées lors de l'after. Une façon de montrer que le terroir régional sait aussi réserver des surprises.",[29,11156,11158],{"id":11157},"une-aventure-collective-qui-continue",[414,11159,11160],{},"Une aventure collective qui continue",[19,11162,11163],{},"Cloud Nord ne serait rien sans la dizaine de bénévoles qui s’impliquent chaque année, en plus du noyau fondateur. Leur engagement, souvent discret mais essentiel, est une part intégrante de la réussite de l'événement. Ils et elles méritent toute la reconnaissance.",[19,11165,11166],{},"Voici les bénévoles 2025 : Emmanuelle Gouvart, Maxime Deroullers, Nicolas Zago, Julien Wittouck, Alexandre Vandekerkhove, Camille Dagbert et Pierre Bourgeois.",[19,11168,11169],{},"« Ce qu’on souhaite, conclut Nicolas, c’est que les gens repartent avec des idées, des contacts, l’envie de creuser un sujet. Et surtout, le sentiment d’avoir passé une journée qui compte. »",[19,11171,11172],{},"Chaque année, Cloud Nord cherche à progresser, à innover, à se renouveler dans ses formats, ses thématiques, ses collaborations. C’est aussi cela, Cloud Nord : un lieu où la technique rencontre l’engagement, et où la communauté se construit, une édition après l’autre.",[19,11174,11175,11176],{},"Pour en savoir plus sur l'événement : ",[50,11177,11178],{"href":11178,"rel":11179},"https:\u002F\u002Fcloudnord.fr\u002F",[54],{"title":116,"searchDepth":117,"depth":117,"links":11181},[11182,11183,11184,11185,11186,11187,11188],{"id":11051,"depth":117,"text":11054},{"id":11063,"depth":117,"text":11066},{"id":11081,"depth":117,"text":11084},{"id":11099,"depth":117,"text":11102},{"id":11124,"depth":117,"text":11127},{"id":11142,"depth":117,"text":11145},{"id":11157,"depth":117,"text":11160},"2025-10-20T13:06:36.456Z","  Organiser un événement tech de 250 à 500 personnes, bâtir un programme de conférences exigeant, coordonner une dizaine de bénévoles, assurer la logistique, la communication, le sponsoring… et faire ",{},"\u002Fblogs\u002F2025-10-20-cloud-nord-une-aventure-tech-collective-et-engage",[11194],{"id":142,"name":143,"image":11195,"linkedin":145,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc88f5dfa-16db-4e6f-acf1-34dd80ee8766\u002Femma_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466RBYBRSPA%2F20251020%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20251020T130636Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEUaCXVzLXdlc3QtMiJHMEUCIHrrOH5PrR6eJ5K951yaAB2s7WnyT9XUk%2BDmLGz0kUM%2BAiEAivskQY9erpOV%2BJtsawuVTTDCacWKPydGLUqLtFIN4DAqiAQI7v%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCJj5MaF6y%2BbQ4eRgCrcA0BBiH1dQsnD7wgbRRU48aQFbt1UDJ3dF2JTwPFDT2%2BguD8BQqF0y2%2BFyEphmjUHKntIBFa4%2BbP1p7Oo3v%2BUXkBMi57XL5K%2BDjV%2B%2B5B8icTrVXAAltMZtSYhNDpNo2IZJgp4ErfUJHD2H1DZ0a7hZAv00Jz2Vb8qshpWMfd9dl4Hj0t1RsaDvcqC3TtHua%2Fn%2FLZ%2FyqMMfO5vSeR8AdSk9T44t9CtQ2en2K3vZfVN4odSpmaWJ8O3E3WSOzCESJkCe4L%2FF84H%2FZLZF9w%2BMFMr3dtSmTnuwogg04%2FOioZZIzHh2AF6jUCnx%2F0wv621ii7y6kFNgYF1XcVZMa6%2Fa9zGhmKge4r6sg5MNiLGzdOE5Kg145eH1U96RNxTf291zTlN33yJ9jn4zQl%2BGTMCBN7pKGaiWgPlNnGIiTwW%2F89sOcxNeMjawdLjYtNvifHxy3X8hVYKLmPaZaSh%2B5eUp%2BKZQxWF8IpsvzX6MA238HE9jryFemRsaFiZARF8CFww39z56E8Q%2Bfi%2Ff0d3dwZj9YAG7vSLwQjYxZY4TPD3uMkTS7v7AkElBowCePLzeQgIDif6pk%2BpGeEXWj743qZllYmGJRkuDuBDqvd%2BkWdPQlzs6TdvYCblJFfc38ceFqgbMOXY2McGOqUBTWwA1aDWA4L35659Zu6%2B0jM7QIYDtSpaZIJvCk9NcuC7rTxkHwe2lSSj%2B4O2ljWqaYbGgC6fPTZDWkoajpQRToFw6GXb9RCnHr%2BLXijpK%2FJAN8VXWy7wEh0S6uVDX%2BTSWnE0fKFftlHbIpiBdjWRUj2g3h0mM2MYOy9K7K9O3QU15MmujVx7SO4V5Ij934y55twjkgxJpGXTTOCyHFW7zXLII9dg&X-Amz-Signature=4feedc6123dd961c67097e83217e71867cff0a27a1959fb9942d7fbe53a47963&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",{"title":11035,"description":11190},"blogs\u002F2025-10-20-cloud-nord-une-aventure-tech-collective-et-engage\u002Findex",[11199,151,11200],"événement","rex","0oP9lUxc5BshFRQyLcGQUGiA3r_tZLUbt3Y-FeI_ae0",{"id":11203,"title":11204,"alt":11205,"authors":11206,"body":11213,"date":11517,"description":11518,"extension":130,"image":131,"meta":11519,"navigation":133,"ogImage":131,"path":11520,"published":133,"reviewers":11521,"seo":11533,"stem":11534,"tags":11535,"__hash__":11541},"blogs\u002Fblogs\u002F2025-12-23-alors-ctait-comment-ce-premier-devfest-lyon-la-suite\u002Findex.md","Alors ? C’était comment ce premier DevFest Lyon ? (la suite)","L’équipe HoppR au Devfest lyon",[11207,11208],{"id":359,"name":360,"image":374,"linkedin":362,"x":363},{"id":11209,"name":11210,"image":11211,"linkedin":11212,"x":14},"2c0f4462-cd38-80e0-8142-c3de50d521c1","Anaïs Cousin",".\u002Fassets\u002Fauthor-anas-cousin.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fana%C3%AFscousin\u002F",{"type":16,"value":11214,"toc":11505},[11215,11230,11236,11243,11249,11254,11259,11264,11270,11286,11293,11310,11316,11326,11329,11349,11352,11355,11358,11362,11369,11375,11378,11381,11393,11397,11400,11403,11413,11417,11420,11423,11427,11440,11443,11449,11455,11458,11465,11472,11483,11486,11489,11500],[19,11216,11217,11218,11223,11224,11229],{},"Pour faire suite à ",[50,11219,11222],{"href":11220,"rel":11221},"https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2025-12-02-alors-ctait-comment-ce-premier-devfest-lyon",[54],"l’article de Michaël"," sur la très bonne première édition du ",[50,11225,11228],{"href":11226,"rel":11227},"https:\u002F\u002Fdevfest.gdglyon.com\u002F",[54],"DevFest Lyon",", nous vous présentons deux autres talks auxquels nous avons pu assister et qui nous ont marqué.",[29,11231,11233],{"id":11232},"chaos-monkey-et-si-netflix-révolutionnait-aussi-la-résilience-de-vos-applications",[414,11234,11235],{},"Chaos Monkey : et si Netflix révolutionnait aussi la résilience de vos applications ?",[19,11237,11238],{},[1032,11239,11240],{},[414,11241,11242],{},"Écrit par Anaïs",[19,11244,11245],{},[66,11246],{"alt":11247,"src":11248},"Illustration style synthwave aux néons violets montrant un singe holographique débranchant un câble serveur, ouvrant une faille numérique glitchée. Au premier plan, des ingénieurs surveillent calmement la situation, protégés par un bouclier énergétique bleu. Titre : CHAOS MONKEY.","\u002Fcontent-assets\u002F2025-12-23-alors-ctait-comment-ce-premier-devfest-lyon-la-suite\u002Fassets\u002Fimg1.webp",[19,11250,11251],{},[1032,11252,11253],{},"En ce début décembre 2025, impossible d’y échapper : la sortie de la saison 5 de Stranger Things fait vibrer les réseaux.",[19,11255,11256],{},[1032,11257,11258],{},"Mais saviez-vous que Netflix, en plus de captiver des millions de spectateurs, a aussi révolutionné la façon dont on teste la robustesse des applications ?",[19,11260,11261],{},[1032,11262,11263],{},"Rencontre avec le Chaos Monkey, un outil né dans les coulisses du géant du streaming, et qui pourrait bien sauver votre infrastructure du prochain “Démogorgon” technologique…",[87,11265,11267],{"id":11266},"quand-netflix-inspire-la-résilience-it",[414,11268,11269],{},"Quand Netflix inspire la résilience IT",[19,11271,11272,11275,11276,11275,11283],{},[414,11273,11274],{},"Lors du DevFest Lyon 2025,"," ",[50,11277,11280],{"href":11278,"rel":11279},"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Ferwan-le-tutour\u002F",[54],[414,11281,11282],{},"Erwan Le Tutour",[414,11284,11285],{},"a présenté le Chaos Engineering, une pratique inspirée de Netflix.",[19,11287,11288,11289,11292],{},"L’idée ? ",[414,11290,11291],{},"Provoquer des pannes contrôlées"," (coupures réseau, latences, arrêts de serveurs) pour détecter les faiblesses d’un système avant qu’elles ne deviennent critiques.",[19,11294,11295,11296,11299,11300,11303,11304,11309],{},"À l’origine, Netflix utilisait le ",[414,11297,11298],{},"Chaos Monkey",", un outil interne pour tester la résilience de son infrastructure de production face à des millions de requêtes. Aujourd’hui, des solutions comme le ",[414,11301,11302],{},"Chaos Monkey for Spring Boot"," permettent à tous les développeurs d’intégrer cette approche, en simulant des scénarios chaotiques pour renforcer leurs applications. (",[50,11305,11308],{"href":11306,"rel":11307},"https:\u002F\u002Fjavaoperatorsdk.io\u002Fdocs\u002F",[54],"Cliquez ici",", pour les curieux!)",[87,11311,11313],{"id":11312},"pourquoi-adopter-le-chaos-engineering",[414,11314,11315],{},"Pourquoi adopter le Chaos Engineering ?",[19,11317,11318,11319,11322,11323,388],{},"Les systèmes modernes sont de plus en plus complexes, distribués et interconnectés. Dans ce contexte, la question n’est plus ",[1032,11320,11321],{},"si"," une panne va survenir, mais ",[1032,11324,11325],{},"quand",[19,11327,11328],{},"Le Chaos Engineering permet de :",[277,11330,11331,11337,11343],{},[280,11332,11333,11336],{},[414,11334,11335],{},"Détecter les points de fragilité"," avant qu’ils n’impactent les utilisateurs.",[280,11338,11339,11342],{},[414,11340,11341],{},"Améliorer la réactivité"," des équipes en situation de crise.",[280,11344,11345,11348],{},[414,11346,11347],{},"Renforcer la confiance"," dans l’infrastructure, même face à l’inattendu.",[19,11350,11351],{},"Malheureusement personne n’est à l’abri, comme l’attestent les événements récents (AWS\u002FCloudfare)",[19,11353,11354],{},"Alors, prêt à lâcher un Chaos Monkey dans votre environnement pour en tester la solidité ? 🐒💥",[19,11356,11357],{},"Pour conclure cet article : bien moins technique que l’excellent article de Michael (et que celui qui arrive juste après !), ce retour reflète surtout mon regard côté business. Même si je ne suis pas développeuse, c’est justement ce genre de conférences qui me permet de mieux comprendre les enjeux tech du quotidien de mes collègues.",[29,11359,11361],{"id":11360},"développer-un-opérateur-kubernetes-en-java-challenge-accepted","Développer un opérateur Kubernetes en Java : Challenge Accepted !",[19,11363,11364],{},[1032,11365,11366],{},[414,11367,11368],{},"Écrit par Maxime",[19,11370,11371],{},[66,11372],{"alt":11373,"src":11374},"Illustration isométrique style tech-fantasy. Une développeuse injecte une énergie lumineuse orange, générée par du code Java et Quarkus, dans une machine Kubernetes géante en forme de gouvernail qui organise des conteneurs logiciels. Au sol, un panneau 'GO LANGUAGE ONLY ZONE' est brisé. Le titre en haut indique : 'JAVA OPERATOR: CHALLENGE ACCEPTED","\u002Fcontent-assets\u002F2025-12-23-alors-ctait-comment-ce-premier-devfest-lyon-la-suite\u002Fassets\u002Fimg2.webp",[19,11376,11377],{},"Si vous travaillez dans l'écosystème Cloud Native, vous avez forcément ressenti cette pression implicite : pour faire du Kubernetes sérieusement, il faut faire du Go. C'est le langage de l'orchestrateur, c'est le langage de la plupart des outils, et par extension, on finit par croire que c'est le seul choix viable pour étendre son cluster.",[19,11379,11380],{},"J'ai assisté à une conférence qui tord le cou à cette idée reçue, et je pense qu'elle mérite votre attention si votre équipe est majoritairement composée de développeurs Java.",[19,11382,11383,11384,9638,11387,11392],{},"Dans son talk ",[414,11385,11386],{},"\"Développer un opérateur Kubernetes en Java, challenge accepted !\"",[50,11388,11391],{"href":11389,"rel":11390},"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fphilippartstephane\u002F?originalSubdomain=fr",[54],"Stéphane Phillipart"," s'attaque à un sujet souvent intimidant : les Opérateurs.",[87,11394,11396],{"id":11395},"pourquoi-ce-talk-est-important","Pourquoi ce talk est important",[19,11398,11399],{},"Pour rappel, un opérateur est ce qui permet d'automatiser la gestion d'applications complexes dans Kubernetes. Jusqu'à récemment, la documentation et les exemples étaient quasi exclusivement en Go. Pour une équipe Java, cela voulait dire : apprendre un nouveau langage et une nouvelle toolchain juste pour écrire de l'outillage.",[19,11401,11402],{},"Ce que Stéphane démontre brillamment, c'est que cette barrière n'a plus lieu d'être.",[19,11404,11405,11406,11412],{},"Le cœur de sa présentation repose sur le ",[50,11407,11409],{"href":11306,"rel":11408},[54],[414,11410,11411],{},"Java Operator SDK",". Loin d'être une solution de bricolage, il montre que l'outillage est désormais mature. Ce que j'ai particulièrement apprécié dans sa démarche, c'est le pragmatisme. Il ne s'agit pas de faire du Java pour le plaisir de faire du Java, mais de capitaliser sur les compétences existantes des équipes. Pourquoi forcer des experts JVM à écrire du Go médiocre alors qu'ils pourraient écrire du code Java robuste et testable ?",[87,11414,11416],{"id":11415},"de-la-théorie-au-code","De la théorie au code",[19,11418,11419],{},"La conférence n'est pas qu'une suite de slides théoriques. On passe rapidement au concret avec du live coding. On y voit la création d'un opérateur, la gestion de la boucle de réconciliation (le cœur du réacteur de Kubernetes) et le déploiement.",[19,11421,11422],{},"Il aborde aussi implicitement un point qui fait souvent peur aux Ops : la lourdeur du Java. En combinant le SDK avec des frameworks modernes comme Quarkus (souvent utilisé pour la compilation native), on obtient des opérateurs légers, rapides au démarrage et peu gourmands en mémoire. L'argument de la performance du Go ne tient plus vraiment la route face au Java moderne.",[87,11424,11426],{"id":11425},"mon-avis","Mon avis",[19,11428,11429,11430,11435,11439],{},"Si vous êtes un développeur ou développeuse Java et que vous regardez Kubernetes comme une boîte noire réservée aux Ops ou aux développeurs Go, prenez une heure pour regarder ce talk disponible sur ",[50,11431,11434],{"href":11432,"rel":11433},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=1GUvH3zDsDA&pp=ygVDRMOpdmVsb3BwZXIgdW4gb3DDqXJhdGV1ciBLdWJlcm5ldGVzIGVuIEphdmEgOiBDaGFsbGVuZ2UgQWNjZXB0ZWQgIQ%3D%3D",[54],"Y",[50,11436,11438],{"href":11432,"rel":11437},[54],"ouTube"," via d’autres conférences.",[19,11441,11442],{},"Il dédramatise complètement le développement système sur Kubernetes. C'est une excellente ressource pour convaincre votre CTO ou votre Lead Tech qu'il est possible d'industrialiser vos déploiements sans changer toute votre stack technique.",[29,11444,11446],{"id":11445},"en-conclusion-linnovation-se-partage-surtout-au-devfest-lyon",[414,11447,11448],{},"En conclusion : l’innovation se partage, surtout au DevFest Lyon !",[19,11450,11451,11452],{},"Notre participation à cette première édition du DevFest Lyon a été une véritable source d’inspiration. Entre le Chaos Engineering, qui nous rappelle que la résilience se construit en osant tester nos limites, et la démonstration que Java a toute sa place dans l’écosystème Kubernetes, ces conférences ont confirmé une chose : ",[414,11453,11454],{},"l’innovation naît souvent là où on ne l’attend pas.",[19,11456,11457],{},"Chez HoppR, nous sommes convaincus que partager ces retours d’expérience, ces outils et ces bonnes pratiques est essentiel pour faire progresser toute la communauté tech.  C’est pourquoi nous avons mis en place une véritable culture de l'apprentissage continu.",[19,11459,11460,11461,11464],{},"En interne, cela se traduit par nos ",[414,11462,11463],{},"Maker Days"," : des journées dédiées où nos consultant.es sortent de la production pour tester de nouvelles technos (comme ce fameux Chaos Monkey !), prototyper ou approfondir des concepts complexes. C'est notre laboratoire R&D, et c'est ce qui permet à nos équipes de rester à la pointe.",[19,11466,11467,11468,11471],{},"Mais nous sommes convaincus que le savoir ne doit pas rester cloisonné. Nous avons donc transformé ces retours d’expérience et cette expertise terrain en un ",[414,11469,11470],{},"catalogue de formations concret et pragmatique",". Que vous soyez une entreprise cherchant à faire monter vos équipes en compétences ou un développeur avide d'apprendre, nous partageons ce que nous maîtrisons au quotidien.",[19,11473,11474,9312,11477],{},[414,11475,11476],{},"➡️",[50,11478,11480],{"href":1370,"rel":11479},[54],[414,11481,11482],{},"Découvrez nos programmes de formation HoppR",[19,11484,11485],{},"Alors, prêt à libérer votre propre Chaos Monkey ou à développer votre premier opérateur Kubernetes en Java ?",[19,11487,11488],{},"N’hésitez pas à nous faire part de vos retours, de vos questions, ou à nous rejoindre pour en discuter lors de nos prochains événements !",[19,11490,11491,11275,11494,11275,11497],{},[1032,11492,11493],{},"Un grand merci à l’équipe du DevFest Lyon pour l’organisation de cet événement, et à tous",[1032,11495,11496],{},"les speakeuses",[1032,11498,11499],{},"et speakers pour leurs présentations inspirantes.",[19,11501,11502],{},[1032,11503,11504],{},"À l’année prochaine pour de nouvelles découvertes !",{"title":116,"searchDepth":117,"depth":117,"links":11506},[11507,11511,11516],{"id":11232,"depth":117,"text":11235,"children":11508},[11509,11510],{"id":11266,"depth":124,"text":11269},{"id":11312,"depth":124,"text":11315},{"id":11360,"depth":117,"text":11361,"children":11512},[11513,11514,11515],{"id":11395,"depth":124,"text":11396},{"id":11415,"depth":124,"text":11416},{"id":11425,"depth":124,"text":11426},{"id":11445,"depth":117,"text":11448},"2025-12-23T16:39:49.164Z","Pour faire suite à [l’article de Michaël](https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2025-12-02-alors-ctait-comment-ce-premier-devfest-lyon) sur la très bonne première édition du [DevFest Lyon](https:\u002F\u002Fdevfest.gdglyon.com\u002F)",{},"\u002Fblogs\u002F2025-12-23-alors-ctait-comment-ce-premier-devfest-lyon-la-suite",[11522,11527,11529,11531],{"id":11523,"name":11524,"image":11525,"linkedin":11526,"x":14},"70a8663a-742d-4937-a6d4-5cef079b12c8","Théo Lanord","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F53946b9e-3bb9-45bd-a8b4-429c51156179\u002FT04PC176TGB-U05EW3YF61Z-5e129f612df3-512.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466W4AXLVRW%2F20251223%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20251223T163948Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEYaCXVzLXdlc3QtMiJIMEYCIQDPnpGUn%2BqCpnFIqIGXJYm%2FKun2CwO%2FbkU43MWV3kn4ugIhAKSC4Vj6uKRG%2FQsbi35ldAUoJu3J%2BfVrpYehzOrAiUNdKv8DCA8QABoMNjM3NDIzMTgzODA1IgxYOnhHP8q1QNPcr9kq3AMQKG7RZkAyakc0hW8rdOKKYFwnri04Ycy4M2kPAP1zxZ4OAygqjWbe5fUytfCr%2BvqFCtuuoAh%2FbrIdduFm7FspNBpBTD%2BtJ1U%2BsU0c4maBvii7Kazur7y0ZrkYDtKZBHlzsP6KVQEJkFjZM8MPFQ0IxZl8u6eXEX1ZYAzbb91vpaJyFhh8sWhIrxK1QYnSFhNdlyLgl5sc7vN1zipqTj%2BFModWCOhTUuK5lHOKbyHB4ErulD8RKgspA%2BHz1b1ePM4vmEDt5EzjW%2BbY%2FOqQJp%2BiT9gERS0fRhn%2BSmYSZcUyZw8FzLUU9AuZTL%2BxABNx4A0sPjzHfHEX08Ck66%2F0B%2BlE1Sj1qoJlCM2mQXR9RU1eK1BnHDGMYy41HASbHKLetFPo7zXFk2AW6RAgAiXbvvoAl8NKrqJ4tscKivfT8nremJsHxemWNDgZaPf2Holdx8LHwV7CqfZ9j%2FLTf4q2vsbSqKN5ctxe9evJFapDOjU%2B6fdlyLXYrd9Cgu0I7qTXQID2Wk51QMsMwdAkPkS2QTf2xYgjfWgfsbXtv5NBJIycrJL4rkwNRs03UUD3XgWyEQQ67F6fiTsm3GaXnKaCMrnXZCiwd6eXFE%2F9TTJqMvQRjcNh7TkiqdIMjHa%2FXDC8vqrKBjqkASyWZD3FD4b6CgVchADndQ37fY59BuPUOM8%2F83rNgyLCA%2FyItYB9bNyO%2FbGgmW6WbFlgmFdTlSAzP8t6u%2FDNfHvn2PTWp7FSjnRRK6FvFKQSQvIk%2B1EzEkJEYDg0%2BzmmUrSZsXbpKC77QuqQ0klW5aDR6GIu9P8Fti6rjXrRPRCeWDn9C4fz24VI%2FjrKLMnlgdyipLMinNsSvlyrdGnWWDN4K%2Fmz&X-Amz-Signature=4e276c2fda930baf8991e7206d80c6d9d9dcab8f47c8bfc8fbb35bd93848d9b0&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fth%C3%A9o-lanord\u002F",{"id":142,"name":143,"image":11528,"linkedin":145,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc88f5dfa-16db-4e6f-acf1-34dd80ee8766\u002Femma_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4666XAIVRTN%2F20251223%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20251223T163948Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEYaCXVzLXdlc3QtMiJGMEQCIEnuOAJUf2Rshe07mNIw0LrH9EpjYKRzEhhhnrv%2FiJL4AiBlBMKpY%2BOuKCkAtBj%2BuA5fIcjRdGBpguWngb9qHAq69ir%2FAwgPEAAaDDYzNzQyMzE4MzgwNSIM5Sf9fQcuCCRMo963KtwDVI0FP8okepoMVcy8fPdIC1JVqsKcYxvSllUIDvz3bVWZyIW0CCsx59p7dp3inN6GnbfUaJNtn9BElzJK9dBwcKzFutAx6xV8tE4s25a0VG1INlhJzwOGq%2FtE%2BGc3zl8WGZe2Mf4erdDFjsM20auMlhExfMB3fNlppYb%2Bs15wgKr%2BNmZzRN55ci65DlKR6OU6b%2F9n0NoODE5pGo1clLXMsbss5U51C1ROHUVJsZR6ZwY1Hqqwrq1Y722xXQzAetGDsdXGoFpiwmcWIJlEAldVpiCWgArYhi54vWNWjQVOgNjVsHl2gSl4dBoju%2FkNl3ijqRJlat0d3D1tVkAdsb2iRZiElHexwcVQlpx1qHeIXq0Rd5j0DQuvyAxj1ktuh92xWZNcM91W%2BfP2Gk3qNR1d0Olnw4i7R0rKQvEuDlDuWG6578afo7v1s125krKupL6nTUetdKU%2Fz3QXrmlrj7SZEXPhqZ%2FmvqLO7HFOOaFiFuqirixmhAW6Ha2pa5D5VHZKHsPVFT91xXNElJpOADSpSAhvZvcLjE94rK%2FF2NyvjxGS8lDyV7rS39WJ8VSq1A04RzYphSEYF3L21W2tBaGc5VIhyLpBB3V5YtrIHO6C3UwfwDPGb3MviRw8JxYwwb6qygY6pgG2MUSsukjvYCzXqgwgHF5KhJIkGs28W7phlzQm0icRuywpO2S%2BzHPuOOV9WIrq0hlzmQP5RkkImvr2533TECOiLPDi5t7k0SsXZ8q48g%2ByWx36uxniARZ7uhReOOjy1vYTRG6PhGEAffVnypy0YyJCo5zb8b0%2F%2F4fSj1OY3fvqxDa14rEJpgRHpvLQsMYtOA1JVm8RSta8mAivuf%2FFrabCN%2FfL4q%2FA&X-Amz-Signature=4a14b9fbd70617e2be2d0878b3392f914e0c912c875fe99c8fb653d2e132cb87&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",{"id":137,"name":138,"image":11530,"linkedin":140,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F82ebd0fe-de28-43f3-ab7b-0431af41baad\u002FPhoto_HoppR.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466TGENWUUW%2F20251223%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20251223T163949Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEYaCXVzLXdlc3QtMiJHMEUCIQDdbYlpqTUS3MHKXr294zzRuZ5yQznmEEbKsUbTKHxKwwIgbaNEO5L%2BsbyYJWP%2BXSsrT6p%2BQ8JHG5pVRE67vmA2SQQq%2FwMIDxAAGgw2Mzc0MjMxODM4MDUiDHyZQznaVyJGBMnPMSrcA0AqnPpDZeHzIFm5ctGDLP6MMk9oxka5WD9HcgCfxZhpbpJZbrvuspt8g8kWPyEBYVMJvTO7SMJvEQysNwGHm%2BlX%2FEgaKTzcPATTKFxtom8WP4YyTOHAhXYmV1PU43kUU32KZXQfDXeglBzNR3Nn7xxx0ewP82r02pcSdwkyQamIQ%2FfcqRDZ2nVtKi1Ghl%2B3dJ07BjYVe3frTc%2FxwqQxG6w%2FTisKdoxeAkplW8GRC8l6K6nmLOjpD%2F4dDthsFKvqOXI6z8NO3AwEjYO2wf6DoJD28PLSPtgaPDCSCdLULjlmWZMMeEXLYkSx5I6YCRXvl30uzPsia2pxCwag352B8aTcMNE3cN2nqmTmBTXJvYkau%2Fp0PBBObSgbHWqB3rlxe0VV%2Bf5lrWQiILnkMviSOf1b00LcSqoX8VSwYJKJWikH3Awrr5FPMZnOq%2F%2Bqyxm58Ibxb83hZT6JKIl8rbSBRfN%2F7K01krEffQv1xu5DhA91VlC15uwvFFdxGIKAVi%2Bt5sZh%2BXoIhQdKCX0U1fQ%2BL9q6%2BRfzsT4eERWe655piTwoSQQYWMNoeJxImF3zMS1b4D%2FUbQLUtxR7w%2Bomf1r4X76m%2FB3VM6UAgJl76pfHcDEuVCgUDx2GyNC2uh4TMMK%2BqsoGOqUBRe1GhYU7oRbpaObDN69zVFXh9zQjmAm0804TLzpDIlGwFgPAydmy7uAcmDHynkOrYrpo0Y5ejB%2BkSddGXtGWMX0Cj40u7CcS6D37%2FYAMOIX0VfQOOPPnVnrkS%2FgTKzvD%2BaL4ZUXQ3ePH9ueM4VgxnVBwkz6aglCUz4u11Pw6SAUQIz69Wb2I5OqdCd1JZZADIlBO8y1jb8TYV8HqLOVgk1%2F2HZR9&X-Amz-Signature=d2dfeaa7ca1b4ff8a41b6ed6783f396a5513ed9173bf5e9026a3a283f6ab1e2c&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",{"id":552,"name":553,"image":11532,"linkedin":555,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Ff8f82a79-9d41-4302-b1a5-37882985167f\u002Fnicoz_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466QHSO5NSN%2F20251223%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20251223T163948Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEYaCXVzLXdlc3QtMiJIMEYCIQDZnNiqwJP6%2BrX28Xzb2IJ0%2BVzaXNFUsPrqaZ967PZU%2FAIhANKWFV8toBQHdFYmnBVpBY4jP3vcGA5lFDozIUegTgfPKv8DCA8QABoMNjM3NDIzMTgzODA1IgzOsYpSA9QgtStzyKwq3AO0cbAzyrq%2FgkP18Y5TYaN1DJ1%2BFkrZMK1xm%2FASjOCnPbi1LJ%2FH6%2FxIKnUv%2FvjGKTd%2F1j17x7%2FA1XLAFyuPUd6GAdq%2Bm8vIyOTBiFyMuiIkxu4aqACChZmQDqI2ZuR1t1IokTUq2gTo5%2BALvQREnMT%2BDPTHFQkOTrsUSiyoZr6Otv5VQQL6H8eRHzZrOA5XvB75Gm9rCI1HZiig7AhHrsQ%2F%2FLBcVEPKvj7l9Vy%2FlGQ3iby4BcvzTHPD6cdLiqpyz3951P9JJsB%2FLY7QGu8CNaVtajNVRG%2BuVBKGG9DQNmASGjQ1RyizEFZtq%2F2s%2FtaqWBbGnjep9ApfglIkqyP2NwFn5zsKZVMpuC7N586lYjrQxgXCXjZt5%2BMU2SAgLyJL7zK9XD75ylVTkjJw1YBcnKjj%2BFS3iW6NpKcS0b62gjVjxQ1XFFmo5B%2BWnQCpiHa5Yn3aXFLk%2BZd4mNEB6X28YtYAxOzI1KTFMKCAENTvevFyW3xet5JSqFD%2B1eOVaJSSZray6a4jyo7DxGJgM4s6qtWYzZ%2F1%2BIUMaaE1nHGcX%2Bu5e7cdPTn39ofxY4xbtB9dzP7dTbViLUzgD2gEF0QGHCuIWexj4OfzvdoL0sbh5TyJKy2B8GLvb1C1ujt4CTCtvqrKBjqkASM8jkG%2BtIFYSWk8zpbN06aWBful2xBsKkm%2F5SMLnIs%2FScsfD5Ruqrq1%2F8DigO%2FRod2MlWhKFp9DI%2B8ea9E9HltSm6z6zC4bAQei6ZShQ8hodi3Ymx8vAWaBRznJC%2FxYlBp%2FL5wamxFNqlynpFieFzeDeqsSVdvVc7Ws7GIWk7tkT1fF0auFTQpIXwQhrS1qo7N7msdyjg1APpk%2Bt4ahP60bBKN3&X-Amz-Signature=d020731e6a1b744c7006df2f027f9ab49a03c5bb0efdbb6d5d8760772cb23471&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",{"title":11204,"description":11518},"blogs\u002F2025-12-23-alors-ctait-comment-ce-premier-devfest-lyon-la-suite\u002Findex",[11536,11537,11199,11538,11539,151,11540],"kubernetes","devfest","2025","java","veille tech","3nvslMeLl3YYAQrpXzL9yuAthKCweU7Nz46T0ykRK1M",{"id":11543,"title":11544,"alt":11545,"authors":11546,"body":11551,"date":11999,"description":12000,"extension":130,"image":131,"meta":12001,"navigation":133,"ogImage":131,"path":12002,"published":133,"reviewers":12003,"seo":12006,"stem":12007,"tags":12008,"__hash__":12009},"blogs\u002Fblogs\u002F2026-01-14-devbox-ou-comment-enfin-onboarder-un-dev-en-5min-chrono-sur-son-projet\u002Findex.md","Devbox, ou comment (enfin) onboarder un dev en 5min chrono sur son projet","Caisse à outils futuriste \"DEVBOX\" d'où émanent des outils virtuels et des logos de langages de programmation, posée sur un établi technologique avec un cube Docker lumineux.",[11547,11548,11550],{"id":354,"name":355,"image":11043,"linkedin":357,"x":14},{"id":11523,"name":11524,"image":11549,"linkedin":11526,"x":14},".\u002Fassets\u002Fauthor-tho-lanord.webp",{"id":359,"name":360,"image":374,"linkedin":362,"x":363},{"type":16,"value":11552,"toc":11988},[11553,11558,11561,11564,11570,11575,11592,11595,11598,11612,11616,11626,11629,11635,11645,11671,11674,11688,11692,11695,11698,11719,11722,11726,11729,11745,11749,11752,11773,11777,11780,11792,11795,11802,11805,11814,11818,11821,11824,11856,11862,11865,11868,11874,11917,11920,11978,11982,11985],[19,11554,11555],{},[414,11556,11557],{},"Le scénario est un classique du film d'horreur en entreprise.",[19,11559,11560],{},"C'est le \"Day 1\" d'un nouveau développeur. Il est motivé, son café est chaud, sa machine est prête. On lui donne l'accès au repo. Il clone. Il lance le projet.",[19,11562,11563],{},"Et là, le drame :",[19,11565,11566,11567],{},"🔴 ",[1032,11568,11569],{},"Error: Node version 18.x required (found 14.x).",[19,11571,11566,11572],{},[1032,11573,11574],{},"Error: libssl.so.1.1: cannot open shared object file.",[19,11576,11577,11578,11581,11582,9638,11585,9638,11588,11591],{},"S'ensuivent deux jours de \"bricolage\". On modifie le ",[1676,11579,11580],{},".zshrc",", on installe ",[1676,11583,11584],{},"nvm",[1676,11586,11587],{},"jenv",[1676,11589,11590],{},"pyenv",", on casse la config d'un autre projet... Le fameux \"purgatoire de l'environnement local\".",[19,11593,11594],{},"L'onboarding ne devrait pas être une cérémonie mystique. En 2026 ça devrait être un simple script. Surtout si l’on rapporte cela à l’échelle du nombre de développeurs et consultants avec une moyenne (ambitieuse) de 2 ou 3 jours à chaque démarrage. Que de temps perdu !",[19,11596,11597],{},"Et si le fichier de configuration de votre projet suffisait à installer tous les outils, sans la lourdeur de Docker ?",[19,11599,11600,11601,11275,11608,11611],{},"C'est la promesse de ",[50,11602,11605],{"href":11603,"rel":11604},"https:\u002F\u002Fwww.jetify.com\u002Fdevbox",[54],[414,11606,11607],{},"DevBox",[414,11609,11610],{},": une boîte à outils en ligne de commande qui transforme un simple fichier de configuration en un environnement de développement complet, isolé et natif.","  Lancé en 2022 par l'entreprise Jetify, le projet open-source connaît une adoption rapide et cumule déjà plus de 11K étoiles sur GitHub.",[29,11613,11615],{"id":11614},"devbox-la-puissance-de-nix-sans-la-douleur","DevBox : La puissance de Nix, sans la douleur",[19,11617,11618,11619,388],{},"Pour comprendre l'intérêt de DevBox, il faut d'abord saluer le moteur qui tourne en dessous : ",[50,11620,11623],{"href":11621,"rel":11622},"https:\u002F\u002Fnixos.org\u002F",[54],[414,11624,11625],{},"Nix",[19,11627,11628],{},"Nix est le Saint Graal de la gestion de paquets : il est purement fonctionnel, immuable et garantit qu'un paquet installé aujourd'hui sera identique au bit près dans 10 ans.",[19,11630,11631,11634],{},[414,11632,11633],{},"Le problème ?"," Nix est notoirement difficile à apprendre. Il demande de maîtriser un langage de configuration complexe et verbeux. C'est souvent un frein rédhibitoire pour les équipes qui veulent juste coder.",[19,11636,11637,11640,11641,11644],{},[414,11638,11639],{},"C'est là qu'intervient DevBox.","\nVoyez DevBox comme une \"télécommande simplifiée\" ou un ",[1032,11642,11643],{},"wrapper"," élégant.",[277,11646,11647,11657],{},[280,11648,11649,11652,11653,11656],{},[414,11650,11651],{},"Sans DevBox :"," Vous devez écrire des scripts ",[1676,11654,11655],{},".nix"," cryptiques pour configurer votre environnement.",[280,11658,11659,11662,11663,11666,11667,11670],{},[414,11660,11661],{},"Avec DevBox :"," Vous remplissez un simple fichier ",[1676,11664,11665],{},"devbox.json"," (aussi facile à lire qu'un ",[1676,11668,11669],{},"package.json",") et l'outil se charge de \"parler\" à Nix pour vous.",[19,11672,11673],{},"Maintenant que la barrière technique est levée, quelle est la différence d'expérience par rapport à Docker ? Utilisons une analogie simple :",[277,11675,11676,11682],{},[280,11677,11678,11681],{},[414,11679,11680],{},"Docker, c'est l'hôtel."," C'est standardisé, isolé, sécurisé. Mais vous n'êtes pas chez vous. Les fichiers sont montés via des volumes (lent), le réseau est une couche supplémentaire. C'est parfait pour la Production.",[280,11683,11684,11687],{},[414,11685,11686],{},"DevBox, c'est la Réalité Augmentée."," Vous restez chez vous (votre terminal natif, votre OS). Mais quand vous enfilez les lunettes (quand vous lancez DevBox), les outils dont vous avez besoin apparaissent comme par magie. C'est natif, instantané, et ça disparaît quand vous les enlevez.",[29,11689,11691],{"id":11690},"la-preuve-par-lexemple-le-5-minutes-challenge","La Preuve par l'Exemple (Le \"5 Minutes Challenge\")",[19,11693,11694],{},"Assez de théorie. Prenons un cas concret qui parle à tout Tech.",[19,11696,11697],{},"Imaginez un projet Python un peu capricieux qui nécessite :",[277,11699,11700,11706,11712],{},[280,11701,11702,11705],{},[414,11703,11704],{},"Python 3.10"," (alors que votre système est en 3.12).",[280,11707,11708,11711],{},[414,11709,11710],{},"Poetry"," pour gérer les paquets.",[280,11713,11714,11715,11718],{},"Un client ",[414,11716,11717],{},"PostgreSQL"," spécifique.",[19,11720,11721],{},"Avec DevBox, voici à quoi ressemble l'installation :",[87,11723,11725],{"id":11724},"étape-1-création-du-contrat","Étape 1 : Création du contrat",[19,11727,11728],{},"Dans votre dossier projet, initialisez l'environnement.",[9575,11730,11734],{"className":11731,"code":11732,"language":11733,"meta":116,"style":116},"language-bash shiki shiki-themes github-dark-default","devbox init\n","bash",[1676,11735,11736],{"__ignoreMap":116},[2183,11737,11738,11742],{"class":9584,"line":9585},[2183,11739,11741],{"class":11740},"sQhOw","devbox",[2183,11743,11744],{"class":9668}," init\n",[87,11746,11748],{"id":11747},"étape-2-linstallation-isolée","Étape 2 : L'installation isolée",[19,11750,11751],{},"Ajoutez vos outils. DevBox va chercher les binaires pré-compilés (pas de compilation interminable).",[9575,11753,11755],{"className":11731,"code":11754,"language":11733,"meta":116,"style":116},"devbox add python@3.10 poetry postgresql\n",[1676,11756,11757],{"__ignoreMap":116},[2183,11758,11759,11761,11764,11767,11770],{"class":9584,"line":9585},[2183,11760,11741],{"class":11740},[2183,11762,11763],{"class":9668}," add",[2183,11765,11766],{"class":9668}," python@3.10",[2183,11768,11769],{"class":9668}," poetry",[2183,11771,11772],{"class":9668}," postgresql\n",[87,11774,11776],{"id":11775},"étape-3-lactivation","Étape 3 : L'activation",[19,11778,11779],{},"Entrez dans la matrice.",[9575,11781,11783],{"className":11731,"code":11782,"language":11733,"meta":116,"style":116},"devbox shell\n",[1676,11784,11785],{"__ignoreMap":116},[2183,11786,11787,11789],{"class":9584,"line":9585},[2183,11788,11741],{"class":11740},[2183,11790,11791],{"class":9668}," shell\n",[19,11793,11794],{},"C'est fini.",[19,11796,11797,11798,11801],{},"Si vous tapez ",[1676,11799,11800],{},"python --version",", le terminal vous répondra 3.10, même si votre système est pollué par d'autres versions.",[19,11803,11804],{},"Pour le nouveau développeur qui arrive, l'onboarding se résume désormais à deux commandes :",[19,11806,11807,11810,11811,388],{},[1676,11808,11809],{},"git clone"," et ",[1676,11812,11813],{},"devbox shell",[29,11815,11817],{"id":11816},"sous-le-capot-pourquoi-cest-fiable","Sous le capot : Pourquoi c'est fiable ?",[19,11819,11820],{},"Je sais ce que vous pensez : \"Encore un wrapper node qui va casser mon PATH ?\"",[19,11822,11823],{},"Non. DevBox est une interface accessible pour Nix, l'un des gestionnaire de paquets les plus robustes.",[277,11825,11826,11840,11850],{},[280,11827,11828,11831,11832,11835,11836,11839],{},[414,11829,11830],{},"Le Store Immuable :"," DevBox n'installe rien dans ",[1676,11833,11834],{},"\u002Fusr\u002Fbin",". Tout va dans ",[1676,11837,11838],{},"\u002Fnix\u002Fstore",", en lecture seule. Vous pouvez avoir 10 versions de Node.js côte à côte, elles ne se connaissent pas.",[280,11841,11842,11845,11846,11849],{},[414,11843,11844],{},"L'illusion du Shell :"," Quand vous lancez le shell, DevBox modifie temporairement votre ",[1676,11847,11848],{},"PATH"," pour pointer vers ces versions isolées.",[280,11851,11852,11855],{},[414,11853,11854],{},"Le Cache Mutualisé :"," C'est là que DevBox brille. Si vous avez cinq projets en Node 18, DevBox ne le télécharge qu'une seule fois. Contrairement à Docker qui réinstalle l'OS à chaque image, DevBox partage les binaires communs. Gain de place, gain de temps.",[29,11857,11859],{"id":11858},"docker-devbox-le-bon-outil-au-bon-endroit",[414,11860,11861],{},"Docker & DevBox : Le bon outil au bon endroit",[19,11863,11864],{},"DevBox et Docker ne sont pas concurrents. Ce sont deux couches différentes de votre stack. Voyez DevBox comme votre Boîte à Outils ultime (Toolbox). Son rôle est de préparer votre établi. Elle vous apporte les langages (Python, Go) et les clients (CLI) nécessaires pour travailler.",[19,11866,11867],{},"Et devinez quoi ? Parmi ces outils, DevBox peut parfaitement installer et configurer... Docker ou Kubernetes.",[19,11869,11870,11873],{},[414,11871,11872],{},"Le scénario idéal pour simuler la Production :"," vous voulez reproduire un environnement de production complexe (Microservices sur K8s) ?",[409,11875,11876,11898,11907],{},[280,11877,11878,11880,11881,11884,11885,9638,11888,9638,11891,9638,11894,11897],{},[414,11879,11607],{}," installe les ",[1032,11882,11883],{},"commandes"," : ",[1676,11886,11887],{},"kubectl",[1676,11889,11890],{},"helm",[1676,11892,11893],{},"terraform",[1676,11895,11896],{},"aws-cli"," (dans les versions exactes de la prod).",[280,11899,11900,11902,11903,11906],{},[414,11901,11607],{}," lance les ",[1032,11904,11905],{},"scripts"," : Il configure l'accès à votre cluster local.",[280,11908,11909,11912,11913,11916],{},[414,11910,11911],{},"Docker\u002FK8s"," exécutent les ",[1032,11914,11915],{},"services"," : Ils font tourner les bases de données et les conteneurs applicatifs.",[19,11918,11919],{},"DevBox est le chef d'orchestre, Docker est l'un des instruments.",[1883,11921,11922,11935],{},[1886,11923,11924],{},[1889,11925,11926,11929,11932],{},[1892,11927,11928],{},"Rôle",[1892,11930,11931],{},"DevBox (La Boîte à Outils)",[1892,11933,11934],{},"Docker \u002F Kubernetes (L'Infrastructure)",[1899,11936,11937,11945,11956,11967],{},[1889,11938,11939,11941,11943],{},[1904,11940,11928],{},[1904,11942,11931],{},[1904,11944,11934],{},[1889,11946,11947,11950,11953],{},[1904,11948,11949],{},"Mission",[1904,11951,11952],{},"Gérer l'outillage.  S'assurer que le développeur a les bonnes clés à molette.",[1904,11954,11955],{},"Exécuter les services.  Faire tourner les briques logicielles lourdes.",[1889,11957,11958,11961,11964],{},[1904,11959,11960],{},"Ce qu'il contient",[1904,11962,11963],{},"Compilateurs (Go, Rust), Interpréteurs (Node, Python), CLI ( docker ,  kubectl ,  terraform ).",[1904,11965,11966],{},"Bases de données (Postgres, Redis), Message Brokers (Kafka), Applications conteneurisées.",[1889,11968,11969,11972,11975],{},[1904,11970,11971],{},"Philosophie",[1904,11973,11974],{},"\"Je prépare ton environnement de travail.\"",[1904,11976,11977],{},"\"Je simule ton environnement de production.\"",[29,11979,11981],{"id":11980},"conclusion-un-json-to-run-them-all","Conclusion :  un JSON to run them All",[19,11983,11984],{},"L'infrastructure-as-code a révolutionné la production. Il est temps qu'elle révolutionne l'onboarding. Vos équipes ne devraient pas perdre de temps à configurer des outils. Elles devraient mettre leur énergie sur les tâches où elles ont un maximum de valeurs.",[10970,11986,11987],{},"html pre.shiki code .sQhOw, html code.shiki .sQhOw{--shiki-default:#FFA657}html pre.shiki code .s9uIt, html code.shiki .s9uIt{--shiki-default:#A5D6FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":116,"searchDepth":117,"depth":117,"links":11989},[11990,11991,11996,11997,11998],{"id":11614,"depth":117,"text":11615},{"id":11690,"depth":117,"text":11691,"children":11992},[11993,11994,11995],{"id":11724,"depth":124,"text":11725},{"id":11747,"depth":124,"text":11748},{"id":11775,"depth":124,"text":11776},{"id":11816,"depth":117,"text":11817},{"id":11858,"depth":117,"text":11861},{"id":11980,"depth":117,"text":11981},"2026-01-14T14:07:08.940Z","**Le scénario est un classique du film d'horreur en entreprise.**  C'est le \"Day 1\" d'un nouveau développeur. Il est motivé, son café est chaud, sa machine est prête. On lui donne l'accès au repo. Il ",{},"\u002Fblogs\u002F2026-01-14-devbox-ou-comment-enfin-onboarder-un-dev-en-5min-chrono-sur-son-projet",[12004],{"id":137,"name":138,"image":12005,"linkedin":140,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F82ebd0fe-de28-43f3-ab7b-0431af41baad\u002FPhoto_HoppR.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466WN3QLNCE%2F20260114%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260114T140708Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEFYaCXVzLXdlc3QtMiJHMEUCIFD3v6TLnk5GmyhshqA5BlfwHhBJHcTihKFMH1xh8FAAAiEA6B%2F6vytfoyOMPoOmMOnmMsfzWqvIbVIVyk9SxRBOb5Uq%2FwMIHxAAGgw2Mzc0MjMxODM4MDUiDL6nPHU6OObivJIC6yrcAw%2BGMSR0gWkd909KwYy29%2BOOtd07YmkbUBPfyKQy5r44ubZUvnyvSe0bsnZlS%2BiruXV%2BAGH1i6YY8%2FfO0eW3%2F6bHTqgYg4jmlDqi3uQUyvSa%2B9ROYDaQonWsR1xQGJFRh3Q0FO67nIAv%2FDdPhejHVyc3bu5Yw6WNUkEb8av9H113ExC32mV6U3wm1Glrfc4rYfmQRxxrI9tyYnqjb17BDGot7eqAk5vTw2WgEqj1yLJfwOvOc9Vuvj2TDCT6XHPDxcraBQrDGZdVPhGEWQVOha%2BX0ZXI4ITciElRdlYY%2B4Xxf56q8ql1BFwBeWrjA7zO89T1ldzL4DYM6VVsTI%2BVD8ynF7EoZSRQoDt3FBWNyq0c1mkW%2BJKMcE8sYeppX8dTMf2fLezwknNN0aLAHVZnK4XxoAraRFbu3BRS1JQYOiMEle%2FtcErTA3X1Ta1llKaHRPRxdhMXr5uxW5D9%2BLLE%2B32QkD41lsPHdo%2FOOIPaaf8nG6mGZ6ZBUZnwpIjT8dntPtp3pI2c8d7f7VkQvVivaHWIc72JqjEavGmr4f01RxRFzPXzBA2c5Of4DJfXt3ZzRfhvCzATG5HpgWu5GVBFuYViCkRLytXHpet%2BTTZFhl5dlnBcBH%2Bnqkyy%2FJoJMJy%2FnssGOqUBaV15zB5j5%2BzO0TjePo5cVh5oNvLqVlrJGOL%2BiCjTFmTh%2Bq9TqZAWqhBDL%2Fow4sOiBPVNznBM5914QXUCD%2BT%2BryQHcsg5HeY2UQ6h1yy0DP4ktlenXm4U%2BcfXro6crhACbchkrLUpf2qANNrGa2I1SHj2%2F0yVPzquFLuh52qN6R9WsGQToQ9%2FlG3dzMlsgTMwiceoH4DcDiVxprDPl%2BIIjFNGb2lK&X-Amz-Signature=ba45c2556cf07a2dee7a1066cc21084b7f2a43679687bbef04b8c401bf1a63e5&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",{"title":11544,"description":12000},"blogs\u002F2026-01-14-devbox-ou-comment-enfin-onboarder-un-dev-en-5min-chrono-sur-son-projet\u002Findex",[566,151,897,11540],"8FMs8rBbU5SfyDHKyjU0dSydcWohVaiLs6FQ28TlhKY",{"id":12011,"title":12012,"alt":12013,"authors":12014,"body":12016,"date":12150,"description":12151,"extension":130,"image":131,"meta":12152,"navigation":133,"ogImage":131,"path":12153,"published":133,"reviewers":12154,"seo":12157,"stem":12158,"tags":12159,"__hash__":12161},"blogs\u002Fblogs\u002F2026-02-03-le-manifeste-du-platform-craftsmanship-lengagement-hoppr\u002Findex.md","Le Manifeste du Platform Craftsmanship : L'engagement HoppR","Platform Craftsmanship Manifesto par HoppR - L'alliance de l'artisanat et du Cloud DevOps",[12015],{"id":354,"name":355,"image":11043,"linkedin":357,"x":14},{"type":16,"value":12017,"toc":12143},[12018,12029,12035,12038,12042,12047,12054,12062,12066,12071,12074,12084,12088,12093,12096,12110,12114,12119,12122,12129,12132,12136],[19,12019,12020,12021,12024,12025,12028],{},"Dans le monde du développement, le ",[1032,12022,12023],{},"Software Craftsmanship"," a rappelé que le code n'est pas une simple commodité, mais un artisanat. Chez ",[414,12026,12027],{},"HoppR",", nous pensons qu'il est temps d'appliquer cette même exigence à l'infrastructure.",[19,12030,1030,12031,12034],{},[414,12032,12033],{},"Platform Engineering"," ne doit pas être une usine à gaz technique, mais un ouvrage d'art au service de ceux qui créent la valeur : les équipes de développement.",[19,12036,12037],{},"Voici les quatre piliers de notre manifeste.",[29,12039,12041],{"id":12040},"_1-lexpérience-au-delà-de-la-technique","1. L'expérience au-delà de la technique",[170,12043,12044],{},[19,12045,12046],{},"Pas seulement des logiciels bien conçus, mais aussi des plateformes au service des équipes de développement.",[19,12048,12049,12050,12053],{},"Une infrastructure peut être techniquement parfaite mais inutilisable. L'équipe plateforme ne se contente pas de \"monter un cluster K8s\". Elle conçoit une ",[414,12051,12052],{},"Internal Developer Platform (IDP)"," pensée pour la fluidité et l'autonomie.",[277,12055,12056],{},[280,12057,12058,12061],{},[414,12059,12060],{},"La vision HoppR :"," Si une personne de l'équipe de développement doit ouvrir un ticket pour obtenir une base de données, la plateforme a échoué. Le Craftsmanship, c'est offrir le \"Self-Service\" sans sacrifier la sécurité.",[29,12063,12065],{"id":12064},"_2-la-vision-au-delà-de-la-livraison","2. La vision au-delà de la livraison",[170,12067,12068],{},[19,12069,12070],{},"Pas seulement l’ajout constant de valeur, mais aussi une vision continue.",[19,12072,12073],{},"Livrer des fonctionnalités infra ne suffit pas si on avance à l'aveugle. Le Craftsmanship impose une transparence totale du système.",[277,12075,12076],{},[280,12077,12078,12080,12081,12083],{},[414,12079,12060],{}," Nous intégrons l’",[414,12082,568],{}," nativement. Une plateforme \"Crafted\" est un système transparent et mesurable, où chaque décision est guidée par la donnée et alignée sur la stratégie long terme de l'entreprise.",[29,12085,12087],{"id":12086},"_3-la-responsabilité-au-delà-de-la-performance","3. La responsabilité au-delà de la performance",[170,12089,12090],{},[19,12091,12092],{},"Pas seulement une communauté de professionnels, mais aussi des personnes responsables.",[19,12094,12095],{},"L'ingénierie plateforme moderne ne peut plus ignorer l'impact de son travail. L'équipe plateforme est responsable de son empreinte.",[277,12097,12098],{},[280,12099,12100,12102,12103,12106,12107,12109],{},[414,12101,12060],{}," Nous intégrons le ",[414,12104,12105],{},"FinOps"," (contrôle des coûts) et le ",[414,12108,647],{}," (durabilité) dès la conception. Agir de manière responsable, c'est garantir que la plateforme est aussi efficiente pour le budget de l'entreprise que pour la planète.",[29,12111,12113],{"id":12112},"_4-le-sens-au-delà-de-la-tendance","4. Le sens au-delà de la tendance",[170,12115,12116],{},[19,12117,12118],{},"Pas seulement des partenariats productifs, mais aussi une innovation porteuse de sens.",[19,12120,12121],{},"L'IA et les technologies émergentes sont partout, mais le Craftsmanship refuse le \"hype-driven development\".",[277,12123,12124],{},[280,12125,12126,12128],{},[414,12127,12060],{}," Nous utilisons l’IA comme un levier d’accélération et non comme un gadget. Innover avec sens, c'est choisir l'outil qui apporte un résultat concret, pas celui qui fait simplement parler sur LinkedIn.",[12130,12131],"hr",{},[29,12133,12135],{"id":12134},"pourquoi-ce-manifeste-change-la-donne-pour-nos-clients","Pourquoi ce manifeste change la donne pour nos clients ?",[19,12137,12138,12139,12142],{},"En recherchant les éléments de gauche: la qualité, la valeur, le professionnalisme et le partenariat, nous avons réalisé que les éléments de droite: DevEx, Observabilité, FinOps, Innovation choisie, sont les véritables piliers de la réussite moderne.\nLe ",[414,12140,12141],{},"Platform Craftsmanship"," n'est pas qu'une philosophie ; c'est notre méthode de travail chez HoppR pour transformer votre infrastructure en un avantage compétitif durable.",{"title":116,"searchDepth":117,"depth":117,"links":12144},[12145,12146,12147,12148,12149],{"id":12040,"depth":117,"text":12041},{"id":12064,"depth":117,"text":12065},{"id":12086,"depth":117,"text":12087},{"id":12112,"depth":117,"text":12113},{"id":12134,"depth":117,"text":12135},"2026-02-03T11:10:29.021Z","Dans le monde du développement, le _Software Craftsmanship_ a rappelé que le code n'est pas une simple commodité, mais un artisanat. Chez **HoppR**, nous pensons qu'il est temps d'appliquer cette même",{},"\u002Fblogs\u002F2026-02-03-le-manifeste-du-platform-craftsmanship-lengagement-hoppr",[12155],{"id":142,"name":143,"image":12156,"linkedin":145,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc88f5dfa-16db-4e6f-acf1-34dd80ee8766\u002Femma_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466UOV6GZ74%2F20260203%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260203T111028Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEDMaCXVzLXdlc3QtMiJHMEUCIQD6Xyjo9rBgI%2BiSNB06ysaRWlEErYThlHdyupC4mg6OfwIgeNXezDDUaziy4g%2F8AJ24c4Uu0XH2LvdJI%2FDifqoDE5sqiAQI%2FP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDImm6RPPUAAURsSINyrcA5yvDNzDU25JinN6%2FCQ0N5f5pLF62qj6gCNdwKdSFNsFgZvPmi%2B5XmL3yRjR0YHUbqR8C%2FGSTnhvnNHLQeo3aSM9p5Y%2BA40LpF9ZmshckX4DpZThaH5MiaDl4S6XeGjBMqrnfQgSIBoPxbJxbdzXVu9GGQHxG5ZGiDXR3k%2FeRoFKG02CMxVBIeXnjcZrRExNaoh3bkl5edW1TggLVcOOlinHNG8nX2BGeTRD230AktYA0mfa%2FPb7K4zrE4W7xiv5MqOF3Sqf86hJIgDpJsm9nZkiRwR%2B45OOxp4VrB64L4D9lPKNBlRcaoLvlls2%2BBE5ONDWwYDeye3tbgGrl894pomySdjg%2BoCUPylDKExU2W4CaQXBLxBSO1ib2E2w5nlKUqLeaEuX%2B85Kp9QHpfCT7J5TrOJW96aT5kJf8mx1EaFzMD7XJ3YrYJbJ8Lq2Vwyf5C%2FWgoxnQLIjgv2IJpNhdHonnJooOPUbVQHXmKCjvxi3e%2F6xCL0tWsv2fJezKpr9Srt%2FFFH%2FjrBiVnxLR41yrkMcoKBBXfjF5qwPezkdSPvjwBeDG3YdZh0BRzEOpKjjl9QAYUFuQq7JdvmKV1tN%2Bl3sPvgGp87rug0GymKWAGT5IoyAa9LGY6EqbIgeMJiih8wGOqUBhj0Jgyltd2MkQOGI%2BPkpkl3EnVNkjxMFs5hzA7FfunDz3RMyq83%2BjRJBMRkguGb0%2FYNEK%2FzeeVARgjo%2FQIeQDSwqz5y1kMvQwnESP99TfcR%2BeFkbAB9ytqe26Lrz1Ngd2iVyANLEvo5sVw5rTrG6JjSG60McNLMPXS2FlwCtZZ2NRrnZj8AQbGPbdmeCFLfkO9FLKB%2FAgmEPSk%2BWurHfw7O8S0u9&X-Amz-Signature=be52c0a8f0df4d8ac737692d68ab0319fb85093713bb4b58bf60cfc58a95814c&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",{"title":12012,"description":12151},"blogs\u002F2026-02-03-le-manifeste-du-platform-craftsmanship-lengagement-hoppr\u002Findex",[12160,151,897,566],"plateform engineering","gpC_Mg6MulH0mGD8IsrguZQezIcZ4y9hx-0N1N5hxLY",{"id":12163,"title":12164,"alt":12165,"authors":12166,"body":12168,"date":12809,"description":12810,"extension":130,"image":131,"meta":12811,"navigation":133,"ogImage":131,"path":12812,"published":133,"reviewers":12813,"seo":12816,"stem":12817,"tags":12818,"__hash__":12820},"blogs\u002Fblogs\u002F2026-03-19-dora-metrics-x-datadog-piloter-sa-vlocit-sans-effort\u002Findex.md","DORA Metrics x Datadog : Piloter sa vélocité sans effort","DORA Metrics x Datadog",[12167],{"id":354,"name":355,"image":11043,"linkedin":357,"x":14},{"type":16,"value":12169,"toc":12801},[12170,12173,12185,12188,12195,12205,12212,12217,12523,12539,12543,12548,12555,12704,12708,12734,12738,12741,12747,12753,12757,12768,12775,12789,12798],[19,12171,12172],{},"On ne va pas se mentir : dans les grands groupes, mesurer la performance DevOps ressemble souvent à un parcours du combattant entre Jira, GitHub et des fichiers Excel.",[19,12174,12175,12176,12181,12182,388],{},"Pourtant, ce ",[50,12177,12180],{"href":12178,"rel":12179},"https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex",[54],"REX inspirant"," le prouve : même à grande échelle, on peut remplacer la saisie manuelle par une culture de la donnée 100% automatisée. La clé du succès n'est pas dans la complexité, mais dans l'",[414,12183,12184],{},"automatisation",[19,12186,12187],{},"Voici comment tracker les deux piliers de la vélocité de livraison applicative avec Datadog.",[29,12189,12191,12192],{"id":12190},"_1-deployment-frequency-le-pouvoir-du-tag-version","1. Deployment Frequency : Le pouvoir du tag ",[1676,12193,12194],{},"version",[19,12196,12197,12198,388],{},"La plupart des équipes essaient de compter les déploiements à la main. Avec Datadog, c'est terminé. Si vous êtes sur Kubernetes, il suffit d'adopter le ",[50,12199,12202],{"href":12200,"rel":12201},"https:\u002F\u002Fdocs.datadoghq.com\u002Fgetting_started\u002Ftagging\u002Funified_service_tagging\u002F?tab=kubernetes",[54],[414,12203,12204],{},"Unified Service Tagging",[19,12206,12207,12208,12211],{},"En ajoutant simplement le label ",[1676,12209,12210],{},"tags.datadoghq.com\u002Fversion"," à vos manifests, Datadog détecte chaque changement comme un événement de déploiement natif.",[19,12213,12214],{},[414,12215,12216],{},"Exemple de manifest \"Datadog Ready\" :",[9575,12218,12222],{"className":12219,"code":12220,"language":12221,"meta":116,"style":116},"language-yaml shiki shiki-themes github-dark-default","apiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: my-banger-service\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: my-banger-service\n  template:\n    metadata:\n      labels:\n        # Les 3 tags magiques du Unified Service Tagging\n        tags.datadoghq.com\u002Fenv: \"prod\"\n        tags.datadoghq.com\u002Fservice: \"my-banger-service\"\n        tags.datadoghq.com\u002Fversion: \"1.2.4\" # C'est ICI que le calcul DORA commence\n    spec:\n      containers:\n      - name: my-app\n        image: my-registry\u002Fmy-app:1.2.4\n        env:\n          # On injecte ces variables pour que l'APM et les Logs héritent aussi des tags\n          - name: DD_ENV\n            valueFrom:\n              fieldRef:\n                fieldPath: metadata.labels['tags.datadoghq.com\u002Fenv']\n          - name: DD_SERVICE\n            valueFrom:\n              fieldRef:\n                fieldPath: metadata.labels['tags.datadoghq.com\u002Fservice']\n          - name: DD_VERSION\n            valueFrom:\n              fieldRef:\n                fieldPath: metadata.labels['tags.datadoghq.com\u002Fversion']\n","yaml",[1676,12223,12224,12236,12246,12254,12264,12271,12281,12288,12295,12304,12311,12318,12325,12330,12340,12350,12363,12370,12377,12390,12400,12407,12412,12424,12432,12440,12451,12463,12470,12477,12487,12499,12506,12513],{"__ignoreMap":116},[2183,12225,12226,12230,12233],{"class":9584,"line":9585},[2183,12227,12229],{"class":12228},"sPWt5","apiVersion",[2183,12231,12232],{"class":9602},": ",[2183,12234,12235],{"class":9668},"apps\u002Fv1\n",[2183,12237,12238,12241,12243],{"class":9584,"line":117},[2183,12239,12240],{"class":12228},"kind",[2183,12242,12232],{"class":9602},[2183,12244,12245],{"class":9668},"Deployment\n",[2183,12247,12248,12251],{"class":9584,"line":124},[2183,12249,12250],{"class":12228},"metadata",[2183,12252,12253],{"class":9602},":\n",[2183,12255,12256,12259,12261],{"class":9584,"line":442},[2183,12257,12258],{"class":12228},"  name",[2183,12260,12232],{"class":9602},[2183,12262,12263],{"class":9668},"my-banger-service\n",[2183,12265,12266,12269],{"class":9584,"line":9662},[2183,12267,12268],{"class":12228},"spec",[2183,12270,12253],{"class":9602},[2183,12272,12273,12276,12278],{"class":9584,"line":9675},[2183,12274,12275],{"class":12228},"  replicas",[2183,12277,12232],{"class":9602},[2183,12279,12280],{"class":9598},"3\n",[2183,12282,12283,12286],{"class":9584,"line":9681},[2183,12284,12285],{"class":12228},"  selector",[2183,12287,12253],{"class":9602},[2183,12289,12290,12293],{"class":9584,"line":9690},[2183,12291,12292],{"class":12228},"    matchLabels",[2183,12294,12253],{"class":9602},[2183,12296,12297,12300,12302],{"class":9584,"line":9696},[2183,12298,12299],{"class":12228},"      app",[2183,12301,12232],{"class":9602},[2183,12303,12263],{"class":9668},[2183,12305,12306,12309],{"class":9584,"line":9718},[2183,12307,12308],{"class":12228},"  template",[2183,12310,12253],{"class":9602},[2183,12312,12313,12316],{"class":9584,"line":9736},[2183,12314,12315],{"class":12228},"    metadata",[2183,12317,12253],{"class":9602},[2183,12319,12320,12323],{"class":9584,"line":9760},[2183,12321,12322],{"class":12228},"      labels",[2183,12324,12253],{"class":9602},[2183,12326,12327],{"class":9584,"line":9931},[2183,12328,12329],{"class":9588},"        # Les 3 tags magiques du Unified Service Tagging\n",[2183,12331,12332,12335,12337],{"class":9584,"line":9938},[2183,12333,12334],{"class":12228},"        tags.datadoghq.com\u002Fenv",[2183,12336,12232],{"class":9602},[2183,12338,12339],{"class":9668},"\"prod\"\n",[2183,12341,12342,12345,12347],{"class":9584,"line":9944},[2183,12343,12344],{"class":12228},"        tags.datadoghq.com\u002Fservice",[2183,12346,12232],{"class":9602},[2183,12348,12349],{"class":9668},"\"my-banger-service\"\n",[2183,12351,12352,12355,12357,12360],{"class":9584,"line":9963},[2183,12353,12354],{"class":12228},"        tags.datadoghq.com\u002Fversion",[2183,12356,12232],{"class":9602},[2183,12358,12359],{"class":9668},"\"1.2.4\"",[2183,12361,12362],{"class":9588}," # C'est ICI que le calcul DORA commence\n",[2183,12364,12365,12368],{"class":9584,"line":9981},[2183,12366,12367],{"class":12228},"    spec",[2183,12369,12253],{"class":9602},[2183,12371,12372,12375],{"class":9584,"line":10008},[2183,12373,12374],{"class":12228},"      containers",[2183,12376,12253],{"class":9602},[2183,12378,12379,12382,12385,12387],{"class":9584,"line":10016},[2183,12380,12381],{"class":9602},"      - ",[2183,12383,12384],{"class":12228},"name",[2183,12386,12232],{"class":9602},[2183,12388,12389],{"class":9668},"my-app\n",[2183,12391,12392,12395,12397],{"class":9584,"line":10027},[2183,12393,12394],{"class":12228},"        image",[2183,12396,12232],{"class":9602},[2183,12398,12399],{"class":9668},"my-registry\u002Fmy-app:1.2.4\n",[2183,12401,12402,12405],{"class":9584,"line":10379},[2183,12403,12404],{"class":12228},"        env",[2183,12406,12253],{"class":9602},[2183,12408,12409],{"class":9584,"line":10409},[2183,12410,12411],{"class":9588},"          # On injecte ces variables pour que l'APM et les Logs héritent aussi des tags\n",[2183,12413,12414,12417,12419,12421],{"class":9584,"line":10417},[2183,12415,12416],{"class":9602},"          - ",[2183,12418,12384],{"class":12228},[2183,12420,12232],{"class":9602},[2183,12422,12423],{"class":9668},"DD_ENV\n",[2183,12425,12427,12430],{"class":9584,"line":12426},24,[2183,12428,12429],{"class":12228},"            valueFrom",[2183,12431,12253],{"class":9602},[2183,12433,12435,12438],{"class":9584,"line":12434},25,[2183,12436,12437],{"class":12228},"              fieldRef",[2183,12439,12253],{"class":9602},[2183,12441,12443,12446,12448],{"class":9584,"line":12442},26,[2183,12444,12445],{"class":12228},"                fieldPath",[2183,12447,12232],{"class":9602},[2183,12449,12450],{"class":9668},"metadata.labels['tags.datadoghq.com\u002Fenv']\n",[2183,12452,12454,12456,12458,12460],{"class":9584,"line":12453},27,[2183,12455,12416],{"class":9602},[2183,12457,12384],{"class":12228},[2183,12459,12232],{"class":9602},[2183,12461,12462],{"class":9668},"DD_SERVICE\n",[2183,12464,12466,12468],{"class":9584,"line":12465},28,[2183,12467,12429],{"class":12228},[2183,12469,12253],{"class":9602},[2183,12471,12473,12475],{"class":9584,"line":12472},29,[2183,12474,12437],{"class":12228},[2183,12476,12253],{"class":9602},[2183,12478,12480,12482,12484],{"class":9584,"line":12479},30,[2183,12481,12445],{"class":12228},[2183,12483,12232],{"class":9602},[2183,12485,12486],{"class":9668},"metadata.labels['tags.datadoghq.com\u002Fservice']\n",[2183,12488,12490,12492,12494,12496],{"class":9584,"line":12489},31,[2183,12491,12416],{"class":9602},[2183,12493,12384],{"class":12228},[2183,12495,12232],{"class":9602},[2183,12497,12498],{"class":9668},"DD_VERSION\n",[2183,12500,12502,12504],{"class":9584,"line":12501},32,[2183,12503,12429],{"class":12228},[2183,12505,12253],{"class":9602},[2183,12507,12509,12511],{"class":9584,"line":12508},33,[2183,12510,12437],{"class":12228},[2183,12512,12253],{"class":9602},[2183,12514,12516,12518,12520],{"class":9584,"line":12515},34,[2183,12517,12445],{"class":12228},[2183,12519,12232],{"class":9602},[2183,12521,12522],{"class":9668},"metadata.labels['tags.datadoghq.com\u002Fversion']\n",[170,12524,12525],{},[19,12526,12527,12530,12531,12534,12535,12538],{},[414,12528,12529],{},"Note :"," On utilise ici un contexte K8s, mais cette logique s'adapte partout. Sur une ",[414,12532,12533],{},"VM",", il suffit de passer ces tags via les variables d'environnement (",[1676,12536,12537],{},"DD_VERSION",") ou la configuration de l'Agent Datadog.",[29,12540,12542],{"id":12541},"_2-change-lead-time-la-cicd-comme-source-de-vérité","2. Change Lead Time : La CI\u002FCD comme source de vérité",[19,12544,1030,12545,12547],{},[1032,12546,1281],{}," (le temps écoulé entre le commit et la mise en production) est souvent le premier vrai défi technique, car il demande de lier la CI\u002FCD au monitoring de prod.",[19,12549,12550,12551,12554],{},"La solution ? ",[414,12552,12553],{},"Datadog CI Visibility",". Au lieu de faire des calculs manuels approximatifs, on injecte un binaire Datadog directement dans votre pipeline (GitHub Actions, GitLab CI, Jenkins) :",[9575,12556,12558],{"className":12219,"code":12557,"language":12221,"meta":116,"style":116},"stages:\n  - build\n  - test\n  - publish  # C'est ici qu'on lie le code à Datadog\n\ndatadog-metadata:\n  stage: publish\n  image: \n    name: datadog\u002Fci:v5.9.1\n    entrypoint: [\"\"]\n  variables:\n    DATADOG_SITE: \"datadoghq.eu\"\n    # DATADOG_API_KEY doit être définie dans vos variables CI\u002FCD GitLab\n  script:\n    - datadog-ci git-metadata upload\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # On track seulement la branche principale\n",[1676,12559,12560,12567,12575,12582,12592,12596,12603,12613,12621,12631,12645,12652,12662,12667,12674,12682,12689],{"__ignoreMap":116},[2183,12561,12562,12565],{"class":9584,"line":9585},[2183,12563,12564],{"class":12228},"stages",[2183,12566,12253],{"class":9602},[2183,12568,12569,12572],{"class":9584,"line":117},[2183,12570,12571],{"class":9602},"  - ",[2183,12573,12574],{"class":9668},"build\n",[2183,12576,12577,12579],{"class":9584,"line":124},[2183,12578,12571],{"class":9602},[2183,12580,12581],{"class":9668},"test\n",[2183,12583,12584,12586,12589],{"class":9584,"line":442},[2183,12585,12571],{"class":9602},[2183,12587,12588],{"class":9668},"publish",[2183,12590,12591],{"class":9588},"  # C'est ici qu'on lie le code à Datadog\n",[2183,12593,12594],{"class":9584,"line":9662},[2183,12595,10665],{"emptyLinePlaceholder":133},[2183,12597,12598,12601],{"class":9584,"line":9675},[2183,12599,12600],{"class":12228},"datadog-metadata",[2183,12602,12253],{"class":9602},[2183,12604,12605,12608,12610],{"class":9584,"line":9681},[2183,12606,12607],{"class":12228},"  stage",[2183,12609,12232],{"class":9602},[2183,12611,12612],{"class":9668},"publish\n",[2183,12614,12615,12618],{"class":9584,"line":9690},[2183,12616,12617],{"class":12228},"  image",[2183,12619,12620],{"class":9602},": \n",[2183,12622,12623,12626,12628],{"class":9584,"line":9696},[2183,12624,12625],{"class":12228},"    name",[2183,12627,12232],{"class":9602},[2183,12629,12630],{"class":9668},"datadog\u002Fci:v5.9.1\n",[2183,12632,12633,12636,12639,12642],{"class":9584,"line":9718},[2183,12634,12635],{"class":12228},"    entrypoint",[2183,12637,12638],{"class":9602},": [",[2183,12640,12641],{"class":9668},"\"\"",[2183,12643,12644],{"class":9602},"]\n",[2183,12646,12647,12650],{"class":9584,"line":9736},[2183,12648,12649],{"class":12228},"  variables",[2183,12651,12253],{"class":9602},[2183,12653,12654,12657,12659],{"class":9584,"line":9760},[2183,12655,12656],{"class":12228},"    DATADOG_SITE",[2183,12658,12232],{"class":9602},[2183,12660,12661],{"class":9668},"\"datadoghq.eu\"\n",[2183,12663,12664],{"class":9584,"line":9931},[2183,12665,12666],{"class":9588},"    # DATADOG_API_KEY doit être définie dans vos variables CI\u002FCD GitLab\n",[2183,12668,12669,12672],{"class":9584,"line":9938},[2183,12670,12671],{"class":12228},"  script",[2183,12673,12253],{"class":9602},[2183,12675,12676,12679],{"class":9584,"line":9944},[2183,12677,12678],{"class":9602},"    - ",[2183,12680,12681],{"class":9668},"datadog-ci git-metadata upload\n",[2183,12683,12684,12687],{"class":9584,"line":9963},[2183,12685,12686],{"class":12228},"  rules",[2183,12688,12253],{"class":9602},[2183,12690,12691,12693,12696,12698,12701],{"class":9584,"line":9981},[2183,12692,12678],{"class":9602},[2183,12694,12695],{"class":12228},"if",[2183,12697,12232],{"class":9602},[2183,12699,12700],{"class":9668},"$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",[2183,12702,12703],{"class":9588}," # On track seulement la branche principale\n",[29,12705,12707],{"id":12706},"pourquoi-cest-lapproche-gagnante","Pourquoi c'est l'approche gagnante ?",[277,12709,12710,12716,12722],{},[280,12711,12712,12715],{},[414,12713,12714],{},"Lien Automatique"," : En lançant cette commande, Datadog associe les hashes des commits au build en cours.",[280,12717,12718,12721],{},[414,12719,12720],{},"Zéro Impact Runtime"," : Contrairement à d'autres outils qui ralentissent l'application, ici tout se passe dans la forge logicielle.",[280,12723,12724,12727,12728,12730,12731,388],{},[414,12725,12726],{},"Réconciliation magique"," : Dès qu’un pod Kubernetes (avec son tag ",[1676,12729,12194],{},") pop sur l'infra, Datadog fait le calcul : ",[1676,12732,12733],{},"Heure du déploiement - Heure du commit = Lead Time",[29,12735,12737],{"id":12736},"et-sinon-ça-ressemble-à-quoi-après-ce-setup","Et sinon ça ressemble à quoi après ce setup?",[19,12739,12740],{},"Voici deux captures d’écran permettant de voir les metriques “Deployment Frequency” et “Change Lead Time” sur un service en production:",[19,12742,12743],{},[66,12744],{"alt":12745,"src":12746},"Vue unifiée “DORA Metrics” sur Datadog pour un service en production - Deployment Frequency","\u002Fcontent-assets\u002F2026-03-19-dora-metrics-x-datadog-piloter-sa-vlocit-sans-effort\u002Fassets\u002Fimg1.webp",[19,12748,12749],{},[66,12750],{"alt":12751,"src":12752},"Vue unifiée “DORA Metrics” sur Datadog pour un service en production - Change Lead Time","\u002Fcontent-assets\u002F2026-03-19-dora-metrics-x-datadog-piloter-sa-vlocit-sans-effort\u002Fassets\u002Fimg2.webp",[29,12754,12756],{"id":12755},"conclusion-la-donnée-plutôt-que-lopinion","Conclusion : La donnée plutôt que l'opinion",[19,12758,12759,12760,12767],{},"Si vous utilisez déjà Datadog, 90% du travail est fait. En ajoutant un label et une ligne de CI, vous passez du ressenti à une culture de la donnée automatisée. Bien sûr, des alternatives Open Source comme ",[50,12761,12764],{"href":12762,"rel":12763},"https:\u002F\u002Fdevlake.apache.org\u002Fdocs\u002FDORA\u002F",[54],[414,12765,12766],{},"Apache DevLake"," existent, mais l'unification native dans votre monitoring reste un atout majeur.",[19,12769,12770,12771,12774],{},"Cependant, la vélocité n'est que la moitié du chemin. Pour piloter sereinement, il nous reste à automatiser les deux piliers de la ",[414,12772,12773],{},"stabilité"," :",[277,12776,12777,12783],{},[280,12778,12779,12782],{},[414,12780,12781],{},"Change Failure Rate (CFR)"," : Le ratio de déploiements qui partent en fumée.",[280,12784,12785,12788],{},[414,12786,12787],{},"Mean Time to Recovery (MTTR)"," : Votre réactivité face aux incidents.",[19,12790,12791,12792,12797],{},"On s'occupe de la stabilité dans un prochain article. Vous pouvez suivre HoppR sur ",[50,12793,12796],{"href":12794,"rel":12795},"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fhopprtech\u002F",[54],"LinkedIn"," pour ne pas le rater !",[10970,12799,12800],{},"html pre.shiki code .sPWt5, html code.shiki .sPWt5{--shiki-default:#7EE787}html pre.shiki code .sZEs4, html code.shiki .sZEs4{--shiki-default:#E6EDF3}html pre.shiki code .s9uIt, html code.shiki .s9uIt{--shiki-default:#A5D6FF}html pre.shiki code .sFSAA, html code.shiki .sFSAA{--shiki-default:#79C0FF}html pre.shiki code .sH3jZ, html code.shiki .sH3jZ{--shiki-default:#8B949E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":116,"searchDepth":117,"depth":117,"links":12802},[12803,12805,12806,12807,12808],{"id":12190,"depth":117,"text":12804},"1. Deployment Frequency : Le pouvoir du tag version",{"id":12541,"depth":117,"text":12542},{"id":12706,"depth":117,"text":12707},{"id":12736,"depth":117,"text":12737},{"id":12755,"depth":117,"text":12756},"2026-03-19T08:42:50.449Z","On ne va pas se mentir : dans les grands groupes, mesurer la performance DevOps ressemble souvent à un parcours du combattant entre Jira, GitHub et des fichiers Excel.   Pourtant, ce REX inspirant le ",{},"\u002Fblogs\u002F2026-03-19-dora-metrics-x-datadog-piloter-sa-vlocit-sans-effort",[12814],{"id":137,"name":138,"image":12815,"linkedin":140,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F82ebd0fe-de28-43f3-ab7b-0431af41baad\u002FPhoto_HoppR.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466X47CA4QS%2F20260319%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260319T084250Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEE8aCXVzLXdlc3QtMiJHMEUCIQCKU6Iu4QpzsQ2tkRUQBOxFfiOZ4HfQkLEgTKfy%2FJWHoAIgPyga683FjSbPQ2GsppWTNVeSFB4ssAGCCzeS8CLQaMQq%2FwMIGBAAGgw2Mzc0MjMxODM4MDUiDOj2R60cHgGnBqhLcyrcA1pBK91%2FC7sxxYBr6Wlx6GzaRwJFbRV6CdRh0IvpOOkR64ATl3S0ydVCC0tFBxdKj8IqC7gm2rDoEBsRqWjFBHumSXbND9n5u2iSwJxpHgltOp1oPaZBPaKvcGSk8fKNNiJfDShAK0I5pcFcnSu9XFGDuC4qD2plWYVGwRX5updAe3Ik70Nt6Zw3JnmMdjva5%2FmliVY3ddR5m9%2B%2BkxZ9E1u8oqcsZsazmwIiyyrIyH1peO5bIophiHoBcUUOQh0B904T0GdwsoOpC2t9azffF12oIMB4EUJLntX%2BbfCgC%2FagZ8%2FYocGXhyIuBQrih2PPYz4snhS%2BdGu9Tq6QCdHV0pEZh3aTD5UWYIwl9QJWuhpeQXFFlIfNT88e8bgM71LnExaJ0XuNbI8d9rY6a0ok93CV5m%2BDEFLO847dOF7xFerJfXJUgl915TPZhkTguqcH2mc0okDbS3bm3ZFZ16zS0Fdy%2FkINyFv%2FMT27RyZfw2gh2U4ZJVOyofMeoJFj1ZtAXGDatgXRWqmCBuJ%2BHIbbb34I7SN3INyNPwNKxN3BMHWv5RB9Lz8gUUlRlQs06ji9ftTwyN%2BqYbgc25C0mFwYYRYLpT3RvjS4oVywFZ7i4pRn6cHwD3axgT6YsZs%2FMLe%2B7s0GOqUBxHzCa69PV%2BECGw59UfrQfLPXebPFMilfk4LXejsM%2FjExDGVpQwuSFdRQLfRuhkIzNmri9OkFS1tU92R6XjdAoQKZmqR%2Ftkovwr0NYyr%2BpecdISq63hJNOdN6HrK%2BUAVo%2FOktZRT882GA1mvZy73vJiu5pz6fIgMwcoM%2BobZPHmN70C0Gr9ahS9nU5lKzBlqp1qLa3WIfgQUEmrUN5K9J31dPUk2O&X-Amz-Signature=f22395593221d95ab37a04634f21a51e049d9037209df11b04d9896a6efbfc12&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",{"title":12164,"description":12810},"blogs\u002F2026-03-19-dora-metrics-x-datadog-piloter-sa-vlocit-sans-effort\u002Findex",[565,12819,12160,566,151],"datadog","vYAaAu_DYpkvlMSXsS8tVt4Iq710wPn4JQ8G1g-mj_k",{"id":12822,"title":12823,"alt":12824,"authors":12825,"body":12827,"date":14287,"description":14288,"extension":130,"image":131,"meta":14289,"navigation":133,"ogImage":131,"path":14290,"published":133,"reviewers":14291,"seo":14296,"stem":14297,"tags":14298,"__hash__":14299},"blogs\u002Fblogs\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector\u002Findex.md","Connecter Datadog à un réseau 100% hors-ligne : retour d'expérience avec Vector","Cover de l'article : Diagramme d'architecture illustrant la collecte, l'anonymisation par Vector et l'envoi de logs serveurs vers Datadog.",[12826],{"id":359,"name":360,"image":374,"linkedin":362,"x":363},{"type":16,"value":12828,"toc":14264},[12829,12852,12854,12858,12861,12869,12876,12879,12900,12903,12905,12909,12912,12918,12941,12944,12973,12976,12979,12988,12994,12996,13000,13003,13014,13020,13022,13030,13037,13041,13056,13066,13079,13086,13092,13096,13099,13151,13161,13168,13170,13174,13177,13180,13250,13257,13283,13290,13313,13315,13319,13328,13334,13338,13353,13495,13499,13502,13649,13652,13655,13657,13661,13664,13667,13767,13770,13791,13798,13802,13809,13833,13835,13839,13842,13853,13891,13894,13897,13923,13925,13929,13932,13946,13976,13995,14001,14010,14012,14016,14019,14025,14041,14047,14063,14065,14069,14072,14224,14226,14230,14237,14243,14254,14256,14261],[19,12830,12831,11275,12834,11275,12839,11275,12842,11275,12849],{},[1032,12832,12833],{},"Comment faire fonctionner",[50,12835,12837],{"href":325,"rel":12836},[54],[1032,12838,718],{},[1032,12840,12841],{},"sur des serveurs Windows isolés, sans internet et avec une anonymisation stricte des données ? Retour d'expérience sur la mise en place de",[50,12843,12846],{"href":12844,"rel":12845},"https:\u002F\u002Fvector.dev\u002F",[54],[1032,12847,12848],{},"Vector",[1032,12850,12851],{},"pour connecter un cluster hors-ligne à Datadog.",[12130,12853],{},[29,12855,12857],{"id":12856},"le-contexte-des-serveurs-aveugles","Le contexte : des serveurs aveugles",[19,12859,12860],{},"Dans les environnements réglementés, la sécurité réseau n'est pas négociable. Mais ça ne devrait pas condamner une équipe à piloter ses applications à l'aveugle.",[19,12862,12863,12864,12868],{},"Un client du secteur de l'assurance a contacté ",[50,12865,12027],{"href":12866,"rel":12867},"http:\u002F\u002Fhoppr.tech\u002F",[54]," pour mettre en place du monitoring sur son parc applicatif. Le setup : une dizaine de serveurs Windows sous IIS hébergeant des applications .NET, répartis entre une DMZ et un réseau interne, générant plusieurs Go de logs par jour. Jusque-là, rien d'exotique.",[19,12870,12871,12872,12875],{},"La contrainte principale : ",[414,12873,12874],{},"aucun de ces serveurs n'a accès à internet."," Politique de sécurité réseau stricte, pas de dérogation possible. Tolérance zéro pour la perte de données. Et le client veut Datadog, pas un ELK maison, pas un Prometheus à manager.",[19,12877,12878],{},"Le cahier des charges :",[277,12880,12881,12884,12887,12890,12897],{},[280,12882,12883],{},"Centraliser les logs applicatifs IIS dans Datadog",[280,12885,12886],{},"Collecter les métriques de performance (HTTP, runtime .NET, SQL)",[280,12888,12889],{},"Activer le tracing distribué (APM) sur les applications cibles",[280,12891,12892,12893,12896],{},"Anonymiser les données sensibles ",[414,12894,12895],{},"avant"," qu'elles quittent le réseau",[280,12898,12899],{},"Garantir zéro perte de données en cas de coupure réseau",[19,12901,12902],{},"L'objectif : un pipeline de bout en bout, opérationnel et validé par le client.",[12130,12904],{},[29,12906,12908],{"id":12907},"pourquoi-vector-et-pas-un-proxy-http","Pourquoi Vector et pas un proxy HTTP",[19,12910,12911],{},"Lorsque des serveurs sans internet doivent envoyer des données vers un SaaS, le réflexe habituel est de penser à un proxy. Un Squid, un HAProxy, un nginx en reverse proxy.",[19,12913,12914,12917],{},[414,12915,12916],{},"Mais"," ça ne suffit pas ici. On ne veut pas juste relayer du trafic HTTPS. On veut :",[277,12919,12920,12926,12932,12938],{},[280,12921,12922,12925],{},[414,12923,12924],{},"Transformer"," les données en transit (anonymisation)",[280,12927,12928,12931],{},[414,12929,12930],{},"Bufferiser sur disque"," en cas de coupure réseau vers Datadog",[280,12933,12934,12937],{},[414,12935,12936],{},"Séparer les flux"," (logs, métriques, traces) vers les bons endpoints",[280,12939,12940],{},"Avoir un pipeline observable et debuggable",[19,12942,12943],{},"Vector coche toutes ces cases.",[19,12945,12946,12947,9638,12952,9817,12957,12962,12963,12968,12969,12972],{},"C'est un binaire unique écrit en ",[50,12948,12951],{"href":12949,"rel":12950},"https:\u002F\u002Frust-lang.org\u002Ffr\u002F",[54],"Rust",[50,12953,12956],{"href":12954,"rel":12955},"https:\u002F\u002Fgithub.com\u002Fvectordotdev\u002Fvector",[54],"haute performance",[50,12958,12961],{"href":12959,"rel":12960},"https:\u002F\u002Fvector.dev\u002Fdocs\u002Fsetup\u002Fgoing-to-prod\u002Fsizing\u002F",[54],"~25 MiB\u002Fs par vCPU"," pour des logs structurés — soit ",[50,12964,12967],{"href":12965,"rel":12966},"https:\u002F\u002Fgithub.com\u002Fvectordotdev\u002Fvector#performance",[54],"3x à 18x le débit de Fluentd et 2x à 25x celui de Logstash"," selon les scénarios), avec un support natif du protocole Datadog Agent en source ",[414,12970,12971],{},"et"," en sink. Concrètement, l'agent Datadog sur les serveurs Windows pense parler à Datadog, il parle à Vector et Vector se charge du reste.",[19,12974,12975],{},"Le coût en ressources ? Négligeable.",[19,12977,12978],{},"Contrairement à un proxy maison qu'il faudrait maintenir, Vector traite notre volume de logs avec une empreinte CPU\u002FRAM minimale.",[19,12980,12981,12982,12987],{},"Le bonus : Vector supporte VRL (",[50,12983,12986],{"href":12984,"rel":12985},"https:\u002F\u002Fvector.dev\u002Fdocs\u002Freference\u002Fvrl\u002F",[54],"Vector Remap Language","), un langage de transformation dédié. Exactement ce qu'il faut pour l'anonymisation.",[19,12989,12990],{},[66,12991],{"alt":12992,"src":12993},"Schéma de l’architecture du pipeline Vector simplifé","\u002Fcontent-assets\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector\u002Fassets\u002Fimg1.webp",[12130,12995],{},[29,12997,12999],{"id":12998},"larchitecture-implémentée","L'architecture implémentée",[19,13001,13002],{},"Un serveur Linux Debian en DMZ fait office de passerelle unique. Il porte Vector qui écoute en TLS sur le port 8443, et un agent Datadog dédié qui surveille Vector lui-même avec une connexion directe vers Datadog (sans passer par Vector — on y reviendra).",[19,13004,13005,13006,13009,13010,13013],{},"Les serveurs Windows envoient ",[414,13007,13008],{},"tout"," vers Vector : logs, métriques, traces APM, données OTLP. L'agent Datadog Windows est configuré avec un bloc ",[1676,13011,13012],{},"vector:"," natif qui redirige, de manière transparente, tous les flux.",[19,13015,13016],{},[66,13017],{"alt":13018,"src":13019},"Diagramme de composants de la solution Vector","\u002Fcontent-assets\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector\u002Fassets\u002Fimg2.webp",[12130,13021],{},[29,13023,13025,13026,13029],{"id":13024},"piège-n1-store_api_key-un-comportement-par-défaut-trompeur","Piège n°1 : ",[1676,13027,13028],{},"store_api_key"," — un comportement par défaut trompeur",[19,13031,13032,13033,13036],{},"Ce problème de configuration est le plus subtil qu'on ait rencontré. Tout semblait fonctionner correctement : les agents envoyaient des données et ",[1676,13034,13035],{},"vector top"," affichait les flux. Mais côté Datadog, aucune donnée ne remontait, sans message d'erreur explicite.",[87,13038,13040],{"id":13039},"la-raison","La raison ?",[19,13042,13043,13044,13047,13048,13051,13052,13055],{},"L'agent Datadog sur les serveurs Windows a besoin d'une ",[1676,13045,13046],{},"api_key"," dans sa config, même s'il n'envoie rien directement à Datadog.\nLe placeholder mis en place était ",[1676,13049,13050],{},"00000000000000000000000000000000",". L'idée ? Permettre à Vector d'utiliser sa propre clé API valide via ",[1676,13053,13054],{},"default_api_key"," dans ses sinks.",[19,13057,13058,13059,13062,13063,388],{},"Sauf que Vector, par défaut, a ",[1676,13060,13061],{},"store_api_key: true"," sur sa source ",[1676,13064,13065],{},"datadog_agent",[19,13067,13068,13069,13072,13073,13076,13077,388],{},"Ce paramètre fait que Vector ",[414,13070,13071],{},"stocke la clé API transmise par l'agent dans les métadonnées de chaque événement",". Et au moment de l'envoi vers Datadog, si une clé est présente dans les métadonnées, elle ",[414,13074,13075],{},"prend le dessus"," sur ",[1676,13078,13054],{},[19,13080,13081,13082,13085],{},"Résultat : Vector envoie les logs avec la clé ",[1676,13083,13084],{},"00000000..."," — qui se fait rejeter par Datadog. Tout cela sans alerte ou notification pour comprendre ce rejet.",[19,13087,13088],{},[66,13089],{"alt":13090,"src":13091},"Schéma pour expliquer la résolution du store_api_key","\u002Fcontent-assets\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector\u002Fassets\u002Fimg3.webp",[87,13093,13095],{"id":13094},"la-solution","La solution",[19,13097,13098],{},"Un seul paramètre à changer :",[9575,13100,13102],{"className":12219,"code":13101,"language":12221,"meta":116,"style":116},"sources:\n  datadog_agents:\n    type: datadog_agent\n    address: \"0.0.0.0:8443\"\n    store_api_key: false  # ← C'est ça qui manquait\n",[1676,13103,13104,13111,13118,13128,13138],{"__ignoreMap":116},[2183,13105,13106,13109],{"class":9584,"line":9585},[2183,13107,13108],{"class":12228},"sources",[2183,13110,12253],{"class":9602},[2183,13112,13113,13116],{"class":9584,"line":117},[2183,13114,13115],{"class":12228},"  datadog_agents",[2183,13117,12253],{"class":9602},[2183,13119,13120,13123,13125],{"class":9584,"line":124},[2183,13121,13122],{"class":12228},"    type",[2183,13124,12232],{"class":9602},[2183,13126,13127],{"class":9668},"datadog_agent\n",[2183,13129,13130,13133,13135],{"class":9584,"line":442},[2183,13131,13132],{"class":12228},"    address",[2183,13134,12232],{"class":9602},[2183,13136,13137],{"class":9668},"\"0.0.0.0:8443\"\n",[2183,13139,13140,13143,13145,13148],{"class":9584,"line":9662},[2183,13141,13142],{"class":12228},"    store_api_key",[2183,13144,12232],{"class":9602},[2183,13146,13147],{"class":9598},"false",[2183,13149,13150],{"class":9588},"  # ← C'est ça qui manquait\n",[19,13152,13153,13154,13157,13158,13160],{},"Avec ",[1676,13155,13156],{},"store_api_key: false",", Vector ignore la clé transmise par les agents et utilise systématiquement la ",[1676,13159,13054],{}," configurée dans chaque sink.",[19,13162,13163,13164,13167],{},"Ce comportement est difficile à diagnostiquer car il ne génère aucune erreur explicite côté Vector. Les données transitent normalement dans le pipeline mais sont rejetées silencieusement par Datadog. C'est en analysant les codes retour HTTP 403 dans les logs ",[1676,13165,13166],{},"journalctl"," qu'on a identifié la cause. Le correctif tient en un seul paramètre.",[12130,13169],{},[29,13171,13173],{"id":13172},"piège-n2-tls-et-certificats-internes","Piège n°2 : TLS et certificats internes",[19,13175,13176],{},"Les communications agent → Vector passent en TLS sur le port 8443. Le client utilise une PKI interne avec un certificat wildcard.",[19,13178,13179],{},"Côté Vector (Linux), la config TLS est straightforward :",[9575,13181,13183],{"className":12219,"code":13182,"language":12221,"meta":116,"style":116},"sources:\n  datadog_agents:\n    type: datadog_agent\n    address: \"0.0.0.0:8443\"\n    tls:\n      enabled: true\n      crt_file: \"\u002Fvector\u002Fcerts\u002Fserver.crt\"\n      key_file: \"\u002Fvector\u002Fcerts\u002Fserver.key\"\n",[1676,13184,13185,13191,13197,13205,13213,13220,13230,13240],{"__ignoreMap":116},[2183,13186,13187,13189],{"class":9584,"line":9585},[2183,13188,13108],{"class":12228},[2183,13190,12253],{"class":9602},[2183,13192,13193,13195],{"class":9584,"line":117},[2183,13194,13115],{"class":12228},[2183,13196,12253],{"class":9602},[2183,13198,13199,13201,13203],{"class":9584,"line":124},[2183,13200,13122],{"class":12228},[2183,13202,12232],{"class":9602},[2183,13204,13127],{"class":9668},[2183,13206,13207,13209,13211],{"class":9584,"line":442},[2183,13208,13132],{"class":12228},[2183,13210,12232],{"class":9602},[2183,13212,13137],{"class":9668},[2183,13214,13215,13218],{"class":9584,"line":9662},[2183,13216,13217],{"class":12228},"    tls",[2183,13219,12253],{"class":9602},[2183,13221,13222,13225,13227],{"class":9584,"line":9675},[2183,13223,13224],{"class":12228},"      enabled",[2183,13226,12232],{"class":9602},[2183,13228,13229],{"class":9598},"true\n",[2183,13231,13232,13235,13237],{"class":9584,"line":9681},[2183,13233,13234],{"class":12228},"      crt_file",[2183,13236,12232],{"class":9602},[2183,13238,13239],{"class":9668},"\"\u002Fvector\u002Fcerts\u002Fserver.crt\"\n",[2183,13241,13242,13245,13247],{"class":9584,"line":9690},[2183,13243,13244],{"class":12228},"      key_file",[2183,13246,12232],{"class":9602},[2183,13248,13249],{"class":9668},"\"\u002Fvector\u002Fcerts\u002Fserver.key\"\n",[19,13251,13252,13253,13256],{},"Côté Windows, c'est là que ça se complique. L'agent Datadog utilise le magasin de certificats Windows, pas un fichier PEM. Si le certificat CA interne n'est pas dans le store ",[1676,13254,13255],{},"Trusted Root Certification Authorities"," de la machine, l'agent refuse la connexion TLS sans message d'erreur très explicite.",[9575,13258,13262],{"className":13259,"code":13260,"language":13261,"meta":116,"style":116},"language-powershell shiki shiki-themes github-dark-default","Import-Certificate -FilePath \"C:\\\\certs\\\\ca-interne.crt\" -CertStoreLocation Cert:\\\\LocalMachine\\\\Root\n","powershell",[1676,13263,13264],{"__ignoreMap":116},[2183,13265,13266,13269,13272,13275,13278,13280],{"class":9584,"line":9585},[2183,13267,13268],{"class":9598},"Import-Certificate",[2183,13270,13271],{"class":9594}," -",[2183,13273,13274],{"class":9602},"FilePath ",[2183,13276,13277],{"class":9668},"\"C:\\\\certs\\\\ca-interne.crt\"",[2183,13279,13271],{"class":9594},[2183,13281,13282],{"class":9602},"CertStoreLocation Cert:\\\\LocalMachine\\\\Root\n",[19,13284,13285,13286,13289],{},"Pensez aussi à vérifier la connectivité avec ",[1676,13287,13288],{},"Test-NetConnection"," avant de chercher un bug applicatif :",[9575,13291,13293],{"className":13259,"code":13292,"language":13261,"meta":116,"style":116},"Test-NetConnection -ComputerName vector.internal.company.local -Port 8443\n",[1676,13294,13295],{"__ignoreMap":116},[2183,13296,13297,13299,13301,13304,13307,13310],{"class":9584,"line":9585},[2183,13298,13288],{"class":9598},[2183,13300,13271],{"class":9594},[2183,13302,13303],{"class":9602},"ComputerName vector.internal.company.local ",[2183,13305,13306],{"class":9594},"-",[2183,13308,13309],{"class":9602},"Port ",[2183,13311,13312],{"class":9598},"8443\n",[12130,13314],{},[29,13316,13318],{"id":13317},"la-double-anonymisation-ceinture-et-bretelles","La double anonymisation : ceinture et bretelles",[19,13320,13321,13322,13327],{},"Le client avait une exigence forte : aucune ",[50,13323,13326],{"href":13324,"rel":13325},"https:\u002F\u002Fwww.cnil.fr\u002Ffr\u002Fdefinition\u002Fdonnee-personnelle",[54],"donnée à caractère personnel (DCP)"," ne doit quitter le réseau interne. On a donc mis en place une anonymisation à deux niveaux.",[19,13329,13330],{},[66,13331],{"alt":13332,"src":13333},"Schéma de traitement des données pour l’anonymisation avec Vector","\u002Fcontent-assets\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector\u002Fassets\u002Fimg4.webp",[87,13335,13337],{"id":13336},"niveau-1-agent-datadog-serveurs-windows","Niveau 1 : Agent Datadog (serveurs Windows)",[19,13339,13340,13341,13344,13345,13348,13349,13352],{},"L'agent Datadog supporte nativement des ",[1676,13342,13343],{},"processing_rules"," de type ",[1676,13346,13347],{},"mask_sequences"," dans la section ",[1676,13350,13351],{},"logs_config",". On masque à la source :",[9575,13354,13356],{"className":12219,"code":13355,"language":12221,"meta":116,"style":116},"logs_config:\n  processing_rules:\n    - type: mask_sequences\n      name: mask_ip_addresses\n      pattern: '(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'\n      replace_placeholder: \"[HIDE_IP]\"\n\n    - type: mask_sequences\n      name: mask_emails\n      pattern: '[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\\\.[a-zA-Z0-9-.]+'\n      replace_placeholder: \"[HIDE_EMAIL]\"\n\n    - type: mask_sequences\n      name: mask_phone_numbers\n      pattern: '(?:\\\\+33|0)[1-9]\\\\d{8}'\n      replace_placeholder: \"[HIDE_PHONE_NUMBER]\"\n",[1676,13357,13358,13364,13371,13383,13393,13403,13413,13417,13427,13436,13445,13454,13458,13468,13477,13486],{"__ignoreMap":116},[2183,13359,13360,13362],{"class":9584,"line":9585},[2183,13361,13351],{"class":12228},[2183,13363,12253],{"class":9602},[2183,13365,13366,13369],{"class":9584,"line":117},[2183,13367,13368],{"class":12228},"  processing_rules",[2183,13370,12253],{"class":9602},[2183,13372,13373,13375,13378,13380],{"class":9584,"line":124},[2183,13374,12678],{"class":9602},[2183,13376,13377],{"class":12228},"type",[2183,13379,12232],{"class":9602},[2183,13381,13382],{"class":9668},"mask_sequences\n",[2183,13384,13385,13388,13390],{"class":9584,"line":442},[2183,13386,13387],{"class":12228},"      name",[2183,13389,12232],{"class":9602},[2183,13391,13392],{"class":9668},"mask_ip_addresses\n",[2183,13394,13395,13398,13400],{"class":9584,"line":9662},[2183,13396,13397],{"class":12228},"      pattern",[2183,13399,12232],{"class":9602},[2183,13401,13402],{"class":9668},"'(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'\n",[2183,13404,13405,13408,13410],{"class":9584,"line":9675},[2183,13406,13407],{"class":12228},"      replace_placeholder",[2183,13409,12232],{"class":9602},[2183,13411,13412],{"class":9668},"\"[HIDE_IP]\"\n",[2183,13414,13415],{"class":9584,"line":9681},[2183,13416,10665],{"emptyLinePlaceholder":133},[2183,13418,13419,13421,13423,13425],{"class":9584,"line":9690},[2183,13420,12678],{"class":9602},[2183,13422,13377],{"class":12228},[2183,13424,12232],{"class":9602},[2183,13426,13382],{"class":9668},[2183,13428,13429,13431,13433],{"class":9584,"line":9696},[2183,13430,13387],{"class":12228},[2183,13432,12232],{"class":9602},[2183,13434,13435],{"class":9668},"mask_emails\n",[2183,13437,13438,13440,13442],{"class":9584,"line":9718},[2183,13439,13397],{"class":12228},[2183,13441,12232],{"class":9602},[2183,13443,13444],{"class":9668},"'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\\\.[a-zA-Z0-9-.]+'\n",[2183,13446,13447,13449,13451],{"class":9584,"line":9736},[2183,13448,13407],{"class":12228},[2183,13450,12232],{"class":9602},[2183,13452,13453],{"class":9668},"\"[HIDE_EMAIL]\"\n",[2183,13455,13456],{"class":9584,"line":9760},[2183,13457,10665],{"emptyLinePlaceholder":133},[2183,13459,13460,13462,13464,13466],{"class":9584,"line":9931},[2183,13461,12678],{"class":9602},[2183,13463,13377],{"class":12228},[2183,13465,12232],{"class":9602},[2183,13467,13382],{"class":9668},[2183,13469,13470,13472,13474],{"class":9584,"line":9938},[2183,13471,13387],{"class":12228},[2183,13473,12232],{"class":9602},[2183,13475,13476],{"class":9668},"mask_phone_numbers\n",[2183,13478,13479,13481,13483],{"class":9584,"line":9944},[2183,13480,13397],{"class":12228},[2183,13482,12232],{"class":9602},[2183,13484,13485],{"class":9668},"'(?:\\\\+33|0)[1-9]\\\\d{8}'\n",[2183,13487,13488,13490,13492],{"class":9584,"line":9963},[2183,13489,13407],{"class":12228},[2183,13491,12232],{"class":9602},[2183,13493,13494],{"class":9668},"\"[HIDE_PHONE_NUMBER]\"\n",[87,13496,13498],{"id":13497},"niveau-2-vector-serveur-relai","Niveau 2 : Vector (serveur relai)",[19,13500,13501],{},"Même si l'agent fait le boulot, on applique une seconde passe dans Vector via un transform VRL. Le principe : même si un agent est mal configuré ou qu'un nouveau serveur est ajouté sans les processing rules, les données sont quand même anonymisées avant de sortir vers Datadog.",[9575,13503,13505],{"className":12219,"code":13504,"language":12221,"meta":116,"style":116},"transforms:\n  anonymize_logs:\n    type: remap\n    inputs:\n      - \"datadog_agents.logs\"\n    source: |\n      .message = to_string(.message) ?? \"\"\n\n      .message = redact!(.message,\n        [r'(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'],\n        {\"type\": \"text\", \"replacement\": \"[HIDE_IP]\"}\n      )\n\n      .message = redact!(.message,\n        [r'https?:\u002F\u002F[\\\\w\\\\-]+(\\\\.[\\\\w\\\\-]+)+([\\\\w\\\\-.,@?^=%&:\u002F~+#]*[\\\\w\\\\-@?^=%&\u002F~+#])?'],\n        {\"type\": \"text\", \"replacement\": \"[HIDE_URL]\"}\n      )\n\n      .message = redact!(.message,\n        [r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\\\.[a-zA-Z0-9-.]+'],\n        {\"type\": \"text\", \"replacement\": \"[HIDE_EMAIL]\"}\n      )\n\n      .message = redact!(.message,\n        [r'(?:\\\\+33|0)[1-9]\\\\d{8}'],\n        {\"type\": \"text\", \"replacement\": \"[HIDE_PHONE_NUMBER]\"}\n      )\n",[1676,13506,13507,13514,13521,13530,13537,13544,13554,13559,13563,13568,13573,13578,13583,13587,13591,13596,13601,13605,13609,13613,13618,13623,13627,13631,13635,13640,13645],{"__ignoreMap":116},[2183,13508,13509,13512],{"class":9584,"line":9585},[2183,13510,13511],{"class":12228},"transforms",[2183,13513,12253],{"class":9602},[2183,13515,13516,13519],{"class":9584,"line":117},[2183,13517,13518],{"class":12228},"  anonymize_logs",[2183,13520,12253],{"class":9602},[2183,13522,13523,13525,13527],{"class":9584,"line":124},[2183,13524,13122],{"class":12228},[2183,13526,12232],{"class":9602},[2183,13528,13529],{"class":9668},"remap\n",[2183,13531,13532,13535],{"class":9584,"line":442},[2183,13533,13534],{"class":12228},"    inputs",[2183,13536,12253],{"class":9602},[2183,13538,13539,13541],{"class":9584,"line":9662},[2183,13540,12381],{"class":9602},[2183,13542,13543],{"class":9668},"\"datadog_agents.logs\"\n",[2183,13545,13546,13549,13551],{"class":9584,"line":9675},[2183,13547,13548],{"class":12228},"    source",[2183,13550,12232],{"class":9602},[2183,13552,13553],{"class":9594},"|\n",[2183,13555,13556],{"class":9584,"line":9681},[2183,13557,13558],{"class":9668},"      .message = to_string(.message) ?? \"\"\n",[2183,13560,13561],{"class":9584,"line":9690},[2183,13562,10665],{"emptyLinePlaceholder":133},[2183,13564,13565],{"class":9584,"line":9696},[2183,13566,13567],{"class":9668},"      .message = redact!(.message,\n",[2183,13569,13570],{"class":9584,"line":9718},[2183,13571,13572],{"class":9668},"        [r'(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'],\n",[2183,13574,13575],{"class":9584,"line":9736},[2183,13576,13577],{"class":9668},"        {\"type\": \"text\", \"replacement\": \"[HIDE_IP]\"}\n",[2183,13579,13580],{"class":9584,"line":9760},[2183,13581,13582],{"class":9668},"      )\n",[2183,13584,13585],{"class":9584,"line":9931},[2183,13586,10665],{"emptyLinePlaceholder":133},[2183,13588,13589],{"class":9584,"line":9938},[2183,13590,13567],{"class":9668},[2183,13592,13593],{"class":9584,"line":9944},[2183,13594,13595],{"class":9668},"        [r'https?:\u002F\u002F[\\\\w\\\\-]+(\\\\.[\\\\w\\\\-]+)+([\\\\w\\\\-.,@?^=%&:\u002F~+#]*[\\\\w\\\\-@?^=%&\u002F~+#])?'],\n",[2183,13597,13598],{"class":9584,"line":9963},[2183,13599,13600],{"class":9668},"        {\"type\": \"text\", \"replacement\": \"[HIDE_URL]\"}\n",[2183,13602,13603],{"class":9584,"line":9981},[2183,13604,13582],{"class":9668},[2183,13606,13607],{"class":9584,"line":10008},[2183,13608,10665],{"emptyLinePlaceholder":133},[2183,13610,13611],{"class":9584,"line":10016},[2183,13612,13567],{"class":9668},[2183,13614,13615],{"class":9584,"line":10027},[2183,13616,13617],{"class":9668},"        [r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\\\.[a-zA-Z0-9-.]+'],\n",[2183,13619,13620],{"class":9584,"line":10379},[2183,13621,13622],{"class":9668},"        {\"type\": \"text\", \"replacement\": \"[HIDE_EMAIL]\"}\n",[2183,13624,13625],{"class":9584,"line":10409},[2183,13626,13582],{"class":9668},[2183,13628,13629],{"class":9584,"line":10417},[2183,13630,10665],{"emptyLinePlaceholder":133},[2183,13632,13633],{"class":9584,"line":12426},[2183,13634,13567],{"class":9668},[2183,13636,13637],{"class":9584,"line":12434},[2183,13638,13639],{"class":9668},"        [r'(?:\\\\+33|0)[1-9]\\\\d{8}'],\n",[2183,13641,13642],{"class":9584,"line":12442},[2183,13643,13644],{"class":9668},"        {\"type\": \"text\", \"replacement\": \"[HIDE_PHONE_NUMBER]\"}\n",[2183,13646,13647],{"class":9584,"line":12453},[2183,13648,13582],{"class":9668},[19,13650,13651],{},"VRL a l'avantage d'être compilé et très performant. Sur notre volume de logs, l'impact sur le throughput de Vector était négligeable.",[19,13653,13654],{},"La logique est simple : le niveau 1 est la ligne de défense principale, le niveau 2 est le filet de sécurité. Si un admin ajoute un serveur sans configurer les processing rules de l'agent, les PII sont quand même masquées par Vector.",[12130,13656],{},[29,13658,13660],{"id":13659},"résilience-le-buffer-disque-write-ahead-log","Résilience : le buffer disque write-ahead log",[19,13662,13663],{},"Que se passe-t-il si la connexion entre Vector et Datadog tombe ? Par défaut, Vector buffer en mémoire. Un crash ou un redémarrage pendant une coupure réseau, et ce sont des heures de logs d'audit qui disparaissent.",[19,13665,13666],{},"On a activé le buffer disque, qui fonctionne comme un write-ahead log :",[9575,13668,13670],{"className":12219,"code":13669,"language":12221,"meta":116,"style":116},"sinks:\n  dd_logs:\n    type: datadog_logs\n    inputs:\n      - anonymize_logs\n    default_api_key: \"${DD_API_KEY}\"\n    site: \"datadoghq.eu\"\n    buffer:\n      type: disk\n      max_size: 85899345920  # ~80 Go\n      when_full: block\n",[1676,13671,13672,13679,13686,13695,13701,13708,13718,13727,13734,13744,13757],{"__ignoreMap":116},[2183,13673,13674,13677],{"class":9584,"line":9585},[2183,13675,13676],{"class":12228},"sinks",[2183,13678,12253],{"class":9602},[2183,13680,13681,13684],{"class":9584,"line":117},[2183,13682,13683],{"class":12228},"  dd_logs",[2183,13685,12253],{"class":9602},[2183,13687,13688,13690,13692],{"class":9584,"line":124},[2183,13689,13122],{"class":12228},[2183,13691,12232],{"class":9602},[2183,13693,13694],{"class":9668},"datadog_logs\n",[2183,13696,13697,13699],{"class":9584,"line":442},[2183,13698,13534],{"class":12228},[2183,13700,12253],{"class":9602},[2183,13702,13703,13705],{"class":9584,"line":9662},[2183,13704,12381],{"class":9602},[2183,13706,13707],{"class":9668},"anonymize_logs\n",[2183,13709,13710,13713,13715],{"class":9584,"line":9675},[2183,13711,13712],{"class":12228},"    default_api_key",[2183,13714,12232],{"class":9602},[2183,13716,13717],{"class":9668},"\"${DD_API_KEY}\"\n",[2183,13719,13720,13723,13725],{"class":9584,"line":9681},[2183,13721,13722],{"class":12228},"    site",[2183,13724,12232],{"class":9602},[2183,13726,12661],{"class":9668},[2183,13728,13729,13732],{"class":9584,"line":9690},[2183,13730,13731],{"class":12228},"    buffer",[2183,13733,12253],{"class":9602},[2183,13735,13736,13739,13741],{"class":9584,"line":9696},[2183,13737,13738],{"class":12228},"      type",[2183,13740,12232],{"class":9602},[2183,13742,13743],{"class":9668},"disk\n",[2183,13745,13746,13749,13751,13754],{"class":9584,"line":9718},[2183,13747,13748],{"class":12228},"      max_size",[2183,13750,12232],{"class":9602},[2183,13752,13753],{"class":9598},"85899345920",[2183,13755,13756],{"class":9588},"  # ~80 Go\n",[2183,13758,13759,13762,13764],{"class":9584,"line":9736},[2183,13760,13761],{"class":12228},"      when_full",[2183,13763,12232],{"class":9602},[2183,13765,13766],{"class":9668},"block\n",[19,13768,13769],{},"Le fonctionnement :",[277,13771,13772,13779,13785,13788],{},[280,13773,13774,13775,13778],{},"Chaque événement est ",[414,13776,13777],{},"écrit sur disque"," avant d'être envoyé",[280,13780,13781,13782],{},"En cas de coupure, les événements s'accumulent dans ",[1676,13783,13784],{},"\u002Fvector\u002Fbuffer\u002F",[280,13786,13787],{},"Quand la connexion revient, Vector vide automatiquement le buffer",[280,13789,13790],{},"En cas de crash, les données sont récupérées au redémarrage",[19,13792,13793,13794,13797],{},"Les fichiers buffer sont des segments de 128 Mo en append-only. Le paramètre ",[1676,13795,13796],{},"when_full: block"," signifie que si le buffer de 80 Go est plein, Vector bloque l'ingestion plutôt que de perdre des données. C'est un choix assumé : on préfère que les agents soient temporairement bloqués plutôt que de perdre des logs.",[87,13799,13801],{"id":13800},"un-point-dattention-sur-le-monitoring-du-buffer","Un point d'attention sur le monitoring du buffer",[19,13803,13804,13805,13808],{},"Le buffer disque crée des fichiers ",[1676,13806,13807],{},"buffer-data-X.dat"," qui ne font que grossir — c'est normal, c'est le comportement d'un write-ahead log. Un fichier de quelques Mo qui grossit lentement, c'est le fonctionnement nominal. Si vous voyez plusieurs fichiers apparaître et la taille exploser, c'est que la connexion vers Datadog est dégradée.",[9575,13810,13812],{"className":11731,"code":13811,"language":11733,"meta":116,"style":116},"# Surveiller en temps réel\nwatch -n 5 'ls -lah \u002Fvector\u002Fbuffer\u002Fdd_logs\u002F'\n",[1676,13813,13814,13819],{"__ignoreMap":116},[2183,13815,13816],{"class":9584,"line":9585},[2183,13817,13818],{"class":9588},"# Surveiller en temps réel\n",[2183,13820,13821,13824,13827,13830],{"class":9584,"line":117},[2183,13822,13823],{"class":11740},"watch",[2183,13825,13826],{"class":9598}," -n",[2183,13828,13829],{"class":9598}," 5",[2183,13831,13832],{"class":9668}," 'ls -lah \u002Fvector\u002Fbuffer\u002Fdd_logs\u002F'\n",[12130,13834],{},[29,13836,13838],{"id":13837},"langle-mort-qui-surveille-le-surveillant","L'angle mort : qui surveille le surveillant ?",[19,13840,13841],{},"Un problème classique avec un relai centralisé : si Vector tombe, toutes les métriques et logs de Vector... ne sont plus transmis. On perd la visibilité exactement quand on en a le plus besoin.",[19,13843,13844,13845,13848,13849,13852],{},"La solution : un ",[414,13846,13847],{},"agent Datadog dédié"," installé directement sur le serveur Vector, qui se connecte à Datadog ",[414,13850,13851],{},"sans passer par Vector",". Cet agent surveille :",[277,13854,13855,13864,13873,13882],{},[280,13856,13857,9817,13860,13863],{},[414,13858,13859],{},"Le processus Vector",[1676,13861,13862],{},"process.d",") : est-ce que le binaire tourne ?",[280,13865,13866,9817,13869,13872],{},[414,13867,13868],{},"Le port 8443",[1676,13870,13871],{},"tcp_check.d",") : est-ce que Vector écoute ?",[280,13874,13875,9817,13878,13881],{},[414,13876,13877],{},"L'espace disque",[1676,13879,13880],{},"disk.d",") : le buffer risque-t-il de saturer ?",[280,13883,13884,9817,13887,13890],{},[414,13885,13886],{},"Les logs systemd",[1676,13888,13889],{},"journal.d",") : y a-t-il des erreurs ?",[19,13892,13893],{},"Ça crée un canal de monitoring indépendant. Si Vector crash, on le sait immédiatement via l'agent dédié.",[19,13895,13896],{},"Les alertes à poser dans Datadog pour avoir l'esprit tranquille :",[277,13898,13899,13905,13911,13917],{},[280,13900,13901,13904],{},[414,13902,13903],{},"Process down"," : le processus Vector n'est pas détecté depuis 2 minutes",[280,13906,13907,13910],{},[414,13908,13909],{},"Port 8443 injoignable"," : les agents ne peuvent plus envoyer leurs données",[280,13912,13913,13916],{},[414,13914,13915],{},"Disque buffer > 90%"," : risque de perte si le buffer sature",[280,13918,13919,13922],{},[414,13920,13921],{},"Absence de logs applicatifs"," : aucun log reçu depuis 15 minutes (coupure complète)",[12130,13924],{},[29,13926,13928],{"id":13927},"la-gestion-des-secrets","La gestion des secrets",[19,13930,13931],{},"Un point qu'on sous-estime souvent : comment gérer la clé API Datadog sans la mettre en dur dans les fichiers de config.",[19,13933,13934,13935,13938,13939,13942,13943,388],{},"Côté Vector, la clé est injectée via une variable d'environnement ",[1676,13936,13937],{},"DD_API_KEY"," dans le fichier ",[1676,13940,13941],{},"EnvironmentFile"," du service systemd. Le fichier est lisible uniquement par l'utilisateur système ",[1676,13944,13945],{},"vector",[9575,13947,13949],{"className":12219,"code":13948,"language":12221,"meta":116,"style":116},"# vector.yaml — la clé n'est jamais en dur\nsinks:\n  dd_logs:\n    default_api_key: \"${DD_API_KEY}\"\n",[1676,13950,13951,13956,13962,13968],{"__ignoreMap":116},[2183,13952,13953],{"class":9584,"line":9585},[2183,13954,13955],{"class":9588},"# vector.yaml — la clé n'est jamais en dur\n",[2183,13957,13958,13960],{"class":9584,"line":117},[2183,13959,13676],{"class":12228},[2183,13961,12253],{"class":9602},[2183,13963,13964,13966],{"class":9584,"line":124},[2183,13965,13683],{"class":12228},[2183,13967,12253],{"class":9602},[2183,13969,13970,13972,13974],{"class":9584,"line":442},[2183,13971,13712],{"class":12228},[2183,13973,12232],{"class":9602},[2183,13975,13717],{"class":9668},[9575,13977,13979],{"className":11731,"code":13978,"language":11733,"meta":116,"style":116},"# vector.default (EnvironmentFile systemd, chmod 600)\nDD_API_KEY=votre-clé-api\n",[1676,13980,13981,13986],{"__ignoreMap":116},[2183,13982,13983],{"class":9584,"line":9585},[2183,13984,13985],{"class":9588},"# vector.default (EnvironmentFile systemd, chmod 600)\n",[2183,13987,13988,13990,13992],{"class":9584,"line":117},[2183,13989,13937],{"class":9602},[2183,13991,2356],{"class":9594},[2183,13993,13994],{"class":9668},"votre-clé-api\n",[19,13996,13997,13998,14000],{},"Côté agents Windows, la clé est un placeholder ",[1676,13999,13084],{}," puisque les agents ne contactent jamais Datadog directement. L'avantage : même si quelqu'un lit la config d'un serveur Windows, il n'a pas la vraie clé API.",[19,14002,14003,14004,14007,14008,388],{},"Le certificat TLS privé est aussi protégé en ",[1676,14005,14006],{},"chmod 600",", accessible uniquement par l'utilisateur ",[1676,14009,13945],{},[12130,14011],{},[29,14013,14015],{"id":14014},"ce-que-jaurais-fait-différemment","Ce que j'aurais fait différemment",[19,14017,14018],{},"Quelques leçons tirées de cette intervention :",[19,14020,14021,14024],{},[414,14022,14023],{},"Préparer la checklist en amont."," On a perdu du temps sur des prérequis manquants : ouvertures de flux réseau pas encore faites, certificats pas générés, serveur Linux pas encore provisionné. Une checklist détaillée envoyée au client 2 semaines avant aurait évité ça.",[19,14026,14027,11275,14030,11275,14034,14037,14038,14040],{},[414,14028,14029],{},"Tester",[414,14031,14032],{},[1676,14033,13028],{},[414,14035,14036],{},"dès le début."," Ce paramètre est le piège classique de la source ",[1676,14039,13065],{}," dans Vector. Si je refais ce setup, c'est le premier truc que je vérifie.",[19,14042,14043,14046],{},[414,14044,14045],{},"Automatiser le déploiement des agents Windows."," On a configuré chaque serveur à la main. Avec Ansible, on aurait pu déployer la config Datadog Agent + certificat CA sur tous les serveurs en une commande.",[19,14048,14049,11275,14052,14058,14059,14062],{},[414,14050,14051],{},"Documenter le",[414,14053,14054,14057],{},[1676,14055,14056],{},"vector tap","****."," C'est la commande la plus utile pour débugger. ",[1676,14060,14061],{},"vector tap --inputs-of dd_logs"," montre en temps réel les événements qui arrivent dans un sink. Ça m'a sauvé plusieurs fois.",[12130,14064],{},[29,14066,14068],{"id":14067},"les-commandes-de-survie","Les commandes de survie",[19,14070,14071],{},"Pour ceux qui souhaitent se lancer avec un setup similaire, voici les commandes utilisées dans notre cas d'étude :",[9575,14073,14075],{"className":11731,"code":14074,"language":11733,"meta":116,"style":116},"# Santé de Vector\ncurl \u003Chttp:\u002F\u002F127.0.0.1:8686\u002Fhealth>\n\n# Vue temps réel du pipeline (events in\u002Fout par composant)\nvector top\n\n# Observer les événements en transit avant un sink\nvector tap --inputs-of dd_logs\n\n# Vérifier les métriques d'envoi\ncurl -s \u003Chttp:\u002F\u002F127.0.0.1:8686\u002Fapi\u002Fv1\u002Fmetrics> | grep component_sent_events_total\n\n# Taille du buffer\ncurl -s \u003Chttp:\u002F\u002F127.0.0.1:8686\u002Fapi\u002Fv1\u002Fmetrics> | grep buffer_byte_size\n\n# Valider la config avant de redémarrer\nvector validate --config-dir \u002Fpath\u002Fto\u002Fconfig\u002F\n",[1676,14076,14077,14082,14099,14103,14108,14115,14119,14124,14137,14141,14146,14172,14176,14181,14202,14206,14211],{"__ignoreMap":116},[2183,14078,14079],{"class":9584,"line":9585},[2183,14080,14081],{"class":9588},"# Santé de Vector\n",[2183,14083,14084,14087,14090,14093,14096],{"class":9584,"line":117},[2183,14085,14086],{"class":11740},"curl",[2183,14088,14089],{"class":9594}," \u003C",[2183,14091,14092],{"class":9668},"http:\u002F\u002F127.0.0.1:8686\u002Fhealt",[2183,14094,14095],{"class":9602},"h",[2183,14097,14098],{"class":9594},">\n",[2183,14100,14101],{"class":9584,"line":124},[2183,14102,10665],{"emptyLinePlaceholder":133},[2183,14104,14105],{"class":9584,"line":442},[2183,14106,14107],{"class":9588},"# Vue temps réel du pipeline (events in\u002Fout par composant)\n",[2183,14109,14110,14112],{"class":9584,"line":9662},[2183,14111,13945],{"class":11740},[2183,14113,14114],{"class":9668}," top\n",[2183,14116,14117],{"class":9584,"line":9675},[2183,14118,10665],{"emptyLinePlaceholder":133},[2183,14120,14121],{"class":9584,"line":9681},[2183,14122,14123],{"class":9588},"# Observer les événements en transit avant un sink\n",[2183,14125,14126,14128,14131,14134],{"class":9584,"line":9690},[2183,14127,13945],{"class":11740},[2183,14129,14130],{"class":9668}," tap",[2183,14132,14133],{"class":9598}," --inputs-of",[2183,14135,14136],{"class":9668}," dd_logs\n",[2183,14138,14139],{"class":9584,"line":9696},[2183,14140,10665],{"emptyLinePlaceholder":133},[2183,14142,14143],{"class":9584,"line":9718},[2183,14144,14145],{"class":9588},"# Vérifier les métriques d'envoi\n",[2183,14147,14148,14150,14153,14155,14158,14160,14163,14166,14169],{"class":9584,"line":9736},[2183,14149,14086],{"class":11740},[2183,14151,14152],{"class":9598}," -s",[2183,14154,14089],{"class":9594},[2183,14156,14157],{"class":9668},"http:\u002F\u002F127.0.0.1:8686\u002Fapi\u002Fv1\u002Fmetric",[2183,14159,2226],{"class":9602},[2183,14161,14162],{"class":9594},">",[2183,14164,14165],{"class":9594}," |",[2183,14167,14168],{"class":11740}," grep",[2183,14170,14171],{"class":9668}," component_sent_events_total\n",[2183,14173,14174],{"class":9584,"line":9760},[2183,14175,10665],{"emptyLinePlaceholder":133},[2183,14177,14178],{"class":9584,"line":9931},[2183,14179,14180],{"class":9588},"# Taille du buffer\n",[2183,14182,14183,14185,14187,14189,14191,14193,14195,14197,14199],{"class":9584,"line":9938},[2183,14184,14086],{"class":11740},[2183,14186,14152],{"class":9598},[2183,14188,14089],{"class":9594},[2183,14190,14157],{"class":9668},[2183,14192,2226],{"class":9602},[2183,14194,14162],{"class":9594},[2183,14196,14165],{"class":9594},[2183,14198,14168],{"class":11740},[2183,14200,14201],{"class":9668}," buffer_byte_size\n",[2183,14203,14204],{"class":9584,"line":9944},[2183,14205,10665],{"emptyLinePlaceholder":133},[2183,14207,14208],{"class":9584,"line":9963},[2183,14209,14210],{"class":9588},"# Valider la config avant de redémarrer\n",[2183,14212,14213,14215,14218,14221],{"class":9584,"line":9981},[2183,14214,13945],{"class":11740},[2183,14216,14217],{"class":9668}," validate",[2183,14219,14220],{"class":9598}," --config-dir",[2183,14222,14223],{"class":9668}," \u002Fpath\u002Fto\u002Fconfig\u002F\n",[12130,14225],{},[29,14227,14229],{"id":14228},"en-résumé","En résumé",[19,14231,14232,14233,14236],{},"Mettre Datadog sur des serveurs on-premise sans internet, c'est faisable.\n",[50,14234,12848],{"href":12844,"rel":14235},[54]," est l'outil qui manquait pour combler le gap entre un réseau isolé et un SaaS de monitoring. Il permet de construire un pipeline complet (logs, métriques, traces APM) avec de l'anonymisation, du buffering résilient et un monitoring du monitoring.",[19,14238,14239,14240,14242],{},"Les vrais pièges ne sont pas dans la complexité de l'architecture (qui est assez simple au final), mais dans les détails de configuration. ",[1676,14241,13156],{},", les certificats dans le bon magasin Windows, le buffer disque activé — ce sont ces petits paramètres qui font la différence.",[19,14244,14245,14248,14249,14253],{},[414,14246,14247],{},"Si vous travaillez dans le secteur bancaire, l'assurance ou la défense, les environnements air-gapped sont votre quotidien.","\nCe retour d'expérience démontre qu'il existe des solutions pour adopter une observabilité moderne cloud-native, même liée à des contraintes fortes de sécurité. Chez ",[50,14250,12027],{"href":14251,"rel":14252},"https:\u002F\u002Fhoppr.tech\u002F",[54],", nous pouvons aisément nous rendre disponibles pour partager ce retour d'expérience et accompagner vos équipes sur des use cases similaires.",[12130,14255],{},[19,14257,14258],{},[1032,14259,14260],{},"Stack utilisée : Vector 0.54, Datadog Agent v7.35+, Datadog .NET Tracer, OpenTelemetry SDK .NET, Debian 11, Windows Server.",[10970,14262,14263],{},"html pre.shiki code .sPWt5, html code.shiki .sPWt5{--shiki-default:#7EE787}html pre.shiki code .sZEs4, html code.shiki .sZEs4{--shiki-default:#E6EDF3}html pre.shiki code .s9uIt, html code.shiki .s9uIt{--shiki-default:#A5D6FF}html pre.shiki code .sFSAA, html code.shiki .sFSAA{--shiki-default:#79C0FF}html pre.shiki code .sH3jZ, html code.shiki .sH3jZ{--shiki-default:#8B949E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .suJrU, html code.shiki .suJrU{--shiki-default:#FF7B72}html pre.shiki code .sQhOw, html code.shiki .sQhOw{--shiki-default:#FFA657}",{"title":116,"searchDepth":117,"depth":117,"links":14265},[14266,14267,14268,14269,14274,14275,14279,14282,14283,14284,14285,14286],{"id":12856,"depth":117,"text":12857},{"id":12907,"depth":117,"text":12908},{"id":12998,"depth":117,"text":12999},{"id":13024,"depth":117,"text":14270,"children":14271},"Piège n°1 : store_api_key — un comportement par défaut trompeur",[14272,14273],{"id":13039,"depth":124,"text":13040},{"id":13094,"depth":124,"text":13095},{"id":13172,"depth":117,"text":13173},{"id":13317,"depth":117,"text":13318,"children":14276},[14277,14278],{"id":13336,"depth":124,"text":13337},{"id":13497,"depth":124,"text":13498},{"id":13659,"depth":117,"text":13660,"children":14280},[14281],{"id":13800,"depth":124,"text":13801},{"id":13837,"depth":117,"text":13838},{"id":13927,"depth":117,"text":13928},{"id":14014,"depth":117,"text":14015},{"id":14067,"depth":117,"text":14068},{"id":14228,"depth":117,"text":14229},"2026-03-31T09:19:57.655Z","Comment faire fonctionner Datadog sur des serveurs Windows isolés, sans internet et avec une anonymisation stricte des données ? Retour d'expérience sur la mise en place de Vector pour connecter un cl",{},"\u002Fblogs\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector",[14292,14294],{"id":552,"name":553,"image":14293,"linkedin":555,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Ff8f82a79-9d41-4302-b1a5-37882985167f\u002Fnicoz_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466WKI65JWJ%2F20260331%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260331T091955Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHAaCXVzLXdlc3QtMiJHMEUCIQDSZgDjNi3sP1o45M%2BdiEMmTxbermZOZmAJhrALjcluPAIgdhUhGsn4X4i%2BLTUwRhgpR%2BycyNBzcMiyadnevYSS6u0q%2FwMIORAAGgw2Mzc0MjMxODM4MDUiDGRBhJxGc6GXZ6042yrcA8%2Fhlu1SVrjNWtDftbI5EZadBcy6XDcdg9%2B5I2GVEVqzYoMyruLfNqtQwGQ8fSdHnByX5HzehbigPR4KXzy3t0I%2BUjA%2BsgGnFq1SAY9TCFdeWCm%2F5%2B2pjEf1G5snq%2BbNYoqxJckPr2kLEqOY3b%2FEfRVRvwwo0bw0bQhJ%2BrNJ2WAyZx%2BqLMvAy8a3GihDlJzeicHsGoEZlOv9ZobTschCvLAHTLKAqUg1YpUUo9X8myPCg9wzKh4T8xs3m5zRjPE7D6y1lM%2BvNmq0gX4Y5%2B9S6qd%2BVSN3jk0gqAznAnCeUk%2FTwUhmlUgPxQTys6BY442vdQoimeFBEJoJFsWbUmvAkLTlANf8C9lpu5zI3XVv33%2BbpR1eKE0RP3cVY5iBBAhHAOXGlNL9oGDY3lScWCHq%2F6AH1O8czW7maRtPTx%2BQVe3sWKIQhRw9EMjyQJDIGbRybtR5f4BPz2U4Q37nQRjsDEKbw9sDhy3o2xXAEB4OIRBIUx6%2BwtzXA5GHVy%2FctByHzF32KJjd7NlHKDQWb540An3iYkmMYlGQcF%2BgdcKQTT2AVVIspHM9e%2BSTpEAx8uuhRffuKcZ3xB9qWUZcwGCTsdXI00rs9uGWRJDpZcXDT9HEywLSKdfuor68M%2B4qMIuCrs4GOqUBqZww9qFLtD4EKwiqojXS8g6YR9ncN9513NxjCEU475%2FMXoHCHBh457haiTO5Rr%2BkWN78O%2FxkxIGhEgD2EMho6er%2FrZfq6HY9iv2KK%2Fe1YeRtxVR9q7I%2FOrkalcmIjTQ3kRoDl3AboTpTWmYujp1xDv7RUJyot%2Fv4y7YDXFCmkpfhlQ%2B%2FOjY4PSdm1Ef3PL3B%2FgNt1Xh2zrXwcofdgVjSCdHBfTjw&X-Amz-Signature=0aebaf1925371cf4e94a15006b36e914fa485a156980ae99d9ba2b1e235eef74&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",{"id":137,"name":138,"image":14295,"linkedin":140,"x":14},"https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F82ebd0fe-de28-43f3-ab7b-0431af41baad\u002FPhoto_HoppR.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466YBLG6UZV%2F20260331%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260331T091957Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHAaCXVzLXdlc3QtMiJIMEYCIQCZDTZ53wTD%2FMHLqQw7NdLbfyVc18pjXxNyPvVZvvMmNgIhALUx7mgCQ7OCcfSP1mZF2elCzmFHCpVvwKPkwz2h%2B34nKv8DCDkQABoMNjM3NDIzMTgzODA1IgxCvzozw56iEmua0X4q3AODqxNXRnKdPDj%2FKPRTfuKWaWxKQFww6mO5SA5GRawkDcMJwaL8lEMh4eODhSx9x1h%2Fg3mbYXd6BqLXKGpMF%2BaLIoQCSQf9OObRawCnJ%2BOXlLXrL1VLfzgvZtSAMRcraA%2FDHgZxlwfOWUriQcvQdCfeKUNRvapPx2iBO4Bxrny%2BpyZFkCgXC7YO%2FarWsWCd7vGh7YlwdNp8pUKM36emkdvIm6g0W23XWlWks4%2FIATIrV63l1WbuW5D68RysasibgJL0RbZ0vdrcAesMdEX5qV5bp%2BuNSHMOVNCF12zrrFmUBYET7EGPf%2B8A73UDqYmL2bj4uXvRt7gaYiIsezb5jlLXdgSh2nZ0F92R4ti0b5jjATeZHe9KbcSZvtk62R8c6fw9bC1tY7kSH4%2BG%2B1a%2Fcwt%2BWSt9kpqYjms4M1z4lkHFm1DaVLyDiMPOaSy9JFJrrlBJcjHmcJNqfzPrxCVBYvsXpC9RAHMalbCdRnjPuu%2F8RqxbKCg3mAUjMnooHi%2B3IPFcpmgQf0u%2BPI1dlXe6CPDvo7EhNbEgjxDxj8LS4ZPMZFiEaC%2FYeLYZ4PUK8BpbkaHcJRAKx1HmQ7RaP4dGmweudXsar11i1JbjEdce8mxCM3zTSzqDnUDoToMfBTCMgq7OBjqkAZgtXeALAtzeCaTqSToVWmdPKm5TTyuSNp%2BDkkD%2FMmrMZW6skUyaOtIQDc%2B5lxMtGZ7DmkSohqawq9mD6yBsP1tCL2LKPW5B1UhjdojAR9xKATUv5hcXp%2Fmvcqk%2BiWTuU7T8CM8H4I8R7dRY%2FZQJvwoA0Whlk4iEzH3cfBca2mnZ7gYr8N9Jz%2BSX%2F42xyv2Vt%2FpBDUh86ll8KV63pQYW4qslu1hY&X-Amz-Signature=a2b9f094794a34d4486bc67dcf8099314e7f29a74febb40a215fc4303807c98e&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",{"title":12823,"description":14288},"blogs\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector\u002Findex",[151,12819,566,568,11200],"uF-tlypPlJw2idZ8gEKE7VxOoVOmYA7yllsNB7B_Yuw",{"id":14301,"title":14302,"alt":14303,"authors":14304,"body":14310,"date":14913,"description":14914,"extension":130,"image":131,"meta":14915,"navigation":133,"ogImage":131,"path":14916,"published":133,"reviewers":14917,"seo":14922,"stem":14923,"tags":14924,"__hash__":14927},"blogs\u002Fblogs\u002F2026-04-20-docker-volumes-et-perte-de-donnees-pourquoi-vos-donnees-disparaissent\u002Findex.md","Docker, volumes et perte de données : pourquoi vos données “disparaissent”","Image d’illustration: un conteneur cassé avec le texte “data lost” et un conteneur sécurisé avec une porte blindée",[14305],{"id":14306,"name":14307,"image":14308,"linkedin":14309,"x":14},"33bf4462-cd38-80da-845c-c63b2fd024bf","Florian Hirson",".\u002Fassets\u002Fauthor-florian-hirson.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fflorian-hirson\u002F",{"type":16,"value":14311,"toc":14900},[14312,14318,14322,14334,14337,14340,14342,14346,14349,14353,14364,14367,14387,14390,14395,14401,14403,14407,14410,14424,14430,14433,14441,14443,14447,14450,14453,14456,14460,14463,14466,14472,14482,14484,14488,14491,14808,14811,14813,14817,14820,14837,14840,14842,14846,14852,14858,14866,14869,14871,14874,14877,14894,14897],[19,14313,14314,14315],{},"Récemment, j’ai vécu ma première “vraie” perte de données dans mon homelab.\nRien de critique… mais suffisamment frustrant pour me rappeler une règle essentielle avec Docker : 👉 ",[414,14316,14317],{},"Les données ne disparaissent presque jamais. On ne regarde juste pas au bon endroit.",[29,14319,14321],{"id":14320},"le-contexte-calibre-web-dans-mon-cluster-docker-swarm","Le contexte : Calibre-Web dans mon cluster Docker Swarm",[19,14323,14324,14325,14328,14329,388],{},"Pour gérer ma bibliothèque d'ebooks, j'ai déployé ",[414,14326,14327],{},"Calibre-Web"," sur mon cluster ",[50,14330,14333],{"href":14331,"rel":14332},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fswarm\u002F",[54],"Docker Swarm",[19,14335,14336],{},"Tout fonctionnait parfaitement : j'uploadais des livres, je les lisais depuis n'importe quel appareil… bref, tout roulait. Quelques jours plus tard, je modifié ma stack et… catastrophe : plus aucun livre. Tout a disparu. 😱",[19,14338,14339],{},"Le plus étrange ? La configuration de Calibre-Web était toujours là. Comment était-ce possible ?",[12130,14341],{},[29,14343,14345],{"id":14344},"comprendre-comment-docker-gère-les-données","Comprendre comment Docker gère les données",[19,14347,14348],{},"Avant de comprendre le problème, il faut rappeler un point fondamental :",[87,14350,14352],{"id":14351},"par-défaut-un-conteneur-docker-est-éphémère","Par défaut, un conteneur Docker est éphémère",[277,14354,14355,14361],{},[280,14356,14357,14358],{},"Les fichiers sont stockés ",[414,14359,14360],{},"dans le conteneur",[280,14362,14363],{},"Si le conteneur est supprimé → les données disparaissent",[19,14365,14366],{},"Pour éviter ça, on utilise :",[277,14368,14369,14375,14384],{},[280,14370,14371,14372],{},"des ",[414,14373,14374],{},"volumes Docker",[280,14376,14371,14377],{},[50,14378,14381],{"href":14379,"rel":14380},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fstorage\u002Fbind-mounts\u002F",[54],[414,14382,14383],{},"bind mounts",[280,14385,14386],{},"ou des stockages distants (NFS, etc.)",[19,14388,14389],{},"👉 Mais Docker ne fait aucune magie :",[170,14391,14392],{},[19,14393,14394],{},"Il ne sait pas quels fichiers sont importants.",[19,14396,14397],{},[66,14398],{"alt":14399,"src":14400},"Schéma illustrant l’emplacement des données dans Docker. À gauche, la machine hôte est divisée en deux zones : le disque (avec un volume Docker stocké dans \u002Fvar\u002Flib\u002Fdocker\u002Fvolumes\u002F... et un répertoire local lié \u002Fhome\u002Fuser\u002Fprojects\u002F...) et la RAM (tmpfs, stockage temporaire comme \u002Ftmp ou \u002Frun\u002Fsecrets, perdu à l’arrêt du conteneur). En bas, un conteneur contient trois points de montage : \u002Fdata (volume), \u002Fapp\u002Fsrc (bind mount vers le disque hôte) et \u002Ftmp (tmpfs en mémoire), utilisés par l’application. À droite, un réseau permet de connecter ces stockages à des systèmes externes comme NFS (Linux), SMB (Windows) ou des services cloud (EBS, EFS).","\u002Fcontent-assets\u002F2026-04-20-docker-volumes-et-perte-de-donnees-pourquoi-vos-donnees-disparaissent\u002Fassets\u002Fimg1.webp",[12130,14402],{},[29,14404,14406],{"id":14405},"lorigine-du-problème","L'origine du problème",[19,14408,14409],{},"Après investigation, j'ai identifié la cause :",[277,14411,14412,14415,14418],{},[280,14413,14414],{},"J'avais mal lu la documentation du conteneur",[280,14416,14417],{},"J’avais monté un volume sur un mauvais chemin",[280,14419,14420,14421],{},"Et surtout : ce chemin ",[414,14422,14423],{},"n’était pas utilisé par l’application",[19,14425,14426,14427],{},"Lors de la recréation du conteneur, Docker a fait exactement ce qu’il est censé faire :\n👉 ",[414,14428,14429],{},"Créer automatiquement un nouveau volume vide",[19,14431,14432],{},"Résultat :",[277,14434,14435,14438],{},[280,14436,14437],{},"mon application lisait un dossier vide",[280,14439,14440],{},"mes données existaient toujours… mais dans un autre volume",[12130,14442],{},[29,14444,14446],{"id":14445},"une-erreur-très-courante-avec-docker","Une erreur très courante avec Docker",[19,14448,14449],{},"L’erreur que j’ai commise est en réalité assez fréquente avec Docker : monter un volume sur un mauvais chemin, ou sur un répertoire qui n’est tout simplement pas utilisé par l’application.",[19,14451,14452],{},"Dans ce type de situation, le comportement de Docker peut être trompeur. Le conteneur démarre sans problème, aucune erreur n’est remontée, et tout semble fonctionner normalement. Pourtant, les données ne sont pas écrites à l’endroit attendu.",[19,14454,14455],{},"En pratique, cela signifie que la persistance est silencieusement cassée : les fichiers sont stockés ailleurs, voire dans un volume éphémère, sans que cela ne soit immédiatement visible.",[29,14457,14459],{"id":14458},"schéma-ce-quil-sest-vraiment-passé","Schéma : ce qu’il s’est vraiment passé",[19,14461,14462],{},"Pour comprendre visuellement :",[19,14464,14465],{},"👉 C’est exactement ce qui rend ce problème piégeux.",[19,14467,14468],{},[66,14469],{"alt":14470,"src":14471},"Schéma montrant un conteneur Calibre-Web connecté à un NAS via des volumes Docker montés en NFS. Trois répertoires du conteneur (\u002Fconfig, \u002Flibrary, \u002Fcwa-book-ingest) sont reliés par des flèches vertes à des volumes stockés sur le NAS, indiquant un montage correct et fonctionnel. Un quatrième répertoire (\u002Fbooks) est représenté avec une ligne rouge en pointillés, signalant un volume mal monté ou non fonctionnel. Le NAS est illustré comme un stockage central recevant et fournissant les données au conteneur.","\u002Fcontent-assets\u002F2026-04-20-docker-volumes-et-perte-de-donnees-pourquoi-vos-donnees-disparaissent\u002Fassets\u002Fimg2.webp",[19,14473,14474,14475,14478,14479,388],{},"👉 ",[414,14476,14477],{},"La clé à comprendre :"," Docker ne “perd” pas les données. Il les écrit simplement ",[414,14480,14481],{},"ailleurs que là où l’application les lit",[12130,14483],{},[29,14485,14487],{"id":14486},"la-configuration-corrigée","La configuration corrigée",[19,14489,14490],{},"Voici la stack Compose fonctionnelle :",[9575,14492,14494],{"className":12219,"code":14493,"language":12221,"meta":116,"style":116},"services:\n  calibre-web-automated:\n    image: crocodilestick\u002Fcalibre-web-automated:v4.0.6\n    networks:\n      - proxy\n    volumes:\n      - calibre-web-config:\u002Fconfig\n      - calibre-web-library:\u002Fcalibre-library\n      - calibre-web-ingest:\u002Fcwa-book-ingest\n      - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n    environment:\n      - PUID=1000\n      - PGID=1000\n      - TZ=Europe\u002FParis\n      - DOCKER_MODS=linuxserver\u002Fmods:universal-calibre\n    deploy:\n      mode: replicated\n      replicas: 1\n\nnetworks:\n  proxy:\n    external: true\n\nvolumes:\n  calibre-web-config:\n    driver: local\n    driver_opts:\n      type: nfs\n      o: addr=192.168.0.174,nolock,soft,rw\n      device:\":\u002Fvolume1\u002Fdocker-swarm-nfs\u002Fcalibre-web\u002Fconfig\"\n  calibre-web-library:\n    driver: local\n    driver_opts:\n      type: nfs\n      o: addr=192.168.0.174,nolock,soft,rw\n      device:\":\u002Fvolume1\u002Fdocker-swarm-nfs\u002Fcalibre-web\u002Flibrary\"\n  calibre-web-ingest:\n    driver: local\n    driver_opts:\n      type: nfs\n      o: addr=192.168.0.174,nolock,soft,rw\n      device:\":\u002Fvolume1\u002Fdocker-swarm-nfs\u002Fcalibre-web\u002Fingest\"\n",[1676,14495,14496,14502,14509,14519,14526,14533,14540,14547,14554,14561,14568,14575,14582,14589,14596,14603,14610,14620,14630,14634,14641,14648,14657,14661,14668,14675,14685,14692,14701,14711,14716,14723,14731,14737,14745,14754,14760,14768,14777,14784,14793,14802],{"__ignoreMap":116},[2183,14497,14498,14500],{"class":9584,"line":9585},[2183,14499,11915],{"class":12228},[2183,14501,12253],{"class":9602},[2183,14503,14504,14507],{"class":9584,"line":117},[2183,14505,14506],{"class":12228},"  calibre-web-automated",[2183,14508,12253],{"class":9602},[2183,14510,14511,14514,14516],{"class":9584,"line":124},[2183,14512,14513],{"class":12228},"    image",[2183,14515,12232],{"class":9602},[2183,14517,14518],{"class":9668},"crocodilestick\u002Fcalibre-web-automated:v4.0.6\n",[2183,14520,14521,14524],{"class":9584,"line":442},[2183,14522,14523],{"class":12228},"    networks",[2183,14525,12253],{"class":9602},[2183,14527,14528,14530],{"class":9584,"line":9662},[2183,14529,12381],{"class":9602},[2183,14531,14532],{"class":9668},"proxy\n",[2183,14534,14535,14538],{"class":9584,"line":9675},[2183,14536,14537],{"class":12228},"    volumes",[2183,14539,12253],{"class":9602},[2183,14541,14542,14544],{"class":9584,"line":9681},[2183,14543,12381],{"class":9602},[2183,14545,14546],{"class":9668},"calibre-web-config:\u002Fconfig\n",[2183,14548,14549,14551],{"class":9584,"line":9690},[2183,14550,12381],{"class":9602},[2183,14552,14553],{"class":9668},"calibre-web-library:\u002Fcalibre-library\n",[2183,14555,14556,14558],{"class":9584,"line":9696},[2183,14557,12381],{"class":9602},[2183,14559,14560],{"class":9668},"calibre-web-ingest:\u002Fcwa-book-ingest\n",[2183,14562,14563,14565],{"class":9584,"line":9718},[2183,14564,12381],{"class":9602},[2183,14566,14567],{"class":9668},"\u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n",[2183,14569,14570,14573],{"class":9584,"line":9736},[2183,14571,14572],{"class":12228},"    environment",[2183,14574,12253],{"class":9602},[2183,14576,14577,14579],{"class":9584,"line":9760},[2183,14578,12381],{"class":9602},[2183,14580,14581],{"class":9668},"PUID=1000\n",[2183,14583,14584,14586],{"class":9584,"line":9931},[2183,14585,12381],{"class":9602},[2183,14587,14588],{"class":9668},"PGID=1000\n",[2183,14590,14591,14593],{"class":9584,"line":9938},[2183,14592,12381],{"class":9602},[2183,14594,14595],{"class":9668},"TZ=Europe\u002FParis\n",[2183,14597,14598,14600],{"class":9584,"line":9944},[2183,14599,12381],{"class":9602},[2183,14601,14602],{"class":9668},"DOCKER_MODS=linuxserver\u002Fmods:universal-calibre\n",[2183,14604,14605,14608],{"class":9584,"line":9963},[2183,14606,14607],{"class":12228},"    deploy",[2183,14609,12253],{"class":9602},[2183,14611,14612,14615,14617],{"class":9584,"line":9981},[2183,14613,14614],{"class":12228},"      mode",[2183,14616,12232],{"class":9602},[2183,14618,14619],{"class":9668},"replicated\n",[2183,14621,14622,14625,14627],{"class":9584,"line":10008},[2183,14623,14624],{"class":12228},"      replicas",[2183,14626,12232],{"class":9602},[2183,14628,14629],{"class":9598},"1\n",[2183,14631,14632],{"class":9584,"line":10016},[2183,14633,10665],{"emptyLinePlaceholder":133},[2183,14635,14636,14639],{"class":9584,"line":10027},[2183,14637,14638],{"class":12228},"networks",[2183,14640,12253],{"class":9602},[2183,14642,14643,14646],{"class":9584,"line":10379},[2183,14644,14645],{"class":12228},"  proxy",[2183,14647,12253],{"class":9602},[2183,14649,14650,14653,14655],{"class":9584,"line":10409},[2183,14651,14652],{"class":12228},"    external",[2183,14654,12232],{"class":9602},[2183,14656,13229],{"class":9598},[2183,14658,14659],{"class":9584,"line":10417},[2183,14660,10665],{"emptyLinePlaceholder":133},[2183,14662,14663,14666],{"class":9584,"line":12426},[2183,14664,14665],{"class":12228},"volumes",[2183,14667,12253],{"class":9602},[2183,14669,14670,14673],{"class":9584,"line":12434},[2183,14671,14672],{"class":12228},"  calibre-web-config",[2183,14674,12253],{"class":9602},[2183,14676,14677,14680,14682],{"class":9584,"line":12442},[2183,14678,14679],{"class":12228},"    driver",[2183,14681,12232],{"class":9602},[2183,14683,14684],{"class":9668},"local\n",[2183,14686,14687,14690],{"class":9584,"line":12453},[2183,14688,14689],{"class":12228},"    driver_opts",[2183,14691,12253],{"class":9602},[2183,14693,14694,14696,14698],{"class":9584,"line":12465},[2183,14695,13738],{"class":12228},[2183,14697,12232],{"class":9602},[2183,14699,14700],{"class":9668},"nfs\n",[2183,14702,14703,14706,14708],{"class":9584,"line":12472},[2183,14704,14705],{"class":12228},"      o",[2183,14707,12232],{"class":9602},[2183,14709,14710],{"class":9668},"addr=192.168.0.174,nolock,soft,rw\n",[2183,14712,14713],{"class":9584,"line":12479},[2183,14714,14715],{"class":9668},"      device:\":\u002Fvolume1\u002Fdocker-swarm-nfs\u002Fcalibre-web\u002Fconfig\"\n",[2183,14717,14718,14721],{"class":9584,"line":12489},[2183,14719,14720],{"class":12228},"  calibre-web-library",[2183,14722,12253],{"class":9602},[2183,14724,14725,14727,14729],{"class":9584,"line":12501},[2183,14726,14679],{"class":12228},[2183,14728,12232],{"class":9602},[2183,14730,14684],{"class":9668},[2183,14732,14733,14735],{"class":9584,"line":12508},[2183,14734,14689],{"class":12228},[2183,14736,12253],{"class":9602},[2183,14738,14739,14741,14743],{"class":9584,"line":12515},[2183,14740,13738],{"class":12228},[2183,14742,12232],{"class":9602},[2183,14744,14700],{"class":9668},[2183,14746,14748,14750,14752],{"class":9584,"line":14747},35,[2183,14749,14705],{"class":12228},[2183,14751,12232],{"class":9602},[2183,14753,14710],{"class":9668},[2183,14755,14757],{"class":9584,"line":14756},36,[2183,14758,14759],{"class":9668},"      device:\":\u002Fvolume1\u002Fdocker-swarm-nfs\u002Fcalibre-web\u002Flibrary\"\n",[2183,14761,14763,14766],{"class":9584,"line":14762},37,[2183,14764,14765],{"class":12228},"  calibre-web-ingest",[2183,14767,12253],{"class":9602},[2183,14769,14771,14773,14775],{"class":9584,"line":14770},38,[2183,14772,14679],{"class":12228},[2183,14774,12232],{"class":9602},[2183,14776,14684],{"class":9668},[2183,14778,14780,14782],{"class":9584,"line":14779},39,[2183,14781,14689],{"class":12228},[2183,14783,12253],{"class":9602},[2183,14785,14787,14789,14791],{"class":9584,"line":14786},40,[2183,14788,13738],{"class":12228},[2183,14790,12232],{"class":9602},[2183,14792,14700],{"class":9668},[2183,14794,14796,14798,14800],{"class":9584,"line":14795},41,[2183,14797,14705],{"class":12228},[2183,14799,12232],{"class":9602},[2183,14801,14710],{"class":9668},[2183,14803,14805],{"class":9584,"line":14804},42,[2183,14806,14807],{"class":9668},"      device:\":\u002Fvolume1\u002Fdocker-swarm-nfs\u002Fcalibre-web\u002Fingest\"\n",[19,14809,14810],{},"Cette fois, tous les répertoires utilisés par l’application sont correctement persistés.",[12130,14812],{},[29,14814,14816],{"id":14815},"comment-tester-la-persistance-dun-service","Comment tester la persistance d’un service",[19,14818,14819],{},"Une bonne pratique simple (et souvent oubliée) :",[277,14821,14822,14825,14828,14831,14834],{},[280,14823,14824],{},"Démarrer le service",[280,14826,14827],{},"Ajouter une donnée (ex : un fichier ou un livre en l'occurrence)",[280,14829,14830],{},"Supprimer le conteneur",[280,14832,14833],{},"Le recréer",[280,14835,14836],{},"Vérifier que la donnée est toujours présente et accessible",[19,14838,14839],{},"👉 Si ce test échoue, votre persistance est cassée.",[12130,14841],{},[29,14843,14845],{"id":14844},"ce-que-jai-appris","Ce que j'ai appris",[19,14847,14848,14849],{},"Cette expérience m’a appris une chose essentielle :\n👉 ",[414,14850,14851],{},"Avec Docker, une donnée n’est persistante que si vous savez exactement où elle est écrite.",[19,14853,14854,14855,12774],{},"Les volumes ne sont pas compliqués… mais ils sont ",[414,14856,14857],{},"implicites",[277,14859,14860,14863],{},[280,14861,14862],{},"Docker ne valide pas votre intention",[280,14864,14865],{},"Il exécute simplement votre configuration",[19,14867,14868],{},"Résultat : une simple erreur de mapping peut donner l’impression que les données ont disparu, alors qu’elles sont juste… ailleurs.",[29,14870,524],{"id":523},[19,14872,14873],{},"Docker est un outil extrêmement puissant, mais aussi très permissif. Et c’est justement ça le danger.",[19,14875,14876],{},"En pratique, ce qu’il faut retenir :",[277,14878,14879,14882,14885,14888],{},[280,14880,14881],{},"Identifiez toujours les dossiers critiques d’une application",[280,14883,14884],{},"Vérifiez où les données sont réellement écrites",[280,14886,14887],{},"Testez systématiquement vos déploiements",[280,14889,14890,14891],{},"Et surtout : ",[414,14892,14893],{},"ne faites jamais confiance à une configuration non testée",[19,14895,14896],{},"Parce qu’en production, ce type d’erreur ne pardonne pas.",[10970,14898,14899],{},"html pre.shiki code .sPWt5, html code.shiki .sPWt5{--shiki-default:#7EE787}html pre.shiki code .sZEs4, html code.shiki .sZEs4{--shiki-default:#E6EDF3}html pre.shiki code .s9uIt, html code.shiki .s9uIt{--shiki-default:#A5D6FF}html pre.shiki code .sFSAA, html code.shiki .sFSAA{--shiki-default:#79C0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":116,"searchDepth":117,"depth":117,"links":14901},[14902,14903,14906,14907,14908,14909,14910,14911,14912],{"id":14320,"depth":117,"text":14321},{"id":14344,"depth":117,"text":14345,"children":14904},[14905],{"id":14351,"depth":124,"text":14352},{"id":14405,"depth":117,"text":14406},{"id":14445,"depth":117,"text":14446},{"id":14458,"depth":117,"text":14459},{"id":14486,"depth":117,"text":14487},{"id":14815,"depth":117,"text":14816},{"id":14844,"depth":117,"text":14845},{"id":523,"depth":117,"text":524},"2026-04-20T12:21:10.137Z","Récemment, j’ai vécu ma première “vraie” perte de données dans mon homelab. Rien de critique… mais suffisamment frustrant pour me rappeler une règle essentielle avec Docker : 👉 Les données ne dispara",{},"\u002Fblogs\u002F2026-04-20-docker-volumes-et-perte-de-donnees-pourquoi-vos-donnees-disparaissent",[14918,14920],{"id":137,"name":138,"image":14919,"linkedin":140,"x":14},".\u002Fassets\u002Freviewer-michael-bernasinski.webp",{"id":142,"name":143,"image":14921,"linkedin":145,"x":14},".\u002Fassets\u002Freviewer-emmanuelle-gouvart.webp",{"title":14302,"description":14914},"blogs\u002F2026-04-20-docker-volumes-et-perte-de-donnees-pourquoi-vos-donnees-disparaissent\u002Findex",[14925,14926,566,11200,151],"docker","cloud native","28WRAVFXqaUTiw3o7NHSK5vZQp6mJXnKU4-y08gCTwg",1776760465347]