[{"data":1,"prerenderedAt":11856},["ShallowReactive",2],{"tag-data-observabilité":3},[4,233,570,10356],{"id":5,"title":6,"alt":7,"authors":8,"body":15,"date":193,"description":194,"extension":195,"image":196,"meta":197,"navigation":198,"ogImage":196,"path":199,"published":198,"reviewers":200,"seo":223,"stem":224,"tags":225,"__hash__":232},"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",[9],{"id":10,"name":11,"image":12,"linkedin":13,"x":14},"838dec96-f9fc-404f-a302-07719225d785","Maxime Deroullers",".\u002Fassets\u002Fauthor-maxime-deroullers.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmaxime-deroullers-1b5791137\u002F","https:\u002F\u002Fx.com\u002Fmderoullers",{"type":16,"value":17,"toc":185},"minimark",[18,22,33,36,41,50,53,63,66,74,77,85,88,96,99,114,118,121,133,136,139,146,154,158,161,165,168,171,175,178],[19,20,21],"p",{},"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,23,24,25,32],{},"Dans cet article, nous nous concentrerons sur les aspects théoriques et fondamentaux des ",[26,27,31],"a",{"href":28,"rel":29},"https:\u002F\u002Fblog.hoppr.tech\u002Ftags\u002Fdora%20metrics",[30],"nofollow","DORA Metrics",".",[19,34,35],{},"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.",[37,38,40],"h2",{"id":39},"quest-ce-que-les-métriques-dora","Qu'est-ce que les métriques DORA ?",[19,42,43,44,49],{},"Les métriques DORA, issues du rapport  \"",[26,45,48],{"href":46,"rel":47},"https:\u002F\u002Fcloud.google.com\u002Fdevops\u002Fstate-of-devops",[30],"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,51,52],{},"Examinons chacune de ces métriques en détail :",[54,55,56],"ol",{},[57,58,59],"li",{},[60,61,62],"strong",{},"Lead Time for Changes (Délai de livraison des changements)",[19,64,65],{},"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.",[54,67,69],{"start":68},2,[57,70,71],{},[60,72,73],{},"Deployment Frequency (Fréquence de déploiement)",[19,75,76],{},"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.",[54,78,80],{"start":79},3,[57,81,82],{},[60,83,84],{},"Mean Time to Restore (MTTR) (Temps moyen de restauration)",[19,86,87],{},"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.",[54,89,91],{"start":90},4,[57,92,93],{},[60,94,95],{},"Change Failure Rate (Taux d'échec des changements)",[19,97,98],{},"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,100,101,102,107,108,113],{},"Pour calculer les 4 keys, l'équipe DORA a développé une solution sur ",[26,103,106],{"href":104,"rel":105},"https:\u002F\u002Fgithub.com\u002Fdora-team\u002Ffourkeys\u002Ftree\u002Fmain",[30],"GitHub",".\nVous y trouverez les ",[26,109,112],{"href":110,"rel":111},"https:\u002F\u002Fgithub.com\u002Fdora-team\u002Ffourkeys\u002Fblob\u002Fmain\u002FMETRICS.md",[30],"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.",[37,115,117],{"id":116},"les-niveaux-de-performance","Les niveaux de performance",[19,119,120],{},"Les métriques DORA définissent trois niveaux de performance principaux :",[122,123,124,127,130],"ul",{},[57,125,126],{},"Low",[57,128,129],{},"Medium",[57,131,132],{},"High",[19,134,135],{},"Selon les années, un quatrième niveau peut être ajouté : Elite, mais la logique reste la même.",[19,137,138],{},"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,140,141],{},[142,143],"img",{"alt":144,"src":145},"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,147,148,149,32],{},"Pour plus de détails sur ces seuils de performance, vous pouvez ",[26,150,153],{"href":151,"rel":152},"https:\u002F\u002Fcloud.google.com\u002Fblog\u002Fproducts\u002Fdevops-sre\u002Fdora-2022-accelerate-state-of-devops-report-now-out?hl=en",[30],"consulter la documentation DORA officielle",[37,155,157],{"id":156},"pourquoi-ces-métriques-sont-elles-importantes","Pourquoi ces métriques sont-elles importantes ?",[19,159,160],{},"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.",[37,162,164],{"id":163},"une-approche-data-driven","Une approche “Data-Driven”",[19,166,167],{},"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,169,170],{},"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.",[37,172,174],{"id":173},"conclusion","Conclusion",[19,176,177],{},"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,179,180,184],{},[26,181,183],{"href":28,"rel":182},[30],"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":186,"searchDepth":68,"depth":68,"links":187},"",[188,189,190,191,192],{"id":39,"depth":68,"text":40},{"id":116,"depth":68,"text":117},{"id":156,"depth":68,"text":157},{"id":163,"depth":68,"text":164},{"id":173,"depth":68,"text":174},"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","md",".\u002Fassets\u002Fcover-image.webp",{},true,"\u002Fblogs\u002F2024-10-31-dora-metrics-valuer-la-performance-de-livraison-logicielle",[201,207,212,217],{"id":202,"name":203,"image":204,"linkedin":205,"x":206},"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=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","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fpaulalexandrechretien\u002F",null,{"id":208,"name":209,"image":210,"linkedin":211,"x":206},"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=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","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Femmanuellegouvart-182b6ab2\u002F",{"id":213,"name":214,"image":215,"linkedin":216,"x":206},"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":218,"name":219,"image":220,"linkedin":221,"x":222},"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":6,"description":194},"blogs\u002F2024-10-31-dora-metrics-valuer-la-performance-de-livraison-logicielle\u002Findex",[226,227,228,229,230,231],"dora metrics","devops","cloud","performance","observabilité","cloud-platform","02O3nnqMxX0qEIFlEpZBfSKGGmji9sEf_8tK7bdpLXs",{"id":234,"title":235,"alt":236,"authors":237,"body":243,"date":550,"description":551,"extension":195,"image":196,"meta":552,"navigation":198,"ogImage":196,"path":553,"published":198,"reviewers":554,"seo":564,"stem":565,"tags":566,"__hash__":569},"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",[238],{"id":239,"name":240,"image":241,"linkedin":242,"x":206},"4f37105b-9f64-4dcc-8a19-a1f4d5489826","Samuel Bally",".\u002Fassets\u002Fauthor-samuel-bally.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fsamuel-bally\u002F",{"type":16,"value":244,"toc":537},[245,248,265,268,271,275,278,304,307,316,319,323,326,358,362,365,368,371,374,378,387,390,396,400,403,432,436,439,442,445,465,471,474,478,481,485,488,491,495,498,512,516,519,527,531,534],[19,246,247],{},"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:",[122,249,250,253,256,259,262],{},[57,251,252],{},"Le DevOps\u002FSRE",[57,254,255],{},"L’Agilité",[57,257,258],{},"Les bonnes pratiques d’architecture",[57,260,261],{},"Les bonnes pratiques de développement (Software Craftsmanship)",[57,263,264],{},"L’Observabilité",[19,266,267],{},"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,269,270],{},"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é.",[37,272,274],{"id":273},"comprendre-lobservabilité-et-ses-enjeux","Comprendre l’Observabilité et ses Enjeux",[19,276,277],{},"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:",[122,279,280,283,286,289,292,295,298,301],{},[57,281,282],{},"Accessible à tous (métier et technique)",[57,284,285],{},"Corrélation des données",[57,287,288],{},"Propose une vue d’ensemble (expérience utilisateur, sécurité, application, Cloud, ...)",[57,290,291],{},"Accepte plus de type de données comme le coûts d’utilisation des services Cloud",[57,293,294],{},"Intègre une gestion des incidents",[57,296,297],{},"Propose des services d’aide à la décision basé sur l‘IA",[57,299,300],{},"L’approche proactive (détection avant l’incident)",[57,302,303],{},"vision holistique de vos produits (applications)",[19,305,306],{},"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,308,309,310,315],{},"Cette évolution de la supervision, permet également des démarches FinOps et ",[26,311,314],{"href":312,"rel":313},"https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-1",[30],"GreenOps",", très utiles avec les services Cloud.",[19,317,318],{},"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.",[37,320,322],{"id":321},"pourquoi-lobservabilité-est-cruciale","Pourquoi l'Observabilité est cruciale",[19,324,325],{},"Lors de l’adoption ou la migration vers le Cloud Public, plusieurs éléments doivent être surveillés de près :",[54,327,328,334,340,346,352],{},[57,329,330,333],{},[60,331,332],{},"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.",[57,335,336,339],{},[60,337,338],{},"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).",[57,341,342,345],{},[60,343,344],{},"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.",[57,347,348,351],{},[60,349,350],{},"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.",[57,353,354,357],{},[60,355,356],{},"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.",[37,359,361],{"id":360},"comment-aborder-lobservabilité","Comment aborder l’Observabilité",[19,363,364],{},"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,366,367],{},"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,369,370],{},"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,372,373],{},"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.",[37,375,377],{"id":376},"datadog-lincontournable","Datadog, l’incontournable",[19,379,380,381,386],{},"Malgré un marché établi dans le domaine du monitoring et de la supervision, ",[26,382,385],{"href":383,"rel":384},"https:\u002F\u002Fwww.datadoghq.com\u002Ffr",[30],"Datadog"," a su se faire une place de leader avec l’émergence du Cloud Public.",[19,388,389],{},"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,391,392],{},[142,393],{"alt":394,"src":395},"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",[37,397,399],{"id":398},"démarrer-de-zéro","Démarrer de zéro",[19,401,402],{},"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 :",[122,404,405,414,417,420,423,426,429],{},[57,406,407,408,413],{},"des tests métiers (approche ",[26,409,412],{"href":410,"rel":411},"https:\u002F\u002Fblog.hoppr.tech\u002Ftags\u002Fddd",[30],"DDD",")",[57,415,416],{},"la qualité de l’expérience utilisateur",[57,418,419],{},"la surveillance de la sécurité de l’intégralité de l’application et de son développement",[57,421,422],{},"le taux de disponibilité, dont les SLA du Core Banking",[57,424,425],{},"l’impact utilisateur des mises en production (jusqu’à 300\u002Fsemaine dans les premiers mois)",[57,427,428],{},"des performances",[57,430,431],{},"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.",[37,433,435],{"id":434},"intégrer-lobservabilité-à-léchelle","Intégrer l’Observabilité à l’échelle",[19,437,438],{},"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,440,441],{},"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,443,444],{},"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:",[122,446,447,450,453,456,459,462],{},[57,448,449],{},"Organisation sur plusieurs comptes",[57,451,452],{},"Droits et RBAC",[57,454,455],{},"Index par données",[57,457,458],{},"Visibilité des Dashbords",[57,460,461],{},"Filtres",[57,463,464],{},"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,466,467],{},[142,468],{"alt":469,"src":470},"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,472,473],{},"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.",[37,475,477],{"id":476},"passer-au-niveau-supérieur-en-alliant-méthodologie-et-observabilité","Passer au niveau supérieur en alliant méthodologie et Observabilité",[19,479,480],{},"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.",[37,482,484],{"id":483},"software-craftsmanship-pour-une-meilleure-intégration-de-lobservabilité","Software Craftsmanship : Pour une meilleure intégration de l’Observabilité",[19,486,487],{},"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,489,490],{},"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.",[37,492,494],{"id":493},"devops-une-observabilité-industrialisée","DevOps: Une Observabilité industrialisée",[19,496,497],{},"L’approche DevOps améliore encore la perspective d’Observabilité. En effet, nous pouvons industrialiser un ensemble de nouveaux éléments:",[122,499,500,503,506,509],{},[57,501,502],{},"Déployer votre Observabilité en mode infrastructure as code (données, dashboard, alarme, …)",[57,504,505],{},"Les tests dans vos pipelines de déploiements intégrés avec votre outil d’Observabilité.",[57,507,508],{},"Automatiser des tests notamment dans vos déploiements sans indisponibilité (canary, blue and green, …)",[57,510,511],{},"Visualiser l’impact financier ou green d’une nouvelle fonctionnalité",[37,513,515],{"id":514},"agilité-lobservabilité-mesure-vos-kpi","Agilité: L’Observabilité mesure vos KPI",[19,517,518],{},"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,520,521,522,32],{},"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 ",[26,523,526],{"href":524,"rel":525},"https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2024-09-26-low-carbon-dans-le-cloud-partie-2",[30],"Low Carbon dans le Cloud - Partie 2",[37,528,530],{"id":529},"pour-conclure","Pour conclure",[19,532,533],{},"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,535,536],{},"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":186,"searchDepth":68,"depth":68,"links":538},[539,540,541,542,543,544,545,546,547,548,549],{"id":273,"depth":68,"text":274},{"id":321,"depth":68,"text":322},{"id":360,"depth":68,"text":361},{"id":376,"depth":68,"text":377},{"id":398,"depth":68,"text":399},{"id":434,"depth":68,"text":435},{"id":476,"depth":68,"text":477},{"id":483,"depth":68,"text":484},{"id":493,"depth":68,"text":494},{"id":514,"depth":68,"text":515},{"id":529,"depth":68,"text":530},"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",[555,560,562],{"id":556,"name":557,"image":558,"linkedin":559,"x":206},"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=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","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmichael-bernasinski",{"id":208,"name":209,"image":561,"linkedin":211,"x":206},"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":213,"name":214,"image":563,"linkedin":216,"x":206},"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":235,"description":551},"blogs\u002F2024-10-31-lobservabilit-un-pilier-essentiel-dans-ladoption-du-cloud-et-des-architectures-modernes\u002Findex",[231,567,230,227,568],"architecture","craft","IHNFVwmNOBdYB2cwFLg5qdqDGTksVCSw5EHmKp_U_kQ",{"id":571,"title":572,"alt":573,"authors":574,"body":576,"date":10341,"description":10342,"extension":195,"image":196,"meta":10343,"navigation":198,"ogImage":196,"path":10344,"published":198,"reviewers":10345,"seo":10352,"stem":10353,"tags":10354,"__hash__":10355},"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",[575],{"id":10,"name":11,"image":12,"linkedin":13,"x":14},{"type":16,"value":577,"toc":10296},[578,591,609,612,616,621,624,627,638,641,661,667,671,679,685,696,699,713,717,720,724,729,743,746,750,755,775,780,783,791,795,800,811,816,836,841,844,847,851,856,870,875,886,896,900,903,932,936,941,955,960,963,966,970,978,981,985,990,1006,1011,1022,1026,1031,1042,1047,1055,1059,1064,1072,1077,1085,1089,1094,1105,1110,1121,1125,1130,1141,1146,1157,1160,1164,1172,1176,1181,1184,1198,1201,1205,1326,1330,1382,1386,1440,1444,1452,1456,1459,1467,1470,1489,1495,1502,1594,1889,1892,1895,1902,1905,1908,1928,2324,2327,2334,2337,2357,2671,2674,2678,2686,2689,2695,2701,2707,2711,2716,3166,3169,3429,3434,3813,3815,4015,4020,4390,4392,4594,4599,4972,4974,5173,5176,5180,5431,5433,5570,5574,5783,5785,5870,5874,6084,6086,6170,6174,6393,6395,6479,6482,6486,6491,6495,6782,6784,6921,6925,7233,7235,7291,7295,7603,7605,7661,7665,7669,7674,7678,7966,7968,8123,8127,8351,8353,8372,8376,8599,8601,8620,8624,8630,8653,8656,8660,8897,9102,9106,9117,9356,9360,9371,9746,9750,9761,9858,9862,9867,9878,9883,9894,9899,9910,9915,9918,10064,10069,10072,10083,10086,10090,10097,10114,10117,10128,10132,10139,10142,10145,10149,10156,10159,10163,10170,10173,10176,10196,10199,10203,10206,10238,10242,10245,10265,10268,10271,10274,10277,10292],[19,579,580,581,586,587,590],{},"Nouvel article qui fait suite à mon ",[26,582,585],{"href":583,"rel":584},"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",[30],"introduction aux DORA Metrics"," 🎉 \nPour rappel, je vous avais défini les ",[60,588,589],{},"4 métriques (4 Keys)"," qui permettent de mesurer l'efficacité de la livraison logicielle:",[592,593,594],"blockquote",{},[19,595,596,599,600,599,603,599,606],{},[60,597,598],{},"Deployment Frequency"," | ",[60,601,602],{},"Lead Time for Changes",[60,604,605],{},"Mean Time to Restore",[60,607,608],{},"Change Failure Rate",[19,610,611],{},"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.",[37,613,615],{"id":614},"_1-comprendre-lorganisation-et-définir-les-concepts","1. Comprendre l'organisation et définir les concepts 🏢",[617,618,620],"h3",{"id":619},"lorganisation-du-groupe","L'organisation du groupe",[19,622,623],{},"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,625,626],{},"L'organisation de l'entreprise était la suivante :",[122,628,629,632,635],{},[57,630,631],{},"Le groupe est divisé en plateformes",[57,633,634],{},"Les plateformes sont divisées en domaines",[57,636,637],{},"Les domaines sont divisés en produits",[19,639,640],{},"Après quelques ateliers avec le management et des projets pilotes, nous sommes tombés d'accord sur les définitions suivantes :",[122,642,643,649,655],{},[57,644,645,648],{},[60,646,647],{},"Plateforme"," : Niveau le plus haut de l'organisation, regroupe plusieurs domaines fonctionnels liés",[57,650,651,654],{},[60,652,653],{},"Domaine"," : Regroupe des produits ayant des fonctionnalités similaires ou complémentaires",[57,656,657,660],{},[60,658,659],{},"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,662,663],{},[142,664],{"alt":665,"src":666},"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",[617,668,670],{"id":669},"les-cas-dusage-identifiés","Les cas d'usage identifiés",[19,672,673,674,32],{},"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'",[26,675,678],{"href":676,"rel":677},"https:\u002F\u002Fdraft.io\u002Ffr\u002Fexample\u002Fexample-mapping",[30],"Example Mapping",[19,680,681],{},[142,682],{"alt":683,"src":684},"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",[592,686,687],{},[19,688,689,690,695],{},"ℹ️ N’hésitez pas à consulter ",[26,691,694],{"href":692,"rel":693},"https:\u002F\u002Fwww.hoppr.tech\u002Fformations-hoppr",[30],"notre offre de formations"," si vous souhaitez approfondir vos connaissances Craft et pratiquer ce type d’atelier.",[19,697,698],{},"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 :",[122,700,701,704,707,710],{},[57,702,703],{},"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.",[57,705,706],{},"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.",[57,708,709],{},"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.",[57,711,712],{},"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.",[37,714,716],{"id":715},"_2-les-défis-techniques-et-organisationnels","2. Les défis techniques et organisationnels 🔧",[19,718,719],{},"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 :",[617,721,723],{"id":722},"une-architecture-complexe-à-appréhender","Une architecture complexe à appréhender",[19,725,726],{},[60,727,728],{},"L'entreprise comportait :",[122,730,731,734,737,740],{},[57,732,733],{},"Plus de 1000 produits utilisant des technologies différentes",[57,735,736],{},"Des produits déployés plusieurs fois pour différentes BU",[57,738,739],{},"Un mix d'architectures monolithiques et microservices",[57,741,742],{},"Des relations complexes entre composants et produits",[19,744,745],{},"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.",[617,747,749],{"id":748},"des-données-éparpillées","Des données éparpillées",[19,751,752],{},[60,753,754],{},"Il fallait collecter les données depuis :",[122,756,757,764,769],{},[57,758,759,760,763],{},"Les clusters ",[60,761,762],{},"Kubernetes"," pour les logs de déploiements",[57,765,766,768],{},[60,767,106],{}," pour l'historique des versions",[57,770,771,774],{},[60,772,773],{},"ServiceNow"," pour les incidents",[19,776,777],{},[60,778,779],{},"Le véritable défi ? Corréler ces données hétérogènes pour obtenir une vision cohérente !",[19,781,782],{},"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,784,785,786,790],{},"L'objectif final était de disposer d'un référentiel unique permettant d'exécuter des requêtes SQL complexes ",[787,788,789],"em",{},"(cf l’implémentation des métriques plus bas dans cet article)"," pour calculer précisément nos métriques DORA.",[617,792,794],{"id":793},"des-pratiques-devops-non-standardisées","Des pratiques DevOps non standardisées",[19,796,797],{},[60,798,799],{},"Une partie des équipes avait :",[122,801,802,805,808],{},[57,803,804],{},"Leur propre workflow de déploiement",[57,806,807],{},"Leurs conventions de versioning",[57,809,810],{},"Leur façon de gérer les environnements de production",[19,812,813],{},[60,814,815],{},"Il a fallu aider ces équipes à adopter les bonnes pratiques du groupe à savoir :",[122,817,818,827,830,833],{},[57,819,820,821,826],{},"la norme ",[26,822,825],{"href":823,"rel":824},"https:\u002F\u002Fsemver.org\u002Flang\u002Ffr\u002F",[30],"SemVer"," pour le versioning",[57,828,829],{},"l'utilisation des solutions groupe pour déployer leurs produits sur Kubernetes",[57,831,832],{},"la déclaration systématique des incidents dans ServiceNow",[57,834,835],{},"etc.",[19,837,838],{},[60,839,840],{},"La standardisation des pratiques DevOps : un prérequis indispensable aux DORA Metrics",[19,842,843],{},"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,845,846],{},"Cette transparence a créé une incitation naturelle à l'adoption des standards du groupe, bien plus efficace qu'une simple directive top-down.",[617,848,850],{"id":849},"des-données-pas-toujours-fiables","Des données pas toujours fiables",[19,852,853],{},[60,854,855],{},"Les principaux problèmes :",[122,857,858,861,864,867],{},[57,859,860],{},"Pas de standard dans le nommage des composants",[57,862,863],{},"Des déploiements de configuration qui polluaient les métriques",[57,865,866],{},"Une difficulté à identifier les vrais déploiements en production",[57,868,869],{},"Des annotations manquantes ou incohérentes",[19,871,872],{},[60,873,874],{},"Pragmatisme et itération : la clé du succès en environnement réel",[19,876,877,878,881,882,885],{},"Face à l'imperfection inévitable des données en contexte d'entreprise de grande taille, nous avons adopté une approche pragmatique : formuler des ",[60,879,880],{},"hypothèses"," clairement documentées et acceptées par toutes les parties prenantes. Ces conventions, bien qu'imparfaites, nous ont permis d'",[60,883,884],{},"avancer sans attendre la perfection"," qui arrivera sans doute jamais.",[19,887,888,889,892,893,32],{},"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 ",[60,890,891],{},"tendances"," significatives permettant d'",[60,894,895],{},"orienter l'amélioration continue",[617,897,899],{"id":898},"une-organisation-multi-niveaux-à-respecter","Une organisation multi-niveaux à respecter",[19,901,902],{},"Il fallait :",[122,904,905,912,919,926],{},[57,906,907,908,911],{},"Fournir des ",[60,909,910],{},"vues adaptées"," à chaque niveau (plateforme, domaine, produit)",[57,913,914,915,918],{},"Prendre en compte les ",[60,916,917],{},"particularités"," de chaque BU",[57,920,921,922,925],{},"Garder des ",[60,923,924],{},"métriques comparables"," malgré les différences",[57,927,928,931],{},[60,929,930],{},"Accompagner"," les équipes vers de meilleures pratiques",[617,933,935],{"id":934},"la-dimension-humaine-à-ne-pas-négliger","La dimension humaine à ne pas négliger",[19,937,938],{},[60,939,940],{},"Nous avons rapidement identifié des craintes légitimes :",[122,942,943,946,949,952],{},[57,944,945],{},"Peur d'être jugé uniquement sur des chiffres et que les métriques servent à comparer les équipes entre elles",[57,947,948],{},"Tentation de biaiser le système (par exemple en multipliant volontairement les déploiements inutiles pour améliorer artificiellement la fréquence)",[57,950,951],{},"Réticence à reporter certains incidents pour ne pas impacter le Change Failure Rate",[57,953,954],{},"Difficultés à voir les DORA metrics comme outil d'amélioration continue",[19,956,957],{},[60,958,959],{},"Notre approche : transformer les résistances en adhésion",[19,961,962],{},"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,964,965],{},"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.",[37,967,969],{"id":968},"_3-hypothèses-techniques-retenues","3. Hypothèses techniques retenues 🧐",[592,971,972],{},[19,973,974,977],{},[60,975,976],{},"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,979,980],{},"Voici les principales conventions que nous avons établies, organisées par domaine :",[617,982,984],{"id":983},"déploiements","Déploiements 🚀",[19,986,987],{},[60,988,989],{},"Identification des déploiements en production",[122,991,992,995,1003],{},[57,993,994],{},"Un déploiement est considéré réussi uniquement quand :",[57,996,997,998,1002],{},"Seuls les déploiements avec l'annotation ",[999,1000,1001],"code",{},"info\u002Fenvironment = prod"," sont pris en compte",[57,1004,1005],{},"Les déploiements de configuration pure sont exclus des métriques",[19,1007,1008],{},[60,1009,1010],{},"Impact utilisateur",[122,1012,1013,1016,1019],{},[57,1014,1015],{},"Un déploiement en production impacte potentiellement l'utilisateur final",[57,1017,1018],{},"Un produit peut être déployé sur plusieurs workspaces (namespace\u002Fcluster)",[57,1020,1021],{},"Une modification d'un composant ou de sa configuration implique une modification du produit",[617,1023,1025],{"id":1024},"lead-time-for-changes-️","Lead Time For Changes ⏱️",[19,1027,1028],{},[60,1029,1030],{},"Traçabilité du code",[122,1032,1033,1036,1039],{},[57,1034,1035],{},"Le code source mentionné dans l'annotation est responsable du déploiement du composant",[57,1037,1038],{},"La correspondance dans le repository Git est matérialisée par un tag",[57,1040,1041],{},"Le temps entre un commit et son tag est négligeable pour le calcul global",[19,1043,1044],{},[60,1045,1046],{},"Limitations acceptées",[122,1048,1049,1052],{},[57,1050,1051],{},"Seuls les tags respectant la norme SemVer sont pris en compte",[57,1053,1054],{},"Les configurations d'environnement sans code source associé créent des déploiements multiples pour une même version",[617,1056,1058],{"id":1057},"incidents-et-récupération","Incidents et récupération 🚨",[19,1060,1061],{},[60,1062,1063],{},"Temporalité des incidents",[122,1065,1066,1069],{},[57,1067,1068],{},"Le temps entre l'apparition réelle d'un incident et son ouverture dans l'outil est considéré comme négligeable",[57,1070,1071],{},"Tous les incidents reportés (automatiquement ou manuellement) ont un impact utilisateur",[19,1073,1074],{},[60,1075,1076],{},"Association déploiement-incident",[122,1078,1079,1082],{},[57,1080,1081],{},"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",[57,1083,1084],{},"En l'absence d'information sur l'instance spécifique, l'incident est associé au produit dans son ensemble",[617,1086,1088],{"id":1087},"structure-organisationnelle","Structure organisationnelle 🏢",[19,1090,1091],{},[60,1092,1093],{},"Définition d'un produit",[122,1095,1096,1099,1102],{},[57,1097,1098],{},"Un produit est un périmètre fonctionnel perceptible par l'utilisateur final",[57,1100,1101],{},"Un produit peut être composé de plusieurs composants (microservices ou briques monolithiques)",[57,1103,1104],{},"Les changements au niveau produit sont communiqués aux utilisateurs",[19,1106,1107],{},[60,1108,1109],{},"Multi-instance",[122,1111,1112,1115,1118],{},[57,1113,1114],{},"Un même produit peut être déployé dans différents environnements de production",[57,1116,1117],{},"Chaque instance est considérée comme une entité distincte pour les métriques de déploiement",[57,1119,1120],{},"Les incidents sont agrégés au niveau produit plutôt qu'au niveau instance",[617,1122,1124],{"id":1123},"limitations-connues","Limitations connues 🚧",[19,1126,1127],{},[60,1128,1129],{},"Données manquantes",[122,1131,1132,1135,1138],{},[57,1133,1134],{},"Certains déploiements peuvent manquer d'annotations complètes",[57,1136,1137],{},"Les tags peuvent ne pas suivre strictement SemVer",[57,1139,1140],{},"La corrélation entre incidents et instances spécifiques n'est pas toujours possible",[19,1142,1143],{},[60,1144,1145],{},"Pistes d'amélioration",[122,1147,1148,1151,1154],{},[57,1149,1150],{},"Implémenter \"configuration as code\" pour mieux tracer les changements de configuration",[57,1152,1153],{},"Étendre la prise en compte des tags au-delà de SemVer",[57,1155,1156],{},"Ajouter la notion d'instance produit dans l'outil de gestion des incidents",[19,1158,1159],{},"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.",[37,1161,1163],{"id":1162},"_4-la-collecte-des-données-une-approche-par-source","4. La collecte des données : une approche par source 📊",[592,1165,1166],{},[19,1167,1168,1171],{},[60,1169,1170],{},"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.",[617,1173,1175],{"id":1174},"architecture-de-données-centralisée","Architecture de données centralisée",[19,1177,1178],{},[60,1179,1180],{},"BigQuery comme référentiel central",[19,1182,1183],{},"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 :",[122,1185,1186,1189,1192,1195],{},[57,1187,1188],{},"Capacité à traiter de grands volumes de données (logs Kubernetes, événements GitHub, tickets ServiceNow)",[57,1190,1191],{},"Possibilité d'exécuter des requêtes SQL complexes pour calculer les métriques",[57,1193,1194],{},"Facilité d'intégration avec des outils de visualisation (pour ce projet, Power BI)",[57,1196,1197],{},"Mise à jour des données en quasi temps réel via des flux de données (streaming)",[19,1199,1200],{},"Examinons maintenant notre approche pour chaque source de données :",[617,1202,1204],{"id":1203},"données-de-déploiement","Données de déploiement",[1206,1207,1208,1221],"table",{},[1209,1210,1211],"thead",{},[1212,1213,1214,1218],"tr",{},[1215,1216,1217],"th",{},"Élément",[1215,1219,1220],{},"Description",[1222,1223,1224,1232,1254,1281,1308],"tbody",{},[1212,1225,1226,1230],{},[1227,1228,1229],"td",{},"Source principale",[1227,1231,762],{},[1212,1233,1234,1237],{},[1227,1235,1236],{},"Événements collectés",[1227,1238,1239],{},[122,1240,1241,1244,1247],{},[57,1242,1243],{},"Collecte des événements de type \"deployment\" avec statut \"success\"",[57,1245,1246],{},"Identification des déploiements via la progression \"Progressing → True\" avec \"NewReplicaSetAvailable\"",[57,1248,1249,1250,1253],{},"Focus sur les déploiements en production via l'annotation  ",[999,1251,1252],{},"info\u002Fenvironment","=prod",[1212,1255,1256,1259],{},[1227,1257,1258],{},"Annotations existantes sur les pods",[1227,1260,1261],{},[122,1262,1263,1269,1275],{},[57,1264,1265,1268],{},[999,1266,1267],{},"info\u002Fproduct_id","  : identifiant unique du produit",[57,1270,1271,1274],{},[999,1272,1273],{},"info\u002Fbu_index","  : identifiant de la Business Unit",[57,1276,1277,1280],{},[999,1278,1279],{},"info\u002Fcluster_name","  : nom du cluster",[1212,1282,1283,1286],{},[1227,1284,1285],{},"Annotations à ajouter pour les DORA",[1227,1287,1288],{},[122,1289,1290,1296,1302],{},[57,1291,1292,1295],{},[999,1293,1294],{},"release.mgmt\u002Fdeploy.src","  : URL du repository source",[57,1297,1298,1301],{},[999,1299,1300],{},"release.mgmt\u002Fdeploy.src-version","  : version déployée",[57,1303,1304,1307],{},[999,1305,1306],{},"release.mgmt\u002Fenv","  : environnement (prod\u002Fprep\u002Fuat\u002Fdev)",[1212,1309,1310,1313],{},[1227,1311,1312],{},"Points d’attention",[1227,1314,1315],{},[122,1316,1317,1320,1323],{},[57,1318,1319],{},"Distinction entre déploiements de configuration et vraies mises en production",[57,1321,1322],{},"Gestion des déploiements multi-instances pour différentes BU",[57,1324,1325],{},"Traçabilité complète via les annotations",[617,1327,1329],{"id":1328},"données-de-code-source","Données de code source",[1206,1331,1332,1340],{},[1209,1333,1334],{},[1212,1335,1336,1338],{},[1215,1337,1217],{},[1215,1339,1220],{},[1222,1341,1342,1349,1364],{},[1212,1343,1344,1347],{},[1227,1345,1346],{},"Source de vérité",[1227,1348,106],{},[1212,1350,1351,1354],{},[1227,1352,1353],{},"Sources d’extraction",[1227,1355,1356],{},[122,1357,1358,1361],{},[57,1359,1360],{},"Commits  : pour tracer les changements de code",[57,1362,1363],{},"Tags  : pour identifier les versions déployées",[1212,1365,1366,1369],{},[1227,1367,1368],{},"Corrélation version-déploiement",[1227,1370,1371],{},[122,1372,1373,1376,1379],{},[57,1374,1375],{},"Chaque version en production est matérialisée par un tag Git",[57,1377,1378],{},"Les annotations Kubernetes contiennent les références du code source et de la version",[57,1380,1381],{},"La correspondance tag-version permet de calculer précisément le Lead Time",[617,1383,1385],{"id":1384},"données-dincidents","Données d'incidents",[1206,1387,1388,1396],{},[1209,1389,1390],{},[1212,1391,1392,1394],{},[1215,1393,1217],{},[1215,1395,1220],{},[1222,1397,1398,1404,1422],{},[1212,1399,1400,1402],{},[1227,1401,1229],{},[1227,1403,773],{},[1212,1405,1406,1409],{},[1227,1407,1408],{},"Critères de sélection des incidents",[1227,1410,1411],{},[122,1412,1413,1416,1419],{},[57,1414,1415],{},"Incidents résolus uniquement",[57,1417,1418],{},"Statut ≠ \"Canceled\"",[57,1420,1421],{},"Lien avec produit identifié",[1212,1423,1424,1427],{},[1227,1425,1426],{},"Limitations actuelles",[1227,1428,1429],{},[122,1430,1431,1434,1437],{},[57,1432,1433],{},"Les incidents sont liés à un produit et non à une instance spécifique",[57,1435,1436],{},"Impossibilité de lier directement un incident à une instance particulière",[57,1438,1439],{},"Nécessité d'utiliser des heuristiques pour la corrélation",[37,1441,1443],{"id":1442},"_5-implémentation-et-calcul-des-métriques","5. Implémentation et calcul des métriques 📈",[592,1445,1446],{},[19,1447,1448,1451],{},[60,1449,1450],{},"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.",[617,1453,1455],{"id":1454},"implémentation-des-métriques","Implémentation des métriques",[19,1457,1458],{},"Voici comment nous avons adapté et implémenté chacune des quatre métriques :",[19,1460,1461],{},[1462,1463,1464],"u",{},[60,1465,1466],{},"Lead Time for Changes (Délai de livraison des changements)",[19,1468,1469],{},"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.",[122,1471,1472,1478,1483],{},[57,1473,1474,1477],{},[60,1475,1476],{},"Extraction:"," à partir des déploiements Kubernetes (annotation \"version\" et \"repo\"), nous retrouvons le commit Git.",[57,1479,1480],{},[60,1481,1482],{},"Calcul:",[57,1484,1485,1488],{},[60,1486,1487],{},"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,1490,1491,1494],{},[60,1492,1493],{},"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,1496,1497],{},[1462,1498,1499],{},[60,1500,1501],{},"Deployment Frequency (Fréquence de déploiement)",[19,1503,1504,1505,1593],{},"La Deployment Frequency indique la cadence à laquelle on pousse des mises à jour en production (exprimée en ",[1506,1507,1510],"span",{"className":1508},[1509],"katex",[1506,1511,1515],{"className":1512,"ariaHidden":1514},[1513],"katex-html","true",[1506,1516,1519,1524,1531,1535,1538,1543],{"className":1517},[1518],"base",[1506,1520],{"className":1521,"style":1523},[1522],"strut","height:1.0085em;vertical-align:-0.1944em;",[1506,1525,1530],{"className":1526,"style":1529},[1527,1528],"mord","mathnormal","margin-right:0.05724em;","j",[1506,1532,1534],{"className":1533},[1527,1528],"o",[1506,1536,1462],{"className":1537},[1527,1528],[1506,1539,1542],{"className":1540,"style":1541},[1527,1528],"margin-right:0.02778em;","r",[1506,1544,1546,1550],{"className":1545},[1527],[1506,1547,1549],{"className":1548},[1527,1528],"s",[1506,1551,1554],{"className":1552},[1553],"msupsub",[1506,1555,1558],{"className":1556},[1557],"vlist-t",[1506,1559,1562],{"className":1560},[1561],"vlist-r",[1506,1563,1567],{"className":1564,"style":1566},[1565],"vlist","height:0.8141em;",[1506,1568,1570,1575],{"style":1569},"top:-3.063em;margin-right:0.05em;",[1506,1571],{"className":1572,"style":1574},[1573],"pstrut","height:2.7em;",[1506,1576,1582],{"className":1577},[1578,1579,1580,1581],"sizing","reset-size6","size3","mtight",[1506,1583,1585,1589],{"className":1584},[1527,1581],[1506,1586,1588],{"className":1587},[1527,1581],"−",[1506,1590,1592],{"className":1591},[1527,1581],"1",", ou inverse de l'intervalle entre deux déploiements).",[1506,1595,1598],{"className":1596},[1597],"katex-display",[1506,1599,1601],{"className":1600},[1509],[1506,1602,1604,1683],{"className":1603,"ariaHidden":1514},[1513],[1506,1605,1607,1611,1670,1675,1680],{"className":1606},[1518],[1506,1608],{"className":1609,"style":1610},[1522],"height:0.9805em;vertical-align:-0.2861em;",[1506,1612,1614,1619],{"className":1613},[1527],[1506,1615,1618],{"className":1616,"style":1617},[1527,1528],"margin-right:0.10764em;","f",[1506,1620,1622],{"className":1621},[1553],[1506,1623,1626,1661],{"className":1624},[1557,1625],"vlist-t2",[1506,1627,1629,1656],{"className":1628},[1561],[1506,1630,1633],{"className":1631,"style":1632},[1565],"height:0.1514em;",[1506,1634,1636,1639],{"style":1635},"top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;",[1506,1637],{"className":1638,"style":1574},[1573],[1506,1640,1642],{"className":1641},[1578,1579,1580,1581],[1506,1643,1645,1649,1653],{"className":1644},[1527,1581],[1506,1646,1648],{"className":1647},[1527,1528,1581],"co",[1506,1650,1652],{"className":1651},[1527,1528,1581],"m",[1506,1654,19],{"className":1655},[1527,1528,1581],[1506,1657,1660],{"className":1658},[1659],"vlist-s","​",[1506,1662,1664],{"className":1663},[1561],[1506,1665,1668],{"className":1666,"style":1667},[1565],"height:0.2861em;",[1506,1669],{},[1506,1671],{"className":1672,"style":1674},[1673],"mspace","margin-right:0.2778em;",[1506,1676,1679],{"className":1677},[1678],"mrel","=",[1506,1681],{"className":1682,"style":1674},[1673],[1506,1684,1686,1690],{"className":1685},[1518],[1506,1687],{"className":1688,"style":1689},[1522],"height:2.2935em;vertical-align:-0.9721em;",[1506,1691,1693,1698,1886],{"className":1692},[1527],[1506,1694],{"className":1695},[1696,1697],"mopen","nulldelimiter",[1506,1699,1702],{"className":1700},[1701],"mfrac",[1506,1703,1705,1877],{"className":1704},[1557,1625],[1506,1706,1708,1874],{"className":1707},[1561],[1506,1709,1712,1851,1862],{"className":1710,"style":1711},[1565],"height:1.3214em;",[1506,1713,1715,1719],{"style":1714},"top:-2.314em;",[1506,1716],{"className":1717,"style":1718},[1573],"height:3em;",[1506,1720,1722,1726,1784,1788,1792,1795,1847],{"className":1721},[1527],[1506,1723,1725],{"className":1724},[1696],"(",[1506,1727,1729,1733],{"className":1728},[1527],[1506,1730,1732],{"className":1731},[1527,1528],"t",[1506,1734,1736],{"className":1735},[1553],[1506,1737,1739,1776],{"className":1738},[1557,1625],[1506,1740,1742,1773],{"className":1741},[1561],[1506,1743,1746],{"className":1744,"style":1745},[1565],"height:0.3361em;",[1506,1747,1749,1752],{"style":1748},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[1506,1750],{"className":1751,"style":1574},[1573],[1506,1753,1755],{"className":1754},[1578,1579,1580,1581],[1506,1756,1758,1762,1766,1769],{"className":1757},[1527,1581],[1506,1759,1761],{"className":1760},[1527,1528,1581],"d",[1506,1763,1765],{"className":1764},[1527,1528,1581],"e",[1506,1767,19],{"className":1768},[1527,1528,1581],[1506,1770,1772],{"className":1771},[1527,1581],"2",[1506,1774,1660],{"className":1775},[1659],[1506,1777,1779],{"className":1778},[1561],[1506,1780,1782],{"className":1781,"style":1667},[1565],[1506,1783],{},[1506,1785],{"className":1786,"style":1787},[1673],"margin-right:0.2222em;",[1506,1789,1588],{"className":1790},[1791],"mbin",[1506,1793],{"className":1794,"style":1787},[1673],[1506,1796,1798,1801],{"className":1797},[1527],[1506,1799,1732],{"className":1800},[1527,1528],[1506,1802,1804],{"className":1803},[1553],[1506,1805,1807,1839],{"className":1806},[1557,1625],[1506,1808,1810,1836],{"className":1809},[1561],[1506,1811,1813],{"className":1812,"style":1745},[1565],[1506,1814,1815,1818],{"style":1748},[1506,1816],{"className":1817,"style":1574},[1573],[1506,1819,1821],{"className":1820},[1578,1579,1580,1581],[1506,1822,1824,1827,1830,1833],{"className":1823},[1527,1581],[1506,1825,1761],{"className":1826},[1527,1528,1581],[1506,1828,1765],{"className":1829},[1527,1528,1581],[1506,1831,19],{"className":1832},[1527,1528,1581],[1506,1834,1592],{"className":1835},[1527,1581],[1506,1837,1660],{"className":1838},[1659],[1506,1840,1842],{"className":1841},[1561],[1506,1843,1845],{"className":1844,"style":1667},[1565],[1506,1846],{},[1506,1848,413],{"className":1849},[1850],"mclose",[1506,1852,1854,1857],{"style":1853},"top:-3.23em;",[1506,1855],{"className":1856,"style":1718},[1573],[1506,1858],{"className":1859,"style":1861},[1860],"frac-line","border-bottom-width:0.04em;",[1506,1863,1865,1868],{"style":1864},"top:-3.677em;",[1506,1866],{"className":1867,"style":1718},[1573],[1506,1869,1871],{"className":1870},[1527],[1506,1872,1592],{"className":1873},[1527],[1506,1875,1660],{"className":1876},[1659],[1506,1878,1880],{"className":1879},[1561],[1506,1881,1884],{"className":1882,"style":1883},[1565],"height:0.9721em;",[1506,1885],{},[1506,1887],{"className":1888},[1850,1697],[19,1890,1891],{},"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,1893,1894],{},"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,1896,1897],{},[1462,1898,1899],{},[60,1900,1901],{},"Mean Time to Restore (MTTR) ou Mean Time to Recover (Temps moyen de restauration)",[19,1903,1904],{},"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,1906,1907],{},"Nous avons donc dû :",[122,1909,1910,1916,1922],{},[57,1911,1912,1915],{},[60,1913,1914],{},"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).",[57,1917,1918,1921],{},[60,1919,1920],{},"Vérifier la date de résolution ou de clôture"," : c'est la référence pour la fin d'incident.",[57,1923,1924,1927],{},[60,1925,1926],{},"Calculer la moyenne"," de (date de fin − date de début) sur tous les incidents clôturés, pour chaque produit.",[1506,1929,1931],{"className":1930},[1597],[1506,1932,1934],{"className":1933},[1509],[1506,1935,1937,2042,2258],{"className":1936,"ariaHidden":1514},[1513],[1506,1938,1940,1944,2033,2036,2039],{"className":1939},[1518],[1506,1941],{"className":1942,"style":1943},[1522],"height:0.9019em;vertical-align:-0.15em;",[1506,1945,1947,1985],{"className":1946},[1527],[1506,1948,1951],{"className":1949},[1527,1950],"accent",[1506,1952,1954],{"className":1953},[1557],[1506,1955,1957],{"className":1956},[1561],[1506,1958,1961,1970],{"className":1959,"style":1960},[1565],"height:0.7519em;",[1506,1962,1964,1967],{"style":1963},"top:-3em;",[1506,1965],{"className":1966,"style":1718},[1573],[1506,1968,1732],{"className":1969},[1527,1528],[1506,1971,1973,1976],{"style":1972},"top:-3.1841em;",[1506,1974],{"className":1975,"style":1718},[1573],[1506,1977,1981],{"className":1978,"style":1980},[1979],"accent-body","left:-0.1667em;",[1506,1982,1984],{"className":1983},[1527],"ˉ",[1506,1986,1988],{"className":1987},[1553],[1506,1989,1991,2024],{"className":1990},[1557,1625],[1506,1992,1994,2021],{"className":1993},[1561],[1506,1995,1997],{"className":1996,"style":1632},[1565],[1506,1998,1999,2002],{"style":1748},[1506,2000],{"className":2001,"style":1574},[1573],[1506,2003,2005],{"className":2004},[1578,1579,1580,1581],[1506,2006,2008,2012,2017],{"className":2007},[1527,1581],[1506,2009,2011],{"className":2010},[1527,1528,1581],"reco",[1506,2013,2016],{"className":2014,"style":2015},[1527,1528,1581],"margin-right:0.03588em;","v",[1506,2018,2020],{"className":2019,"style":1541},[1527,1528,1581],"er",[1506,2022,1660],{"className":2023},[1659],[1506,2025,2027],{"className":2026},[1561],[1506,2028,2031],{"className":2029,"style":2030},[1565],"height:0.15em;",[1506,2032],{},[1506,2034],{"className":2035,"style":1674},[1673],[1506,2037,1679],{"className":2038},[1678],[1506,2040],{"className":2041,"style":1674},[1673],[1506,2043,2045,2049,2113,2117,2197,2200,2249,2252,2255],{"className":2044},[1518],[1506,2046],{"className":2047,"style":2048},[1522],"height:2.9535em;vertical-align:-1.3021em;",[1506,2050,2052,2055,2110],{"className":2051},[1527],[1506,2053],{"className":2054},[1696,1697],[1506,2056,2058],{"className":2057},[1701],[1506,2059,2061,2101],{"className":2060},[1557,1625],[1506,2062,2064,2098],{"className":2063},[1561],[1506,2065,2067,2079,2087],{"className":2066,"style":1711},[1565],[1506,2068,2069,2072],{"style":1714},[1506,2070],{"className":2071,"style":1718},[1573],[1506,2073,2075],{"className":2074},[1527],[1506,2076,2078],{"className":2077},[1527,1528],"n",[1506,2080,2081,2084],{"style":1853},[1506,2082],{"className":2083,"style":1718},[1573],[1506,2085],{"className":2086,"style":1861},[1860],[1506,2088,2089,2092],{"style":1864},[1506,2090],{"className":2091,"style":1718},[1573],[1506,2093,2095],{"className":2094},[1527],[1506,2096,1592],{"className":2097},[1527],[1506,2099,1660],{"className":2100},[1659],[1506,2102,2104],{"className":2103},[1561],[1506,2105,2108],{"className":2106,"style":2107},[1565],"height:0.686em;",[1506,2109],{},[1506,2111],{"className":2112},[1850,1697],[1506,2114],{"className":2115,"style":2116},[1673],"margin-right:0.1667em;",[1506,2118,2122],{"className":2119},[2120,2121],"mop","op-limits",[1506,2123,2125,2188],{"className":2124},[1557,1625],[1506,2126,2128,2185],{"className":2127},[1561],[1506,2129,2132,2156,2170],{"className":2130,"style":2131},[1565],"height:1.6514em;",[1506,2133,2135,2139],{"style":2134},"top:-1.8479em;margin-left:0em;",[1506,2136],{"className":2137,"style":2138},[1573],"height:3.05em;",[1506,2140,2142],{"className":2141},[1578,1579,1580,1581],[1506,2143,2145,2150,2153],{"className":2144},[1527,1581],[1506,2146,2149],{"className":2147,"style":2148},[1527,1528,1581],"margin-right:0.03148em;","k",[1506,2151,1679],{"className":2152},[1678,1581],[1506,2154,1592],{"className":2155},[1527,1581],[1506,2157,2159,2162],{"style":2158},"top:-3.05em;",[1506,2160],{"className":2161,"style":2138},[1573],[1506,2163,2164],{},[1506,2165,2169],{"className":2166},[2120,2167,2168],"op-symbol","large-op","∑",[1506,2171,2173,2176],{"style":2172},"top:-4.3em;margin-left:0em;",[1506,2174],{"className":2175,"style":2138},[1573],[1506,2177,2179],{"className":2178},[1578,1579,1580,1581],[1506,2180,2182],{"className":2181},[1527,1581],[1506,2183,2078],{"className":2184},[1527,1528,1581],[1506,2186,1660],{"className":2187},[1659],[1506,2189,2191],{"className":2190},[1561],[1506,2192,2195],{"className":2193,"style":2194},[1565],"height:1.3021em;",[1506,2196],{},[1506,2198,1725],{"className":2199},[1696],[1506,2201,2203,2206],{"className":2202},[1527],[1506,2204,1732],{"className":2205},[1527,1528],[1506,2207,2209],{"className":2208},[1553],[1506,2210,2212,2241],{"className":2211},[1557,1625],[1506,2213,2215,2238],{"className":2214},[1561],[1506,2216,2218],{"className":2217,"style":1745},[1565],[1506,2219,2220,2223],{"style":1748},[1506,2221],{"className":2222,"style":1574},[1573],[1506,2224,2226],{"className":2225},[1578,1579,1580,1581],[1506,2227,2229,2232,2235],{"className":2228},[1527,1581],[1506,2230,1765],{"className":2231},[1527,1528,1581],[1506,2233,2078],{"className":2234},[1527,1528,1581],[1506,2236,1761],{"className":2237},[1527,1528,1581],[1506,2239,1660],{"className":2240},[1659],[1506,2242,2244],{"className":2243},[1561],[1506,2245,2247],{"className":2246,"style":2030},[1565],[1506,2248],{},[1506,2250],{"className":2251,"style":1787},[1673],[1506,2253,1588],{"className":2254},[1791],[1506,2256],{"className":2257,"style":1787},[1673],[1506,2259,2261,2265,2321],{"className":2260},[1518],[1506,2262],{"className":2263,"style":2264},[1522],"height:1em;vertical-align:-0.25em;",[1506,2266,2268,2271],{"className":2267},[1527],[1506,2269,1732],{"className":2270},[1527,1528],[1506,2272,2274],{"className":2273},[1553],[1506,2275,2277,2313],{"className":2276},[1557,1625],[1506,2278,2280,2310],{"className":2279},[1561],[1506,2281,2284],{"className":2282,"style":2283},[1565],"height:0.2806em;",[1506,2285,2286,2289],{"style":1748},[1506,2287],{"className":2288,"style":1574},[1573],[1506,2290,2292],{"className":2291},[1578,1579,1580,1581],[1506,2293,2295,2298,2301,2304,2307],{"className":2294},[1527,1581],[1506,2296,1549],{"className":2297},[1527,1528,1581],[1506,2299,1732],{"className":2300},[1527,1528,1581],[1506,2302,26],{"className":2303},[1527,1528,1581],[1506,2305,1542],{"className":2306,"style":1541},[1527,1528,1581],[1506,2308,1732],{"className":2309},[1527,1528,1581],[1506,2311,1660],{"className":2312},[1659],[1506,2314,2316],{"className":2315},[1561],[1506,2317,2319],{"className":2318,"style":2030},[1565],[1506,2320],{},[1506,2322,413],{"className":2323},[1850],[19,2325,2326],{},"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,2328,2329],{},[1462,2330,2331],{},[60,2332,2333],{},"Change Failure Rate (Taux d'échec des changements)",[19,2335,2336],{},"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 :",[122,2338,2339,2345,2351],{},[57,2340,2341,2344],{},[60,2342,2343],{},"Identifier le \"dernier déploiement\""," survenu avant la date de création de l'incident, tous composants du produit confondus.",[57,2346,2347,2350],{},[60,2348,2349],{},"Incrémenter un déploiement \"défaillant\""," si au moins un incident lui est rattaché.",[57,2352,2353,2356],{},[60,2354,2355],{},"Diviser le nombre de déploiements défaillants par le nombre total de déploiements"," du produit, sur la période considérée.",[1506,2358,2360],{"className":2359},[1597],[1506,2361,2363],{"className":2362},[1509],[1506,2364,2366,2482],{"className":2365,"ariaHidden":1514},[1513],[1506,2367,2369,2373,2473,2476,2479],{"className":2368},[1518],[1506,2370],{"className":2371,"style":2372},[1522],"height:1.0747em;vertical-align:-0.3802em;",[1506,2374,2376,2416],{"className":2375},[1527],[1506,2377,2379,2384,2388,2392,2395,2400,2404,2409,2412],{"className":2378},[1527],[1506,2380,2383],{"className":2381,"style":2382},[1527,1528],"margin-right:0.07153em;","C",[1506,2385,2387],{"className":2386},[1527,1528],"han",[1506,2389,2391],{"className":2390,"style":2015},[1527,1528],"g",[1506,2393,1765],{"className":2394},[1527,1528],[1506,2396,2399],{"className":2397,"style":2398},[1527,1528],"margin-right:0.13889em;","F",[1506,2401,2403],{"className":2402},[1527,1528],"ai",[1506,2405,2408],{"className":2406,"style":2407},[1527,1528],"margin-right:0.01968em;","l",[1506,2410,1462],{"className":2411},[1527,1528],[1506,2413,2415],{"className":2414},[1527,1528],"re",[1506,2417,2419],{"className":2418},[1553],[1506,2420,2422,2464],{"className":2421},[1557,1625],[1506,2423,2425,2461],{"className":2424},[1561],[1506,2426,2429],{"className":2427,"style":2428},[1565],"height:0.242em;",[1506,2430,2432,2435],{"style":2431},"top:-2.4559em;margin-right:0.05em;",[1506,2433],{"className":2434,"style":1574},[1573],[1506,2436,2438],{"className":2437},[1578,1579,1580,1581],[1506,2439,2441,2444,2448,2451,2454,2458],{"className":2440},[1527,1581],[1506,2442,19],{"className":2443},[1527,1528,1581],[1506,2445,2447],{"className":2446},[1527,1528,1581],"ro",[1506,2449,1761],{"className":2450},[1527,1528,1581],[1506,2452,1462],{"className":2453},[1527,1528,1581],[1506,2455,2457],{"className":2456},[1527,1528,1581],"c",[1506,2459,1732],{"className":2460},[1527,1528,1581],[1506,2462,1660],{"className":2463},[1659],[1506,2465,2467],{"className":2466},[1561],[1506,2468,2471],{"className":2469,"style":2470},[1565],"height:0.3802em;",[1506,2472],{},[1506,2474],{"className":2475,"style":1674},[1673],[1506,2477,1679],{"className":2478},[1678],[1506,2480],{"className":2481,"style":1674},[1673],[1506,2483,2485,2489],{"className":2484},[1518],[1506,2486],{"className":2487,"style":2488},[1522],"height:2.363em;vertical-align:-0.936em;",[1506,2490,2492,2495,2668],{"className":2491},[1527],[1506,2493],{"className":2494},[1696,1697],[1506,2496,2498],{"className":2497},[1701],[1506,2499,2501,2659],{"className":2500},[1557,1625],[1506,2502,2504,2656],{"className":2503},[1561],[1506,2505,2508,2582,2590],{"className":2506,"style":2507},[1565],"height:1.427em;",[1506,2509,2510,2513],{"style":1714},[1506,2511],{"className":2512,"style":1718},[1573],[1506,2514,2516,2521,2524],{"className":2515},[1527],[1506,2517,2169],{"className":2518,"style":2520},[2120,2167,2519],"small-op","position:relative;top:0em;",[1506,2522],{"className":2523,"style":2116},[1673],[1506,2525,2527],{"className":2526},[1527],[1506,2528,2530,2533],{"className":2529},[1527],[1506,2531,1761],{"className":2532},[1527,1528],[1506,2534,2536],{"className":2535},[1553],[1506,2537,2539,2574],{"className":2538},[1557,1625],[1506,2540,2542,2571],{"className":2541},[1561],[1506,2543,2545],{"className":2544,"style":1745},[1565],[1506,2546,2547,2550],{"style":1748},[1506,2548],{"className":2549,"style":1574},[1573],[1506,2551,2553],{"className":2552},[1578,1579,1580,1581],[1506,2554,2556,2559,2562,2565,2568],{"className":2555},[1527,1581],[1506,2557,1732],{"className":2558},[1527,1528,1581],[1506,2560,1534],{"className":2561},[1527,1528,1581],[1506,2563,1732],{"className":2564},[1527,1528,1581],[1506,2566,26],{"className":2567},[1527,1528,1581],[1506,2569,2408],{"className":2570,"style":2407},[1527,1528,1581],[1506,2572,1660],{"className":2573},[1659],[1506,2575,2577],{"className":2576},[1561],[1506,2578,2580],{"className":2579,"style":2030},[1565],[1506,2581],{},[1506,2583,2584,2587],{"style":1853},[1506,2585],{"className":2586,"style":1718},[1573],[1506,2588],{"className":2589,"style":1861},[1860],[1506,2591,2592,2595],{"style":1864},[1506,2593],{"className":2594,"style":1718},[1573],[1506,2596,2598,2601,2604],{"className":2597},[1527],[1506,2599,2169],{"className":2600,"style":2520},[2120,2167,2519],[1506,2602],{"className":2603,"style":2116},[1673],[1506,2605,2607],{"className":2606},[1527],[1506,2608,2610,2613],{"className":2609},[1527],[1506,2611,1761],{"className":2612},[1527,1528],[1506,2614,2616],{"className":2615},[1553],[1506,2617,2619,2648],{"className":2618},[1557,1625],[1506,2620,2622,2645],{"className":2621},[1561],[1506,2623,2625],{"className":2624,"style":1745},[1565],[1506,2626,2627,2630],{"style":1748},[1506,2628],{"className":2629,"style":1574},[1573],[1506,2631,2633],{"className":2632},[1578,1579,1580,1581],[1506,2634,2636,2639,2642],{"className":2635},[1527,1581],[1506,2637,1618],{"className":2638,"style":1617},[1527,1528,1581],[1506,2640,2403],{"className":2641},[1527,1528,1581],[1506,2643,2408],{"className":2644,"style":2407},[1527,1528,1581],[1506,2646,1660],{"className":2647},[1659],[1506,2649,2651],{"className":2650},[1561],[1506,2652,2654],{"className":2653,"style":1667},[1565],[1506,2655],{},[1506,2657,1660],{"className":2658},[1659],[1506,2660,2662],{"className":2661},[1561],[1506,2663,2666],{"className":2664,"style":2665},[1565],"height:0.936em;",[1506,2667],{},[1506,2669],{"className":2670},[1850,1697],[19,2672,2673],{},"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).",[617,2675,2677],{"id":2676},"calcul-des-métriques-par-niveau-de-granularité","Calcul des métriques par niveau de granularité 📊",[592,2679,2680],{},[19,2681,2682,2685],{},[60,2683,2684],{},"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,2687,2688],{},"Différentes vues des Dora Metrics de notre solution pour illustrer les calculs un peu plus bas.",[19,2690,2691],{},[142,2692],{"alt":2693,"src":2694},"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,2696,2697],{},[142,2698],{"alt":2699,"src":2700},"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,2702,2703],{},[142,2704],{"alt":2705,"src":2706},"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",[617,2708,2710],{"id":2709},"lead-time-for-changes","Lead Time For Changes",[19,2712,2713],{},[60,2714,2715],{},"Niveau Composant",[1506,2717,2719],{"className":2718},[1597],[1506,2720,2722],{"className":2721},[1509],[1506,2723,2725,2838,3073],{"className":2724,"ariaHidden":1514},[1513],[1506,2726,2728,2732,2736,2829,2832,2835],{"className":2727},[1518],[1506,2729],{"className":2730,"style":2731},[1522],"height:0.9694em;vertical-align:-0.2861em;",[1506,2733,2735],{"className":2734},[1527],"Δ",[1506,2737,2739,2742],{"className":2738},[1527],[1506,2740,1732],{"className":2741},[1527,1528],[1506,2743,2745],{"className":2744},[1553],[1506,2746,2748,2821],{"className":2747},[1557,1625],[1506,2749,2751,2818],{"className":2750},[1561],[1506,2752,2754],{"className":2753,"style":1745},[1565],[1506,2755,2756,2759],{"style":1748},[1506,2757],{"className":2758,"style":1574},[1573],[1506,2760,2762],{"className":2761},[1578,1579,1580,1581],[1506,2763,2765,2769,2772],{"className":2764},[1527,1581],[1506,2766,2768],{"className":2767},[1527,1528,1581],"lt",[1506,2770,1618],{"className":2771,"style":1617},[1527,1528,1581],[1506,2773,2775,2778],{"className":2774},[1527,1581],[1506,2776,2457],{"className":2777},[1527,1528,1581],[1506,2779,2781],{"className":2780},[1553],[1506,2782,2784,2809],{"className":2783},[1557,1625],[1506,2785,2787,2806],{"className":2786},[1561],[1506,2788,2791],{"className":2789,"style":2790},[1565],"height:0.1645em;",[1506,2792,2794,2798],{"style":2793},"top:-2.357em;margin-left:0em;margin-right:0.0714em;",[1506,2795],{"className":2796,"style":2797},[1573],"height:2.5em;",[1506,2799,2803],{"className":2800},[1578,2801,2802,1581],"reset-size3","size1",[1506,2804,2457],{"className":2805},[1527,1528,1581],[1506,2807,1660],{"className":2808},[1659],[1506,2810,2812],{"className":2811},[1561],[1506,2813,2816],{"className":2814,"style":2815},[1565],"height:0.143em;",[1506,2817],{},[1506,2819,1660],{"className":2820},[1659],[1506,2822,2824],{"className":2823},[1561],[1506,2825,2827],{"className":2826,"style":1667},[1565],[1506,2828],{},[1506,2830],{"className":2831,"style":1674},[1673],[1506,2833,1679],{"className":2834},[1678],[1506,2836],{"className":2837,"style":1674},[1673],[1506,2839,2841,2845,2972,2975,2978,2981,3064,3067,3070],{"className":2840},[1518],[1506,2842],{"className":2843,"style":2844},[1522],"height:2.4221em;vertical-align:-0.9721em;",[1506,2846,2849,2858,2966],{"className":2847},[2848],"minner",[1506,2850,2854],{"className":2851,"style":2853},[1696,2852],"delimcenter","top:0em;",[1506,2855,1725],{"className":2856},[2857,1580],"delimsizing",[1506,2859,2861,2864,2963],{"className":2860},[1527],[1506,2862],{"className":2863},[1696,1697],[1506,2865,2867],{"className":2866},[1701],[1506,2868,2870,2955],{"className":2869},[1557,1625],[1506,2871,2873,2952],{"className":2872},[1561],[1506,2874,2876,2933,2941],{"className":2875,"style":1711},[1565],[1506,2877,2878,2881],{"style":1714},[1506,2879],{"className":2880,"style":1718},[1573],[1506,2882,2884],{"className":2883},[1527],[1506,2885,2887,2890],{"className":2886},[1527],[1506,2888,1761],{"className":2889},[1527,1528],[1506,2891,2893],{"className":2892},[1553],[1506,2894,2896,2925],{"className":2895},[1557,1625],[1506,2897,2899,2922],{"className":2898},[1561],[1506,2900,2902],{"className":2901,"style":2283},[1565],[1506,2903,2904,2907],{"style":1748},[1506,2905],{"className":2906,"style":1574},[1573],[1506,2908,2910],{"className":2909},[1578,1579,1580,1581],[1506,2911,2913,2916,2919],{"className":2912},[1527,1581],[1506,2914,1732],{"className":2915},[1527,1528,1581],[1506,2917,26],{"className":2918},[1527,1528,1581],[1506,2920,2391],{"className":2921,"style":2015},[1527,1528,1581],[1506,2923,1660],{"className":2924},[1659],[1506,2926,2928],{"className":2927},[1561],[1506,2929,2931],{"className":2930,"style":1667},[1565],[1506,2932],{},[1506,2934,2935,2938],{"style":1853},[1506,2936],{"className":2937,"style":1718},[1573],[1506,2939],{"className":2940,"style":1861},[1860],[1506,2942,2943,2946],{"style":1864},[1506,2944],{"className":2945,"style":1718},[1573],[1506,2947,2949],{"className":2948},[1527],[1506,2950,1592],{"className":2951},[1527],[1506,2953,1660],{"className":2954},[1659],[1506,2956,2958],{"className":2957},[1561],[1506,2959,2961],{"className":2960,"style":1883},[1565],[1506,2962],{},[1506,2964],{"className":2965},[1850,1697],[1506,2967,2969],{"className":2968,"style":2853},[1850,2852],[1506,2970,413],{"className":2971},[2857,1580],[1506,2973],{"className":2974,"style":2116},[1673],[1506,2976,2169],{"className":2977,"style":2520},[2120,2167,2168],[1506,2979,1725],{"className":2980},[1696],[1506,2982,2984,2987],{"className":2983},[1527],[1506,2985,1732],{"className":2986},[1527,1528],[1506,2988,2990],{"className":2989},[1553],[1506,2991,2993,3055],{"className":2992},[1557,1625],[1506,2994,2996,3052],{"className":2995},[1561],[1506,2997,2999],{"className":2998,"style":1745},[1565],[1506,3000,3001,3004],{"style":1748},[1506,3002],{"className":3003,"style":1574},[1573],[1506,3005,3007],{"className":3006},[1578,1579,1580,1581],[1506,3008,3010],{"className":3009},[1527,1581],[1506,3011,3013,3016],{"className":3012},[1527,1581],[1506,3014,1761],{"className":3015},[1527,1528,1581],[1506,3017,3019],{"className":3018},[1553],[1506,3020,3022,3044],{"className":3021},[1557,1625],[1506,3023,3025,3041],{"className":3024},[1561],[1506,3026,3029],{"className":3027,"style":3028},[1565],"height:0.3281em;",[1506,3030,3031,3034],{"style":2793},[1506,3032],{"className":3033,"style":2797},[1573],[1506,3035,3037],{"className":3036},[1578,2801,2802,1581],[1506,3038,3040],{"className":3039},[1527,1528,1581],"i",[1506,3042,1660],{"className":3043},[1659],[1506,3045,3047],{"className":3046},[1561],[1506,3048,3050],{"className":3049,"style":2815},[1565],[1506,3051],{},[1506,3053,1660],{"className":3054},[1659],[1506,3056,3058],{"className":3057},[1561],[1506,3059,3062],{"className":3060,"style":3061},[1565],"height:0.2501em;",[1506,3063],{},[1506,3065],{"className":3066,"style":1787},[1673],[1506,3068,1588],{"className":3069},[1791],[1506,3071],{"className":3072,"style":1787},[1673],[1506,3074,3076,3080,3163],{"className":3075},[1518],[1506,3077],{"className":3078,"style":3079},[1522],"height:1.0001em;vertical-align:-0.2501em;",[1506,3081,3083,3086],{"className":3082},[1527],[1506,3084,1732],{"className":3085},[1527,1528],[1506,3087,3089],{"className":3088},[1553],[1506,3090,3092,3155],{"className":3091},[1557,1625],[1506,3093,3095,3152],{"className":3094},[1561],[1506,3096,3098],{"className":3097,"style":1632},[1565],[1506,3099,3100,3103],{"style":1748},[1506,3101],{"className":3102,"style":1574},[1573],[1506,3104,3106],{"className":3105},[1578,1579,1580,1581],[1506,3107,3109,3112],{"className":3108},[1527,1581],[1506,3110,2457],{"className":3111},[1527,1528,1581],[1506,3113,3115,3118],{"className":3114},[1527,1581],[1506,3116,1534],{"className":3117},[1527,1528,1581],[1506,3119,3121],{"className":3120},[1553],[1506,3122,3124,3144],{"className":3123},[1557,1625],[1506,3125,3127,3141],{"className":3126},[1561],[1506,3128,3130],{"className":3129,"style":3028},[1565],[1506,3131,3132,3135],{"style":2793},[1506,3133],{"className":3134,"style":2797},[1573],[1506,3136,3138],{"className":3137},[1578,2801,2802,1581],[1506,3139,3040],{"className":3140},[1527,1528,1581],[1506,3142,1660],{"className":3143},[1659],[1506,3145,3147],{"className":3146},[1561],[1506,3148,3150],{"className":3149,"style":2815},[1565],[1506,3151],{},[1506,3153,1660],{"className":3154},[1659],[1506,3156,3158],{"className":3157},[1561],[1506,3159,3161],{"className":3160,"style":3061},[1565],[1506,3162],{},[1506,3164,413],{"className":3165},[1850],[19,3167,3168],{},"où :",[122,3170,3171,3267,3365],{},[57,3172,3173,3266],{},[1506,3174,3176],{"className":3175},[1509],[1506,3177,3179],{"className":3178,"ariaHidden":1514},[1513],[1506,3180,3182,3186],{"className":3181},[1518],[1506,3183],{"className":3184,"style":3185},[1522],"height:0.8652em;vertical-align:-0.2501em;",[1506,3187,3189,3192],{"className":3188},[1527],[1506,3190,1732],{"className":3191},[1527,1528],[1506,3193,3195],{"className":3194},[1553],[1506,3196,3198,3258],{"className":3197},[1557,1625],[1506,3199,3201,3255],{"className":3200},[1561],[1506,3202,3204],{"className":3203,"style":1745},[1565],[1506,3205,3206,3209],{"style":1748},[1506,3207],{"className":3208,"style":1574},[1573],[1506,3210,3212],{"className":3211},[1578,1579,1580,1581],[1506,3213,3215],{"className":3214},[1527,1581],[1506,3216,3218,3221],{"className":3217},[1527,1581],[1506,3219,1761],{"className":3220},[1527,1528,1581],[1506,3222,3224],{"className":3223},[1553],[1506,3225,3227,3247],{"className":3226},[1557,1625],[1506,3228,3230,3244],{"className":3229},[1561],[1506,3231,3233],{"className":3232,"style":3028},[1565],[1506,3234,3235,3238],{"style":2793},[1506,3236],{"className":3237,"style":2797},[1573],[1506,3239,3241],{"className":3240},[1578,2801,2802,1581],[1506,3242,3040],{"className":3243},[1527,1528,1581],[1506,3245,1660],{"className":3246},[1659],[1506,3248,3250],{"className":3249},[1561],[1506,3251,3253],{"className":3252,"style":2815},[1565],[1506,3254],{},[1506,3256,1660],{"className":3257},[1659],[1506,3259,3261],{"className":3260},[1561],[1506,3262,3264],{"className":3263,"style":3061},[1565],[1506,3265],{}," = Date de déploiement en production",[57,3268,3269,3364],{},[1506,3270,3272],{"className":3271},[1509],[1506,3273,3275],{"className":3274,"ariaHidden":1514},[1513],[1506,3276,3278,3281],{"className":3277},[1518],[1506,3279],{"className":3280,"style":3185},[1522],[1506,3282,3284,3287],{"className":3283},[1527],[1506,3285,1732],{"className":3286},[1527,1528],[1506,3288,3290],{"className":3289},[1553],[1506,3291,3293,3356],{"className":3292},[1557,1625],[1506,3294,3296,3353],{"className":3295},[1561],[1506,3297,3299],{"className":3298,"style":1632},[1565],[1506,3300,3301,3304],{"style":1748},[1506,3302],{"className":3303,"style":1574},[1573],[1506,3305,3307],{"className":3306},[1578,1579,1580,1581],[1506,3308,3310,3313],{"className":3309},[1527,1581],[1506,3311,2457],{"className":3312},[1527,1528,1581],[1506,3314,3316,3319],{"className":3315},[1527,1581],[1506,3317,1534],{"className":3318},[1527,1528,1581],[1506,3320,3322],{"className":3321},[1553],[1506,3323,3325,3345],{"className":3324},[1557,1625],[1506,3326,3328,3342],{"className":3327},[1561],[1506,3329,3331],{"className":3330,"style":3028},[1565],[1506,3332,3333,3336],{"style":2793},[1506,3334],{"className":3335,"style":2797},[1573],[1506,3337,3339],{"className":3338},[1578,2801,2802,1581],[1506,3340,3040],{"className":3341},[1527,1528,1581],[1506,3343,1660],{"className":3344},[1659],[1506,3346,3348],{"className":3347},[1561],[1506,3349,3351],{"className":3350,"style":2815},[1565],[1506,3352],{},[1506,3354,1660],{"className":3355},[1659],[1506,3357,3359],{"className":3358},[1561],[1506,3360,3362],{"className":3361,"style":3061},[1565],[1506,3363],{}," = Date du dernier commit de la version",[57,3366,3367,3428],{},[1506,3368,3370],{"className":3369},[1509],[1506,3371,3373],{"className":3372,"ariaHidden":1514},[1513],[1506,3374,3376,3379],{"className":3375},[1518],[1506,3377],{"className":3378,"style":1610},[1522],[1506,3380,3382,3385],{"className":3381},[1527],[1506,3383,1761],{"className":3384},[1527,1528],[1506,3386,3388],{"className":3387},[1553],[1506,3389,3391,3420],{"className":3390},[1557,1625],[1506,3392,3394,3417],{"className":3393},[1561],[1506,3395,3397],{"className":3396,"style":2283},[1565],[1506,3398,3399,3402],{"style":1748},[1506,3400],{"className":3401,"style":1574},[1573],[1506,3403,3405],{"className":3404},[1578,1579,1580,1581],[1506,3406,3408,3411,3414],{"className":3407},[1527,1581],[1506,3409,1732],{"className":3410},[1527,1528,1581],[1506,3412,26],{"className":3413},[1527,1528,1581],[1506,3415,2391],{"className":3416,"style":2015},[1527,1528,1581],[1506,3418,1660],{"className":3419},[1659],[1506,3421,3423],{"className":3422},[1561],[1506,3424,3426],{"className":3425,"style":1667},[1565],[1506,3427],{}," = Nombre de déploiements en production associés à un tag Git",[19,3430,3431],{},[60,3432,3433],{},"Niveau Produit",[1506,3435,3437],{"className":3436},[1597],[1506,3438,3440],{"className":3439},[1509],[1506,3441,3443,3550],{"className":3442,"ariaHidden":1514},[1513],[1506,3444,3446,3450,3453,3541,3544,3547],{"className":3445},[1518],[1506,3447],{"className":3448,"style":3449},[1522],"height:1.0307em;vertical-align:-0.3473em;",[1506,3451,2735],{"className":3452},[1527],[1506,3454,3456,3459],{"className":3455},[1527],[1506,3457,1732],{"className":3458},[1527,1528],[1506,3460,3462],{"className":3461},[1553],[1506,3463,3465,3532],{"className":3464},[1557,1625],[1506,3466,3468,3529],{"className":3467},[1561],[1506,3469,3471],{"className":3470,"style":1745},[1565],[1506,3472,3473,3476],{"style":1748},[1506,3474],{"className":3475,"style":1574},[1573],[1506,3477,3479],{"className":3478},[1578,1579,1580,1581],[1506,3480,3482,3485,3488],{"className":3481},[1527,1581],[1506,3483,2768],{"className":3484},[1527,1528,1581],[1506,3486,1618],{"className":3487,"style":1617},[1527,1528,1581],[1506,3489,3491,3494],{"className":3490},[1527,1581],[1506,3492,2457],{"className":3493},[1527,1528,1581],[1506,3495,3497],{"className":3496},[1553],[1506,3498,3500,3520],{"className":3499},[1557,1625],[1506,3501,3503,3517],{"className":3502},[1561],[1506,3504,3506],{"className":3505,"style":2790},[1565],[1506,3507,3508,3511],{"style":2793},[1506,3509],{"className":3510,"style":2797},[1573],[1506,3512,3514],{"className":3513},[1578,2801,2802,1581],[1506,3515,19],{"className":3516},[1527,1528,1581],[1506,3518,1660],{"className":3519},[1659],[1506,3521,3523],{"className":3522},[1561],[1506,3524,3527],{"className":3525,"style":3526},[1565],"height:0.2819em;",[1506,3528],{},[1506,3530,1660],{"className":3531},[1659],[1506,3533,3535],{"className":3534},[1561],[1506,3536,3539],{"className":3537,"style":3538},[1565],"height:0.3473em;",[1506,3540],{},[1506,3542],{"className":3543,"style":1674},[1673],[1506,3545,1679],{"className":3546},[1678],[1506,3548],{"className":3549,"style":1674},[1673],[1506,3551,3553,3557,3657,3660,3663,3666],{"className":3552},[1518],[1506,3554],{"className":3555,"style":3556},[1522],"height:2.1574em;vertical-align:-0.836em;",[1506,3558,3560,3563,3654],{"className":3559},[1527],[1506,3561],{"className":3562},[1696,1697],[1506,3564,3566],{"className":3565},[1701],[1506,3567,3569,3645],{"className":3568},[1557,1625],[1506,3570,3572,3642],{"className":3571},[1561],[1506,3573,3575,3623,3631],{"className":3574,"style":1711},[1565],[1506,3576,3577,3580],{"style":1714},[1506,3578],{"className":3579,"style":1718},[1573],[1506,3581,3583],{"className":3582},[1527],[1506,3584,3586,3589],{"className":3585},[1527],[1506,3587,2078],{"className":3588},[1527,1528],[1506,3590,3592],{"className":3591},[1553],[1506,3593,3595,3615],{"className":3594},[1557,1625],[1506,3596,3598,3612],{"className":3597},[1561],[1506,3599,3601],{"className":3600,"style":1632},[1565],[1506,3602,3603,3606],{"style":1748},[1506,3604],{"className":3605,"style":1574},[1573],[1506,3607,3609],{"className":3608},[1578,1579,1580,1581],[1506,3610,2457],{"className":3611},[1527,1528,1581],[1506,3613,1660],{"className":3614},[1659],[1506,3616,3618],{"className":3617},[1561],[1506,3619,3621],{"className":3620,"style":2030},[1565],[1506,3622],{},[1506,3624,3625,3628],{"style":1853},[1506,3626],{"className":3627,"style":1718},[1573],[1506,3629],{"className":3630,"style":1861},[1860],[1506,3632,3633,3636],{"style":1864},[1506,3634],{"className":3635,"style":1718},[1573],[1506,3637,3639],{"className":3638},[1527],[1506,3640,1592],{"className":3641},[1527],[1506,3643,1660],{"className":3644},[1659],[1506,3646,3648],{"className":3647},[1561],[1506,3649,3652],{"className":3650,"style":3651},[1565],"height:0.836em;",[1506,3653],{},[1506,3655],{"className":3656},[1850,1697],[1506,3658],{"className":3659,"style":2116},[1673],[1506,3661,2169],{"className":3662,"style":2520},[2120,2167,2168],[1506,3664],{"className":3665,"style":2116},[1673],[1506,3667,3669,3675,3678,3807],{"className":3668},[2848],[1506,3670,3672],{"className":3671,"style":2853},[1696,2852],[1506,3673,1725],{"className":3674},[2857,2802],[1506,3676,2735],{"className":3677},[1527],[1506,3679,3681,3684],{"className":3680},[1527],[1506,3682,1732],{"className":3683},[1527,1528],[1506,3685,3687],{"className":3686},[1553],[1506,3688,3690,3798],{"className":3689},[1557,1625],[1506,3691,3693,3795],{"className":3692},[1561],[1506,3694,3696],{"className":3695,"style":1745},[1565],[1506,3697,3698,3701],{"style":1748},[1506,3699],{"className":3700,"style":1574},[1573],[1506,3702,3704],{"className":3703},[1578,1579,1580,1581],[1506,3705,3707,3710,3713],{"className":3706},[1527,1581],[1506,3708,2768],{"className":3709},[1527,1528,1581],[1506,3711,1618],{"className":3712,"style":1617},[1527,1528,1581],[1506,3714,3716,3719],{"className":3715},[1527,1581],[1506,3717,2457],{"className":3718},[1527,1528,1581],[1506,3720,3722],{"className":3721},[1553],[1506,3723,3725,3786],{"className":3724},[1557,1625],[1506,3726,3728,3783],{"className":3727},[1561],[1506,3729,3731],{"className":3730,"style":2790},[1565],[1506,3732,3733,3736],{"style":2793},[1506,3734],{"className":3735,"style":2797},[1573],[1506,3737,3739],{"className":3738},[1578,2801,2802,1581],[1506,3740,3742],{"className":3741},[1527,1581],[1506,3743,3745,3748],{"className":3744},[1527,1581],[1506,3746,2457],{"className":3747},[1527,1528,1581],[1506,3749,3751],{"className":3750},[1553],[1506,3752,3754,3774],{"className":3753},[1557,1625],[1506,3755,3757,3771],{"className":3756},[1561],[1506,3758,3761],{"className":3759,"style":3760},[1565],"height:0.3448em;",[1506,3762,3764,3768],{"style":3763},"top:-2.3448em;margin-left:0em;margin-right:0.1em;",[1506,3765],{"className":3766,"style":3767},[1573],"height:2.6595em;",[1506,3769,3040],{"className":3770},[1527,1528,1581],[1506,3772,1660],{"className":3773},[1659],[1506,3775,3777],{"className":3776},[1561],[1506,3778,3781],{"className":3779,"style":3780},[1565],"height:0.3147em;",[1506,3782],{},[1506,3784,1660],{"className":3785},[1659],[1506,3787,3789],{"className":3788},[1561],[1506,3790,3793],{"className":3791,"style":3792},[1565],"height:0.3678em;",[1506,3794],{},[1506,3796,1660],{"className":3797},[1659],[1506,3799,3801],{"className":3800},[1561],[1506,3802,3805],{"className":3803,"style":3804},[1565],"height:0.4075em;",[1506,3806],{},[1506,3808,3810],{"className":3809,"style":2853},[1850,2852],[1506,3811,413],{"className":3812},[2857,2802],[19,3814,3168],{},[122,3816,3817,3959],{},[57,3818,3819,3958],{},[1506,3820,3822],{"className":3821},[1509],[1506,3823,3825],{"className":3824,"ariaHidden":1514},[1513],[1506,3826,3828,3832,3835],{"className":3827},[1518],[1506,3829],{"className":3830,"style":3831},[1522],"height:1.0908em;vertical-align:-0.4075em;",[1506,3833,2735],{"className":3834},[1527],[1506,3836,3838,3841],{"className":3837},[1527],[1506,3839,1732],{"className":3840},[1527,1528],[1506,3842,3844],{"className":3843},[1553],[1506,3845,3847,3950],{"className":3846},[1557,1625],[1506,3848,3850,3947],{"className":3849},[1561],[1506,3851,3853],{"className":3852,"style":1745},[1565],[1506,3854,3855,3858],{"style":1748},[1506,3856],{"className":3857,"style":1574},[1573],[1506,3859,3861],{"className":3860},[1578,1579,1580,1581],[1506,3862,3864,3867,3870],{"className":3863},[1527,1581],[1506,3865,2768],{"className":3866},[1527,1528,1581],[1506,3868,1618],{"className":3869,"style":1617},[1527,1528,1581],[1506,3871,3873,3876],{"className":3872},[1527,1581],[1506,3874,2457],{"className":3875},[1527,1528,1581],[1506,3877,3879],{"className":3878},[1553],[1506,3880,3882,3939],{"className":3881},[1557,1625],[1506,3883,3885,3936],{"className":3884},[1561],[1506,3886,3888],{"className":3887,"style":2790},[1565],[1506,3889,3890,3893],{"style":2793},[1506,3891],{"className":3892,"style":2797},[1573],[1506,3894,3896],{"className":3895},[1578,2801,2802,1581],[1506,3897,3899],{"className":3898},[1527,1581],[1506,3900,3902,3905],{"className":3901},[1527,1581],[1506,3903,2457],{"className":3904},[1527,1528,1581],[1506,3906,3908],{"className":3907},[1553],[1506,3909,3911,3928],{"className":3910},[1557,1625],[1506,3912,3914,3925],{"className":3913},[1561],[1506,3915,3917],{"className":3916,"style":3760},[1565],[1506,3918,3919,3922],{"style":3763},[1506,3920],{"className":3921,"style":3767},[1573],[1506,3923,3040],{"className":3924},[1527,1528,1581],[1506,3926,1660],{"className":3927},[1659],[1506,3929,3931],{"className":3930},[1561],[1506,3932,3934],{"className":3933,"style":3780},[1565],[1506,3935],{},[1506,3937,1660],{"className":3938},[1659],[1506,3940,3942],{"className":3941},[1561],[1506,3943,3945],{"className":3944,"style":3792},[1565],[1506,3946],{},[1506,3948,1660],{"className":3949},[1659],[1506,3951,3953],{"className":3952},[1561],[1506,3954,3956],{"className":3955,"style":3804},[1565],[1506,3957],{}," = Lead Time du composant i",[57,3960,3961,4014],{},[1506,3962,3964],{"className":3963},[1509],[1506,3965,3967],{"className":3966,"ariaHidden":1514},[1513],[1506,3968,3970,3974],{"className":3969},[1518],[1506,3971],{"className":3972,"style":3973},[1522],"height:0.5806em;vertical-align:-0.15em;",[1506,3975,3977,3980],{"className":3976},[1527],[1506,3978,2078],{"className":3979},[1527,1528],[1506,3981,3983],{"className":3982},[1553],[1506,3984,3986,4006],{"className":3985},[1557,1625],[1506,3987,3989,4003],{"className":3988},[1561],[1506,3990,3992],{"className":3991,"style":1632},[1565],[1506,3993,3994,3997],{"style":1748},[1506,3995],{"className":3996,"style":1574},[1573],[1506,3998,4000],{"className":3999},[1578,1579,1580,1581],[1506,4001,2457],{"className":4002},[1527,1528,1581],[1506,4004,1660],{"className":4005},[1659],[1506,4007,4009],{"className":4008},[1561],[1506,4010,4012],{"className":4011,"style":2030},[1565],[1506,4013],{}," = Nombre de composants du produit",[19,4016,4017],{},[60,4018,4019],{},"Niveau Domaine",[1506,4021,4023],{"className":4022},[1597],[1506,4024,4026],{"className":4025},[1509],[1506,4027,4029,4135],{"className":4028,"ariaHidden":1514},[1513],[1506,4030,4032,4035,4038,4126,4129,4132],{"className":4031},[1518],[1506,4033],{"className":4034,"style":2731},[1522],[1506,4036,2735],{"className":4037},[1527],[1506,4039,4041,4044],{"className":4040},[1527],[1506,4042,1732],{"className":4043},[1527,1528],[1506,4045,4047],{"className":4046},[1553],[1506,4048,4050,4118],{"className":4049},[1557,1625],[1506,4051,4053,4115],{"className":4052},[1561],[1506,4054,4056],{"className":4055,"style":1745},[1565],[1506,4057,4058,4061],{"style":1748},[1506,4059],{"className":4060,"style":1574},[1573],[1506,4062,4064],{"className":4063},[1578,1579,1580,1581],[1506,4065,4067,4070,4073],{"className":4066},[1527,1581],[1506,4068,2768],{"className":4069},[1527,1528,1581],[1506,4071,1618],{"className":4072,"style":1617},[1527,1528,1581],[1506,4074,4076,4079],{"className":4075},[1527,1581],[1506,4077,2457],{"className":4078},[1527,1528,1581],[1506,4080,4082],{"className":4081},[1553],[1506,4083,4085,4106],{"className":4084},[1557,1625],[1506,4086,4088,4103],{"className":4087},[1561],[1506,4089,4091],{"className":4090,"style":3760},[1565],[1506,4092,4094,4097],{"style":4093},"top:-2.3488em;margin-left:0em;margin-right:0.0714em;",[1506,4095],{"className":4096,"style":2797},[1573],[1506,4098,4100],{"className":4099},[1578,2801,2802,1581],[1506,4101,1761],{"className":4102},[1527,1528,1581],[1506,4104,1660],{"className":4105},[1659],[1506,4107,4109],{"className":4108},[1561],[1506,4110,4113],{"className":4111,"style":4112},[1565],"height:0.1512em;",[1506,4114],{},[1506,4116,1660],{"className":4117},[1659],[1506,4119,4121],{"className":4120},[1561],[1506,4122,4124],{"className":4123,"style":1667},[1565],[1506,4125],{},[1506,4127],{"className":4128,"style":1674},[1673],[1506,4130,1679],{"className":4131},[1678],[1506,4133],{"className":4134,"style":1674},[1673],[1506,4136,4138,4141,4240,4243,4246,4249],{"className":4137},[1518],[1506,4139],{"className":4140,"style":1689},[1522],[1506,4142,4144,4147,4237],{"className":4143},[1527],[1506,4145],{"className":4146},[1696,1697],[1506,4148,4150],{"className":4149},[1701],[1506,4151,4153,4229],{"className":4152},[1557,1625],[1506,4154,4156,4226],{"className":4155},[1561],[1506,4157,4159,4207,4215],{"className":4158,"style":1711},[1565],[1506,4160,4161,4164],{"style":1714},[1506,4162],{"className":4163,"style":1718},[1573],[1506,4165,4167],{"className":4166},[1527],[1506,4168,4170,4173],{"className":4169},[1527],[1506,4171,2078],{"className":4172},[1527,1528],[1506,4174,4176],{"className":4175},[1553],[1506,4177,4179,4199],{"className":4178},[1557,1625],[1506,4180,4182,4196],{"className":4181},[1561],[1506,4183,4185],{"className":4184,"style":1632},[1565],[1506,4186,4187,4190],{"style":1748},[1506,4188],{"className":4189,"style":1574},[1573],[1506,4191,4193],{"className":4192},[1578,1579,1580,1581],[1506,4194,19],{"className":4195},[1527,1528,1581],[1506,4197,1660],{"className":4198},[1659],[1506,4200,4202],{"className":4201},[1561],[1506,4203,4205],{"className":4204,"style":1667},[1565],[1506,4206],{},[1506,4208,4209,4212],{"style":1853},[1506,4210],{"className":4211,"style":1718},[1573],[1506,4213],{"className":4214,"style":1861},[1860],[1506,4216,4217,4220],{"style":1864},[1506,4218],{"className":4219,"style":1718},[1573],[1506,4221,4223],{"className":4222},[1527],[1506,4224,1592],{"className":4225},[1527],[1506,4227,1660],{"className":4228},[1659],[1506,4230,4232],{"className":4231},[1561],[1506,4233,4235],{"className":4234,"style":1883},[1565],[1506,4236],{},[1506,4238],{"className":4239},[1850,1697],[1506,4241],{"className":4242,"style":2116},[1673],[1506,4244,2169],{"className":4245,"style":2520},[2120,2167,2168],[1506,4247],{"className":4248,"style":2116},[1673],[1506,4250,4252,4258,4261,4384],{"className":4251},[2848],[1506,4253,4255],{"className":4254,"style":2853},[1696,2852],[1506,4256,1725],{"className":4257},[2857,2802],[1506,4259,2735],{"className":4260},[1527],[1506,4262,4264,4267],{"className":4263},[1527],[1506,4265,1732],{"className":4266},[1527,1528],[1506,4268,4270],{"className":4269},[1553],[1506,4271,4273,4376],{"className":4272},[1557,1625],[1506,4274,4276,4373],{"className":4275},[1561],[1506,4277,4279],{"className":4278,"style":1745},[1565],[1506,4280,4281,4284],{"style":1748},[1506,4282],{"className":4283,"style":1574},[1573],[1506,4285,4287],{"className":4286},[1578,1579,1580,1581],[1506,4288,4290,4293,4296],{"className":4289},[1527,1581],[1506,4291,2768],{"className":4292},[1527,1528,1581],[1506,4294,1618],{"className":4295,"style":1617},[1527,1528,1581],[1506,4297,4299,4302],{"className":4298},[1527,1581],[1506,4300,2457],{"className":4301},[1527,1528,1581],[1506,4303,4305],{"className":4304},[1553],[1506,4306,4308,4365],{"className":4307},[1557,1625],[1506,4309,4311,4362],{"className":4310},[1561],[1506,4312,4314],{"className":4313,"style":2790},[1565],[1506,4315,4316,4319],{"style":2793},[1506,4317],{"className":4318,"style":2797},[1573],[1506,4320,4322],{"className":4321},[1578,2801,2802,1581],[1506,4323,4325],{"className":4324},[1527,1581],[1506,4326,4328,4331],{"className":4327},[1527,1581],[1506,4329,19],{"className":4330},[1527,1528,1581],[1506,4332,4334],{"className":4333},[1553],[1506,4335,4337,4354],{"className":4336},[1557,1625],[1506,4338,4340,4351],{"className":4339},[1561],[1506,4341,4343],{"className":4342,"style":3760},[1565],[1506,4344,4345,4348],{"style":3763},[1506,4346],{"className":4347,"style":3767},[1573],[1506,4349,3040],{"className":4350},[1527,1528,1581],[1506,4352,1660],{"className":4353},[1659],[1506,4355,4357],{"className":4356},[1561],[1506,4358,4360],{"className":4359,"style":3780},[1565],[1506,4361],{},[1506,4363,1660],{"className":4364},[1659],[1506,4366,4368],{"className":4367},[1561],[1506,4369,4371],{"className":4370,"style":3792},[1565],[1506,4372],{},[1506,4374,1660],{"className":4375},[1659],[1506,4377,4379],{"className":4378},[1561],[1506,4380,4382],{"className":4381,"style":3804},[1565],[1506,4383],{},[1506,4385,4387],{"className":4386,"style":2853},[1850,2852],[1506,4388,413],{"className":4389},[2857,2802],[19,4391,3168],{},[122,4393,4394,4535],{},[57,4395,4396,4534],{},[1506,4397,4399],{"className":4398},[1509],[1506,4400,4402],{"className":4401,"ariaHidden":1514},[1513],[1506,4403,4405,4408,4411],{"className":4404},[1518],[1506,4406],{"className":4407,"style":3831},[1522],[1506,4409,2735],{"className":4410},[1527],[1506,4412,4414,4417],{"className":4413},[1527],[1506,4415,1732],{"className":4416},[1527,1528],[1506,4418,4420],{"className":4419},[1553],[1506,4421,4423,4526],{"className":4422},[1557,1625],[1506,4424,4426,4523],{"className":4425},[1561],[1506,4427,4429],{"className":4428,"style":1745},[1565],[1506,4430,4431,4434],{"style":1748},[1506,4432],{"className":4433,"style":1574},[1573],[1506,4435,4437],{"className":4436},[1578,1579,1580,1581],[1506,4438,4440,4443,4446],{"className":4439},[1527,1581],[1506,4441,2768],{"className":4442},[1527,1528,1581],[1506,4444,1618],{"className":4445,"style":1617},[1527,1528,1581],[1506,4447,4449,4452],{"className":4448},[1527,1581],[1506,4450,2457],{"className":4451},[1527,1528,1581],[1506,4453,4455],{"className":4454},[1553],[1506,4456,4458,4515],{"className":4457},[1557,1625],[1506,4459,4461,4512],{"className":4460},[1561],[1506,4462,4464],{"className":4463,"style":2790},[1565],[1506,4465,4466,4469],{"style":2793},[1506,4467],{"className":4468,"style":2797},[1573],[1506,4470,4472],{"className":4471},[1578,2801,2802,1581],[1506,4473,4475],{"className":4474},[1527,1581],[1506,4476,4478,4481],{"className":4477},[1527,1581],[1506,4479,19],{"className":4480},[1527,1528,1581],[1506,4482,4484],{"className":4483},[1553],[1506,4485,4487,4504],{"className":4486},[1557,1625],[1506,4488,4490,4501],{"className":4489},[1561],[1506,4491,4493],{"className":4492,"style":3760},[1565],[1506,4494,4495,4498],{"style":3763},[1506,4496],{"className":4497,"style":3767},[1573],[1506,4499,3040],{"className":4500},[1527,1528,1581],[1506,4502,1660],{"className":4503},[1659],[1506,4505,4507],{"className":4506},[1561],[1506,4508,4510],{"className":4509,"style":3780},[1565],[1506,4511],{},[1506,4513,1660],{"className":4514},[1659],[1506,4516,4518],{"className":4517},[1561],[1506,4519,4521],{"className":4520,"style":3792},[1565],[1506,4522],{},[1506,4524,1660],{"className":4525},[1659],[1506,4527,4529],{"className":4528},[1561],[1506,4530,4532],{"className":4531,"style":3804},[1565],[1506,4533],{}," = Lead Time du produit i",[57,4536,4537,4593],{},[1506,4538,4540],{"className":4539},[1509],[1506,4541,4543],{"className":4542,"ariaHidden":1514},[1513],[1506,4544,4546,4550],{"className":4545},[1518],[1506,4547],{"className":4548,"style":4549},[1522],"height:0.7167em;vertical-align:-0.2861em;",[1506,4551,4553],{"className":4552},[1527],[1506,4554,4556,4559],{"className":4555},[1527],[1506,4557,2078],{"className":4558},[1527,1528],[1506,4560,4562],{"className":4561},[1553],[1506,4563,4565,4585],{"className":4564},[1557,1625],[1506,4566,4568,4582],{"className":4567},[1561],[1506,4569,4571],{"className":4570,"style":1632},[1565],[1506,4572,4573,4576],{"style":1748},[1506,4574],{"className":4575,"style":1574},[1573],[1506,4577,4579],{"className":4578},[1578,1579,1580,1581],[1506,4580,19],{"className":4581},[1527,1528,1581],[1506,4583,1660],{"className":4584},[1659],[1506,4586,4588],{"className":4587},[1561],[1506,4589,4591],{"className":4590,"style":1667},[1565],[1506,4592],{}," = Nombre de produits dans le domaine",[19,4595,4596],{},[60,4597,4598],{},"Niveau Plateforme",[1506,4600,4602],{"className":4601},[1597],[1506,4603,4605],{"className":4604},[1509],[1506,4606,4608,4715],{"className":4607,"ariaHidden":1514},[1513],[1506,4609,4611,4614,4617,4706,4709,4712],{"className":4610},[1518],[1506,4612],{"className":4613,"style":2731},[1522],[1506,4615,2735],{"className":4616},[1527],[1506,4618,4620,4623],{"className":4619},[1527],[1506,4621,1732],{"className":4622},[1527,1528],[1506,4624,4626],{"className":4625},[1553],[1506,4627,4629,4698],{"className":4628},[1557,1625],[1506,4630,4632,4695],{"className":4631},[1561],[1506,4633,4635],{"className":4634,"style":1745},[1565],[1506,4636,4637,4640],{"style":1748},[1506,4638],{"className":4639,"style":1574},[1573],[1506,4641,4643],{"className":4642},[1578,1579,1580,1581],[1506,4644,4646,4649,4652],{"className":4645},[1527,1581],[1506,4647,2768],{"className":4648},[1527,1528,1581],[1506,4650,1618],{"className":4651,"style":1617},[1527,1528,1581],[1506,4653,4655,4658],{"className":4654},[1527,1581],[1506,4656,2457],{"className":4657},[1527,1528,1581],[1506,4659,4661],{"className":4660},[1553],[1506,4662,4664,4686],{"className":4663},[1557,1625],[1506,4665,4667,4683],{"className":4666},[1561],[1506,4668,4670],{"className":4669,"style":3760},[1565],[1506,4671,4673,4676],{"style":4672},"top:-2.3567em;margin-left:0em;margin-right:0.0714em;",[1506,4674],{"className":4675,"style":2797},[1573],[1506,4677,4679],{"className":4678},[1578,2801,2802,1581],[1506,4680,4682],{"className":4681,"style":2398},[1527,1528,1581],"P",[1506,4684,1660],{"className":4685},[1659],[1506,4687,4689],{"className":4688},[1561],[1506,4690,4693],{"className":4691,"style":4692},[1565],"height:0.1433em;",[1506,4694],{},[1506,4696,1660],{"className":4697},[1659],[1506,4699,4701],{"className":4700},[1561],[1506,4702,4704],{"className":4703,"style":1667},[1565],[1506,4705],{},[1506,4707],{"className":4708,"style":1674},[1673],[1506,4710,1679],{"className":4711},[1678],[1506,4713],{"className":4714,"style":1674},[1673],[1506,4716,4718,4721,4820,4823,4826,4829],{"className":4717},[1518],[1506,4719],{"className":4720,"style":3556},[1522],[1506,4722,4724,4727,4817],{"className":4723},[1527],[1506,4725],{"className":4726},[1696,1697],[1506,4728,4730],{"className":4729},[1701],[1506,4731,4733,4809],{"className":4732},[1557,1625],[1506,4734,4736,4806],{"className":4735},[1561],[1506,4737,4739,4787,4795],{"className":4738,"style":1711},[1565],[1506,4740,4741,4744],{"style":1714},[1506,4742],{"className":4743,"style":1718},[1573],[1506,4745,4747],{"className":4746},[1527],[1506,4748,4750,4753],{"className":4749},[1527],[1506,4751,2078],{"className":4752},[1527,1528],[1506,4754,4756],{"className":4755},[1553],[1506,4757,4759,4779],{"className":4758},[1557,1625],[1506,4760,4762,4776],{"className":4761},[1561],[1506,4763,4765],{"className":4764,"style":1745},[1565],[1506,4766,4767,4770],{"style":1748},[1506,4768],{"className":4769,"style":1574},[1573],[1506,4771,4773],{"className":4772},[1578,1579,1580,1581],[1506,4774,1761],{"className":4775},[1527,1528,1581],[1506,4777,1660],{"className":4778},[1659],[1506,4780,4782],{"className":4781},[1561],[1506,4783,4785],{"className":4784,"style":2030},[1565],[1506,4786],{},[1506,4788,4789,4792],{"style":1853},[1506,4790],{"className":4791,"style":1718},[1573],[1506,4793],{"className":4794,"style":1861},[1860],[1506,4796,4797,4800],{"style":1864},[1506,4798],{"className":4799,"style":1718},[1573],[1506,4801,4803],{"className":4802},[1527],[1506,4804,1592],{"className":4805},[1527],[1506,4807,1660],{"className":4808},[1659],[1506,4810,4812],{"className":4811},[1561],[1506,4813,4815],{"className":4814,"style":3651},[1565],[1506,4816],{},[1506,4818],{"className":4819},[1850,1697],[1506,4821],{"className":4822,"style":2116},[1673],[1506,4824,2169],{"className":4825,"style":2520},[2120,2167,2168],[1506,4827],{"className":4828,"style":2116},[1673],[1506,4830,4832,4838,4841,4966],{"className":4831},[2848],[1506,4833,4835],{"className":4834,"style":2853},[1696,2852],[1506,4836,1725],{"className":4837},[2857,2802],[1506,4839,2735],{"className":4840},[1527],[1506,4842,4844,4847],{"className":4843},[1527],[1506,4845,1732],{"className":4846},[1527,1528],[1506,4848,4850],{"className":4849},[1553],[1506,4851,4853,4957],{"className":4852},[1557,1625],[1506,4854,4856,4954],{"className":4855},[1561],[1506,4857,4859],{"className":4858,"style":1745},[1565],[1506,4860,4861,4864],{"style":1748},[1506,4862],{"className":4863,"style":1574},[1573],[1506,4865,4867],{"className":4866},[1578,1579,1580,1581],[1506,4868,4870,4873,4876],{"className":4869},[1527,1581],[1506,4871,2768],{"className":4872},[1527,1528,1581],[1506,4874,1618],{"className":4875,"style":1617},[1527,1528,1581],[1506,4877,4879,4882],{"className":4878},[1527,1581],[1506,4880,2457],{"className":4881},[1527,1528,1581],[1506,4883,4885],{"className":4884},[1553],[1506,4886,4888,4945],{"className":4887},[1557,1625],[1506,4889,4891,4942],{"className":4890},[1561],[1506,4892,4894],{"className":4893,"style":3760},[1565],[1506,4895,4896,4899],{"style":4093},[1506,4897],{"className":4898,"style":2797},[1573],[1506,4900,4902],{"className":4901},[1578,2801,2802,1581],[1506,4903,4905],{"className":4904},[1527,1581],[1506,4906,4908,4911],{"className":4907},[1527,1581],[1506,4909,1761],{"className":4910},[1527,1528,1581],[1506,4912,4914],{"className":4913},[1553],[1506,4915,4917,4934],{"className":4916},[1557,1625],[1506,4918,4920,4931],{"className":4919},[1561],[1506,4921,4923],{"className":4922,"style":3760},[1565],[1506,4924,4925,4928],{"style":3763},[1506,4926],{"className":4927,"style":3767},[1573],[1506,4929,3040],{"className":4930},[1527,1528,1581],[1506,4932,1660],{"className":4933},[1659],[1506,4935,4937],{"className":4936},[1561],[1506,4938,4940],{"className":4939,"style":3780},[1565],[1506,4941],{},[1506,4943,1660],{"className":4944},[1659],[1506,4946,4948],{"className":4947},[1561],[1506,4949,4952],{"className":4950,"style":4951},[1565],"height:0.376em;",[1506,4953],{},[1506,4955,1660],{"className":4956},[1659],[1506,4958,4960],{"className":4959},[1561],[1506,4961,4964],{"className":4962,"style":4963},[1565],"height:0.4132em;",[1506,4965],{},[1506,4967,4969],{"className":4968,"style":2853},[1850,2852],[1506,4970,413],{"className":4971},[2857,2802],[19,4973,3168],{},[122,4975,4976,5118],{},[57,4977,4978,5117],{},[1506,4979,4981],{"className":4980},[1509],[1506,4982,4984],{"className":4983,"ariaHidden":1514},[1513],[1506,4985,4987,4991,4994],{"className":4986},[1518],[1506,4988],{"className":4989,"style":4990},[1522],"height:1.0965em;vertical-align:-0.4132em;",[1506,4992,2735],{"className":4993},[1527],[1506,4995,4997,5000],{"className":4996},[1527],[1506,4998,1732],{"className":4999},[1527,1528],[1506,5001,5003],{"className":5002},[1553],[1506,5004,5006,5109],{"className":5005},[1557,1625],[1506,5007,5009,5106],{"className":5008},[1561],[1506,5010,5012],{"className":5011,"style":1745},[1565],[1506,5013,5014,5017],{"style":1748},[1506,5015],{"className":5016,"style":1574},[1573],[1506,5018,5020],{"className":5019},[1578,1579,1580,1581],[1506,5021,5023,5026,5029],{"className":5022},[1527,1581],[1506,5024,2768],{"className":5025},[1527,1528,1581],[1506,5027,1618],{"className":5028,"style":1617},[1527,1528,1581],[1506,5030,5032,5035],{"className":5031},[1527,1581],[1506,5033,2457],{"className":5034},[1527,1528,1581],[1506,5036,5038],{"className":5037},[1553],[1506,5039,5041,5098],{"className":5040},[1557,1625],[1506,5042,5044,5095],{"className":5043},[1561],[1506,5045,5047],{"className":5046,"style":3760},[1565],[1506,5048,5049,5052],{"style":4093},[1506,5050],{"className":5051,"style":2797},[1573],[1506,5053,5055],{"className":5054},[1578,2801,2802,1581],[1506,5056,5058],{"className":5057},[1527,1581],[1506,5059,5061,5064],{"className":5060},[1527,1581],[1506,5062,1761],{"className":5063},[1527,1528,1581],[1506,5065,5067],{"className":5066},[1553],[1506,5068,5070,5087],{"className":5069},[1557,1625],[1506,5071,5073,5084],{"className":5072},[1561],[1506,5074,5076],{"className":5075,"style":3760},[1565],[1506,5077,5078,5081],{"style":3763},[1506,5079],{"className":5080,"style":3767},[1573],[1506,5082,3040],{"className":5083},[1527,1528,1581],[1506,5085,1660],{"className":5086},[1659],[1506,5088,5090],{"className":5089},[1561],[1506,5091,5093],{"className":5092,"style":3780},[1565],[1506,5094],{},[1506,5096,1660],{"className":5097},[1659],[1506,5099,5101],{"className":5100},[1561],[1506,5102,5104],{"className":5103,"style":4951},[1565],[1506,5105],{},[1506,5107,1660],{"className":5108},[1659],[1506,5110,5112],{"className":5111},[1561],[1506,5113,5115],{"className":5114,"style":4963},[1565],[1506,5116],{}," = Lead Time du domaine i",[57,5119,5120,5172],{},[1506,5121,5123],{"className":5122},[1509],[1506,5124,5126],{"className":5125,"ariaHidden":1514},[1513],[1506,5127,5129,5132],{"className":5128},[1518],[1506,5130],{"className":5131,"style":3973},[1522],[1506,5133,5135,5138],{"className":5134},[1527],[1506,5136,2078],{"className":5137},[1527,1528],[1506,5139,5141],{"className":5140},[1553],[1506,5142,5144,5164],{"className":5143},[1557,1625],[1506,5145,5147,5161],{"className":5146},[1561],[1506,5148,5150],{"className":5149,"style":1745},[1565],[1506,5151,5152,5155],{"style":1748},[1506,5153],{"className":5154,"style":1574},[1573],[1506,5156,5158],{"className":5157},[1578,1579,1580,1581],[1506,5159,1761],{"className":5160},[1527,1528,1581],[1506,5162,1660],{"className":5163},[1659],[1506,5165,5167],{"className":5166},[1561],[1506,5168,5170],{"className":5169,"style":2030},[1565],[1506,5171],{}," = Nombre de domaines dans la plateforme",[617,5174,598],{"id":5175},"deployment-frequency",[19,5177,5178],{},[60,5179,2715],{},[1506,5181,5183],{"className":5182},[1597],[1506,5184,5186],{"className":5185},[1509],[1506,5187,5189,5253],{"className":5188,"ariaHidden":1514},[1513],[1506,5190,5192,5195,5244,5247,5250],{"className":5191},[1518],[1506,5193],{"className":5194,"style":1610},[1522],[1506,5196,5198,5201],{"className":5197},[1527],[1506,5199,1618],{"className":5200,"style":1617},[1527,1528],[1506,5202,5204],{"className":5203},[1553],[1506,5205,5207,5236],{"className":5206},[1557,1625],[1506,5208,5210,5233],{"className":5209},[1561],[1506,5211,5213],{"className":5212,"style":1632},[1565],[1506,5214,5215,5218],{"style":1635},[1506,5216],{"className":5217,"style":1574},[1573],[1506,5219,5221],{"className":5220},[1578,1579,1580,1581],[1506,5222,5224,5227,5230],{"className":5223},[1527,1581],[1506,5225,1648],{"className":5226},[1527,1528,1581],[1506,5228,1652],{"className":5229},[1527,1528,1581],[1506,5231,19],{"className":5232},[1527,1528,1581],[1506,5234,1660],{"className":5235},[1659],[1506,5237,5239],{"className":5238},[1561],[1506,5240,5242],{"className":5241,"style":1667},[1565],[1506,5243],{},[1506,5245],{"className":5246,"style":1674},[1673],[1506,5248,1679],{"className":5249},[1678],[1506,5251],{"className":5252,"style":1674},[1673],[1506,5254,5256,5259],{"className":5255},[1518],[1506,5257],{"className":5258,"style":1689},[1522],[1506,5260,5262,5265,5428],{"className":5261},[1527],[1506,5263],{"className":5264},[1696,1697],[1506,5266,5268],{"className":5267},[1701],[1506,5269,5271,5420],{"className":5270},[1557,1625],[1506,5272,5274,5417],{"className":5273},[1561],[1506,5275,5277,5398,5406],{"className":5276,"style":1711},[1565],[1506,5278,5279,5282],{"style":1714},[1506,5280],{"className":5281,"style":1718},[1573],[1506,5283,5285,5337,5340,5343,5346],{"className":5284},[1527],[1506,5286,5288,5291],{"className":5287},[1527],[1506,5289,1732],{"className":5290},[1527,1528],[1506,5292,5294],{"className":5293},[1553],[1506,5295,5297,5329],{"className":5296},[1557,1625],[1506,5298,5300,5326],{"className":5299},[1561],[1506,5301,5303],{"className":5302,"style":1745},[1565],[1506,5304,5305,5308],{"style":1748},[1506,5306],{"className":5307,"style":1574},[1573],[1506,5309,5311],{"className":5310},[1578,1579,1580,1581],[1506,5312,5314,5317,5320,5323],{"className":5313},[1527,1581],[1506,5315,1761],{"className":5316},[1527,1528,1581],[1506,5318,1765],{"className":5319},[1527,1528,1581],[1506,5321,19],{"className":5322},[1527,1528,1581],[1506,5324,1772],{"className":5325},[1527,1581],[1506,5327,1660],{"className":5328},[1659],[1506,5330,5332],{"className":5331},[1561],[1506,5333,5335],{"className":5334,"style":1667},[1565],[1506,5336],{},[1506,5338],{"className":5339,"style":1787},[1673],[1506,5341,1588],{"className":5342},[1791],[1506,5344],{"className":5345,"style":1787},[1673],[1506,5347,5349,5352],{"className":5348},[1527],[1506,5350,1732],{"className":5351},[1527,1528],[1506,5353,5355],{"className":5354},[1553],[1506,5356,5358,5390],{"className":5357},[1557,1625],[1506,5359,5361,5387],{"className":5360},[1561],[1506,5362,5364],{"className":5363,"style":1745},[1565],[1506,5365,5366,5369],{"style":1748},[1506,5367],{"className":5368,"style":1574},[1573],[1506,5370,5372],{"className":5371},[1578,1579,1580,1581],[1506,5373,5375,5378,5381,5384],{"className":5374},[1527,1581],[1506,5376,1761],{"className":5377},[1527,1528,1581],[1506,5379,1765],{"className":5380},[1527,1528,1581],[1506,5382,19],{"className":5383},[1527,1528,1581],[1506,5385,1592],{"className":5386},[1527,1581],[1506,5388,1660],{"className":5389},[1659],[1506,5391,5393],{"className":5392},[1561],[1506,5394,5396],{"className":5395,"style":1667},[1565],[1506,5397],{},[1506,5399,5400,5403],{"style":1853},[1506,5401],{"className":5402,"style":1718},[1573],[1506,5404],{"className":5405,"style":1861},[1860],[1506,5407,5408,5411],{"style":1864},[1506,5409],{"className":5410,"style":1718},[1573],[1506,5412,5414],{"className":5413},[1527],[1506,5415,1592],{"className":5416},[1527],[1506,5418,1660],{"className":5419},[1659],[1506,5421,5423],{"className":5422},[1561],[1506,5424,5426],{"className":5425,"style":1883},[1565],[1506,5427],{},[1506,5429],{"className":5430},[1850,1697],[19,5432,3168],{},[122,5434,5435,5503],{},[57,5436,5437,5502],{},[1506,5438,5440],{"className":5439},[1509],[1506,5441,5443],{"className":5442,"ariaHidden":1514},[1513],[1506,5444,5446,5450],{"className":5445},[1518],[1506,5447],{"className":5448,"style":5449},[1522],"height:0.9012em;vertical-align:-0.2861em;",[1506,5451,5453,5456],{"className":5452},[1527],[1506,5454,1732],{"className":5455},[1527,1528],[1506,5457,5459],{"className":5458},[1553],[1506,5460,5462,5494],{"className":5461},[1557,1625],[1506,5463,5465,5491],{"className":5464},[1561],[1506,5466,5468],{"className":5467,"style":1745},[1565],[1506,5469,5470,5473],{"style":1748},[1506,5471],{"className":5472,"style":1574},[1573],[1506,5474,5476],{"className":5475},[1578,1579,1580,1581],[1506,5477,5479,5482,5485,5488],{"className":5478},[1527,1581],[1506,5480,1761],{"className":5481},[1527,1528,1581],[1506,5483,1765],{"className":5484},[1527,1528,1581],[1506,5486,19],{"className":5487},[1527,1528,1581],[1506,5489,1772],{"className":5490},[1527,1581],[1506,5492,1660],{"className":5493},[1659],[1506,5495,5497],{"className":5496},[1561],[1506,5498,5500],{"className":5499,"style":1667},[1565],[1506,5501],{}," = Date du déploiement actuel",[57,5504,5505,5569],{},[1506,5506,5508],{"className":5507},[1509],[1506,5509,5511],{"className":5510,"ariaHidden":1514},[1513],[1506,5512,5514,5517],{"className":5513},[1518],[1506,5515],{"className":5516,"style":5449},[1522],[1506,5518,5520,5523],{"className":5519},[1527],[1506,5521,1732],{"className":5522},[1527,1528],[1506,5524,5526],{"className":5525},[1553],[1506,5527,5529,5561],{"className":5528},[1557,1625],[1506,5530,5532,5558],{"className":5531},[1561],[1506,5533,5535],{"className":5534,"style":1745},[1565],[1506,5536,5537,5540],{"style":1748},[1506,5538],{"className":5539,"style":1574},[1573],[1506,5541,5543],{"className":5542},[1578,1579,1580,1581],[1506,5544,5546,5549,5552,5555],{"className":5545},[1527,1581],[1506,5547,1761],{"className":5548},[1527,1528,1581],[1506,5550,1765],{"className":5551},[1527,1528,1581],[1506,5553,19],{"className":5554},[1527,1528,1581],[1506,5556,1592],{"className":5557},[1527,1581],[1506,5559,1660],{"className":5560},[1659],[1506,5562,5564],{"className":5563},[1561],[1506,5565,5567],{"className":5566,"style":1667},[1565],[1506,5568],{}," = Date du déploiement précédent",[19,5571,5572],{},[60,5573,3433],{},[1506,5575,5577],{"className":5576},[1597],[1506,5578,5580],{"className":5579},[1509],[1506,5581,5583,5647],{"className":5582,"ariaHidden":1514},[1513],[1506,5584,5586,5589,5638,5641,5644],{"className":5585},[1518],[1506,5587],{"className":5588,"style":1610},[1522],[1506,5590,5592,5595],{"className":5591},[1527],[1506,5593,1618],{"className":5594,"style":1617},[1527,1528],[1506,5596,5598],{"className":5597},[1553],[1506,5599,5601,5630],{"className":5600},[1557,1625],[1506,5602,5604,5627],{"className":5603},[1561],[1506,5605,5607],{"className":5606,"style":1745},[1565],[1506,5608,5609,5612],{"style":1635},[1506,5610],{"className":5611,"style":1574},[1573],[1506,5613,5615],{"className":5614},[1578,1579,1580,1581],[1506,5616,5618,5621,5624],{"className":5617},[1527,1581],[1506,5619,19],{"className":5620},[1527,1528,1581],[1506,5622,2447],{"className":5623},[1527,1528,1581],[1506,5625,1761],{"className":5626},[1527,1528,1581],[1506,5628,1660],{"className":5629},[1659],[1506,5631,5633],{"className":5632},[1561],[1506,5634,5636],{"className":5635,"style":1667},[1565],[1506,5637],{},[1506,5639],{"className":5640,"style":1674},[1673],[1506,5642,1679],{"className":5643},[1678],[1506,5645],{"className":5646,"style":1674},[1673],[1506,5648,5650,5654,5716,5719,5722,5725],{"className":5649},[1518],[1506,5651],{"className":5652,"style":5653},[1522],"height:2.0074em;vertical-align:-0.686em;",[1506,5655,5657,5660,5713],{"className":5656},[1527],[1506,5658],{"className":5659},[1696,1697],[1506,5661,5663],{"className":5662},[1701],[1506,5664,5666,5705],{"className":5665},[1557,1625],[1506,5667,5669,5702],{"className":5668},[1561],[1506,5670,5672,5683,5691],{"className":5671,"style":1711},[1565],[1506,5673,5674,5677],{"style":1714},[1506,5675],{"className":5676,"style":1718},[1573],[1506,5678,5680],{"className":5679},[1527],[1506,5681,2078],{"className":5682},[1527,1528],[1506,5684,5685,5688],{"style":1853},[1506,5686],{"className":5687,"style":1718},[1573],[1506,5689],{"className":5690,"style":1861},[1860],[1506,5692,5693,5696],{"style":1864},[1506,5694],{"className":5695,"style":1718},[1573],[1506,5697,5699],{"className":5698},[1527],[1506,5700,1592],{"className":5701},[1527],[1506,5703,1660],{"className":5704},[1659],[1506,5706,5708],{"className":5707},[1561],[1506,5709,5711],{"className":5710,"style":2107},[1565],[1506,5712],{},[1506,5714],{"className":5715},[1850,1697],[1506,5717],{"className":5718,"style":2116},[1673],[1506,5720,2169],{"className":5721,"style":2520},[2120,2167,2168],[1506,5723],{"className":5724,"style":2116},[1673],[1506,5726,5728,5731,5780],{"className":5727},[2848],[1506,5729,1725],{"className":5730,"style":2853},[1696,2852],[1506,5732,5734,5737],{"className":5733},[1527],[1506,5735,1618],{"className":5736,"style":1617},[1527,1528],[1506,5738,5740],{"className":5739},[1553],[1506,5741,5743,5772],{"className":5742},[1557,1625],[1506,5744,5746,5769],{"className":5745},[1561],[1506,5747,5749],{"className":5748,"style":1632},[1565],[1506,5750,5751,5754],{"style":1635},[1506,5752],{"className":5753,"style":1574},[1573],[1506,5755,5757],{"className":5756},[1578,1579,1580,1581],[1506,5758,5760,5763,5766],{"className":5759},[1527,1581],[1506,5761,1648],{"className":5762},[1527,1528,1581],[1506,5764,1652],{"className":5765},[1527,1528,1581],[1506,5767,19],{"className":5768},[1527,1528,1581],[1506,5770,1660],{"className":5771},[1659],[1506,5773,5775],{"className":5774},[1561],[1506,5776,5778],{"className":5777,"style":1667},[1565],[1506,5779],{},[1506,5781,413],{"className":5782,"style":2853},[1850,2852],[19,5784,3168],{},[122,5786,5787,5806],{},[57,5788,5789,5805],{},[1506,5790,5792],{"className":5791},[1509],[1506,5793,5795],{"className":5794,"ariaHidden":1514},[1513],[1506,5796,5798,5802],{"className":5797},[1518],[1506,5799],{"className":5800,"style":5801},[1522],"height:0.4306em;",[1506,5803,2078],{"className":5804},[1527,1528]," = Nombre de déploiements composants",[57,5807,5808,5869],{},[1506,5809,5811],{"className":5810},[1509],[1506,5812,5814],{"className":5813,"ariaHidden":1514},[1513],[1506,5815,5817,5820],{"className":5816},[1518],[1506,5818],{"className":5819,"style":1610},[1522],[1506,5821,5823,5826],{"className":5822},[1527],[1506,5824,1618],{"className":5825,"style":1617},[1527,1528],[1506,5827,5829],{"className":5828},[1553],[1506,5830,5832,5861],{"className":5831},[1557,1625],[1506,5833,5835,5858],{"className":5834},[1561],[1506,5836,5838],{"className":5837,"style":1632},[1565],[1506,5839,5840,5843],{"style":1635},[1506,5841],{"className":5842,"style":1574},[1573],[1506,5844,5846],{"className":5845},[1578,1579,1580,1581],[1506,5847,5849,5852,5855],{"className":5848},[1527,1581],[1506,5850,1648],{"className":5851},[1527,1528,1581],[1506,5853,1652],{"className":5854},[1527,1528,1581],[1506,5856,19],{"className":5857},[1527,1528,1581],[1506,5859,1660],{"className":5860},[1659],[1506,5862,5864],{"className":5863},[1561],[1506,5865,5867],{"className":5866,"style":1667},[1565],[1506,5868],{}," = Fréquence de déploiement du composant",[19,5871,5872],{},[60,5873,4019],{},[1506,5875,5877],{"className":5876},[1597],[1506,5878,5880],{"className":5879},[1509],[1506,5881,5883,5949],{"className":5882,"ariaHidden":1514},[1513],[1506,5884,5886,5890,5940,5943,5946],{"className":5885},[1518],[1506,5887],{"className":5888,"style":5889},[1522],"height:0.8889em;vertical-align:-0.1944em;",[1506,5891,5893,5896],{"className":5892},[1527],[1506,5894,1618],{"className":5895,"style":1617},[1527,1528],[1506,5897,5899],{"className":5898},[1553],[1506,5900,5902,5932],{"className":5901},[1557,1625],[1506,5903,5905,5929],{"className":5904},[1561],[1506,5906,5908],{"className":5907,"style":1745},[1565],[1506,5909,5910,5913],{"style":1635},[1506,5911],{"className":5912,"style":1574},[1573],[1506,5914,5916],{"className":5915},[1578,1579,1580,1581],[1506,5917,5919,5922,5925],{"className":5918},[1527,1581],[1506,5920,1761],{"className":5921},[1527,1528,1581],[1506,5923,1534],{"className":5924},[1527,1528,1581],[1506,5926,5928],{"className":5927},[1527,1528,1581],"main",[1506,5930,1660],{"className":5931},[1659],[1506,5933,5935],{"className":5934},[1561],[1506,5936,5938],{"className":5937,"style":2030},[1565],[1506,5939],{},[1506,5941],{"className":5942,"style":1674},[1673],[1506,5944,1679],{"className":5945},[1678],[1506,5947],{"className":5948,"style":1674},[1673],[1506,5950,5952,5955,6017,6020,6023,6026],{"className":5951},[1518],[1506,5953],{"className":5954,"style":5653},[1522],[1506,5956,5958,5961,6014],{"className":5957},[1527],[1506,5959],{"className":5960},[1696,1697],[1506,5962,5964],{"className":5963},[1701],[1506,5965,5967,6006],{"className":5966},[1557,1625],[1506,5968,5970,6003],{"className":5969},[1561],[1506,5971,5973,5984,5992],{"className":5972,"style":1711},[1565],[1506,5974,5975,5978],{"style":1714},[1506,5976],{"className":5977,"style":1718},[1573],[1506,5979,5981],{"className":5980},[1527],[1506,5982,1652],{"className":5983},[1527,1528],[1506,5985,5986,5989],{"style":1853},[1506,5987],{"className":5988,"style":1718},[1573],[1506,5990],{"className":5991,"style":1861},[1860],[1506,5993,5994,5997],{"style":1864},[1506,5995],{"className":5996,"style":1718},[1573],[1506,5998,6000],{"className":5999},[1527],[1506,6001,1592],{"className":6002},[1527],[1506,6004,1660],{"className":6005},[1659],[1506,6007,6009],{"className":6008},[1561],[1506,6010,6012],{"className":6011,"style":2107},[1565],[1506,6013],{},[1506,6015],{"className":6016},[1850,1697],[1506,6018],{"className":6019,"style":2116},[1673],[1506,6021,2169],{"className":6022,"style":2520},[2120,2167,2168],[1506,6024],{"className":6025,"style":2116},[1673],[1506,6027,6029,6032,6081],{"className":6028},[2848],[1506,6030,1725],{"className":6031,"style":2853},[1696,2852],[1506,6033,6035,6038],{"className":6034},[1527],[1506,6036,1618],{"className":6037,"style":1617},[1527,1528],[1506,6039,6041],{"className":6040},[1553],[1506,6042,6044,6073],{"className":6043},[1557,1625],[1506,6045,6047,6070],{"className":6046},[1561],[1506,6048,6050],{"className":6049,"style":1745},[1565],[1506,6051,6052,6055],{"style":1635},[1506,6053],{"className":6054,"style":1574},[1573],[1506,6056,6058],{"className":6057},[1578,1579,1580,1581],[1506,6059,6061,6064,6067],{"className":6060},[1527,1581],[1506,6062,19],{"className":6063},[1527,1528,1581],[1506,6065,2447],{"className":6066},[1527,1528,1581],[1506,6068,1761],{"className":6069},[1527,1528,1581],[1506,6071,1660],{"className":6072},[1659],[1506,6074,6076],{"className":6075},[1561],[1506,6077,6079],{"className":6078,"style":1667},[1565],[1506,6080],{},[1506,6082,413],{"className":6083,"style":2853},[1850,2852],[19,6085,3168],{},[122,6087,6088,6106],{},[57,6089,6090,6105],{},[1506,6091,6093],{"className":6092},[1509],[1506,6094,6096],{"className":6095,"ariaHidden":1514},[1513],[1506,6097,6099,6102],{"className":6098},[1518],[1506,6100],{"className":6101,"style":5801},[1522],[1506,6103,1652],{"className":6104},[1527,1528]," = Nombre de produits",[57,6107,6108,6169],{},[1506,6109,6111],{"className":6110},[1509],[1506,6112,6114],{"className":6113,"ariaHidden":1514},[1513],[1506,6115,6117,6120],{"className":6116},[1518],[1506,6118],{"className":6119,"style":1610},[1522],[1506,6121,6123,6126],{"className":6122},[1527],[1506,6124,1618],{"className":6125,"style":1617},[1527,1528],[1506,6127,6129],{"className":6128},[1553],[1506,6130,6132,6161],{"className":6131},[1557,1625],[1506,6133,6135,6158],{"className":6134},[1561],[1506,6136,6138],{"className":6137,"style":1745},[1565],[1506,6139,6140,6143],{"style":1635},[1506,6141],{"className":6142,"style":1574},[1573],[1506,6144,6146],{"className":6145},[1578,1579,1580,1581],[1506,6147,6149,6152,6155],{"className":6148},[1527,1581],[1506,6150,19],{"className":6151},[1527,1528,1581],[1506,6153,2447],{"className":6154},[1527,1528,1581],[1506,6156,1761],{"className":6157},[1527,1528,1581],[1506,6159,1660],{"className":6160},[1659],[1506,6162,6164],{"className":6163},[1561],[1506,6165,6167],{"className":6166,"style":1667},[1565],[1506,6168],{}," = Fréquence de déploiement du produit",[19,6171,6172],{},[60,6173,4598],{},[1506,6175,6177],{"className":6176},[1597],[1506,6178,6180],{"className":6179},[1509],[1506,6181,6183,6258],{"className":6182,"ariaHidden":1514},[1513],[1506,6184,6186,6189,6249,6252,6255],{"className":6185},[1518],[1506,6187],{"className":6188,"style":1610},[1522],[1506,6190,6192,6195],{"className":6191},[1527],[1506,6193,1618],{"className":6194,"style":1617},[1527,1528],[1506,6196,6198],{"className":6197},[1553],[1506,6199,6201,6241],{"className":6200},[1557,1625],[1506,6202,6204,6238],{"className":6203},[1561],[1506,6205,6207],{"className":6206,"style":1745},[1565],[1506,6208,6209,6212],{"style":1635},[1506,6210],{"className":6211,"style":1574},[1573],[1506,6213,6215],{"className":6214},[1578,1579,1580,1581],[1506,6216,6218,6222,6225,6228,6231,6235],{"className":6217},[1527,1581],[1506,6219,6221],{"className":6220,"style":2407},[1527,1528,1581],"pl",[1506,6223,26],{"className":6224},[1527,1528,1581],[1506,6226,1732],{"className":6227},[1527,1528,1581],[1506,6229,1618],{"className":6230,"style":1617},[1527,1528,1581],[1506,6232,6234],{"className":6233,"style":1541},[1527,1528,1581],"or",[1506,6236,1652],{"className":6237},[1527,1528,1581],[1506,6239,1660],{"className":6240},[1659],[1506,6242,6244],{"className":6243},[1561],[1506,6245,6247],{"className":6246,"style":1667},[1565],[1506,6248],{},[1506,6250],{"className":6251,"style":1674},[1673],[1506,6253,1679],{"className":6254},[1678],[1506,6256],{"className":6257,"style":1674},[1673],[1506,6259,6261,6264,6326,6329,6332,6335],{"className":6260},[1518],[1506,6262],{"className":6263,"style":5653},[1522],[1506,6265,6267,6270,6323],{"className":6266},[1527],[1506,6268],{"className":6269},[1696,1697],[1506,6271,6273],{"className":6272},[1701],[1506,6274,6276,6315],{"className":6275},[1557,1625],[1506,6277,6279,6312],{"className":6278},[1561],[1506,6280,6282,6293,6301],{"className":6281,"style":1711},[1565],[1506,6283,6284,6287],{"style":1714},[1506,6285],{"className":6286,"style":1718},[1573],[1506,6288,6290],{"className":6289},[1527],[1506,6291,1534],{"className":6292},[1527,1528],[1506,6294,6295,6298],{"style":1853},[1506,6296],{"className":6297,"style":1718},[1573],[1506,6299],{"className":6300,"style":1861},[1860],[1506,6302,6303,6306],{"style":1864},[1506,6304],{"className":6305,"style":1718},[1573],[1506,6307,6309],{"className":6308},[1527],[1506,6310,1592],{"className":6311},[1527],[1506,6313,1660],{"className":6314},[1659],[1506,6316,6318],{"className":6317},[1561],[1506,6319,6321],{"className":6320,"style":2107},[1565],[1506,6322],{},[1506,6324],{"className":6325},[1850,1697],[1506,6327],{"className":6328,"style":2116},[1673],[1506,6330,2169],{"className":6331,"style":2520},[2120,2167,2168],[1506,6333],{"className":6334,"style":2116},[1673],[1506,6336,6338,6341,6390],{"className":6337},[2848],[1506,6339,1725],{"className":6340,"style":2853},[1696,2852],[1506,6342,6344,6347],{"className":6343},[1527],[1506,6345,1618],{"className":6346,"style":1617},[1527,1528],[1506,6348,6350],{"className":6349},[1553],[1506,6351,6353,6382],{"className":6352},[1557,1625],[1506,6354,6356,6379],{"className":6355},[1561],[1506,6357,6359],{"className":6358,"style":1745},[1565],[1506,6360,6361,6364],{"style":1635},[1506,6362],{"className":6363,"style":1574},[1573],[1506,6365,6367],{"className":6366},[1578,1579,1580,1581],[1506,6368,6370,6373,6376],{"className":6369},[1527,1581],[1506,6371,1761],{"className":6372},[1527,1528,1581],[1506,6374,1534],{"className":6375},[1527,1528,1581],[1506,6377,5928],{"className":6378},[1527,1528,1581],[1506,6380,1660],{"className":6381},[1659],[1506,6383,6385],{"className":6384},[1561],[1506,6386,6388],{"className":6387,"style":2030},[1565],[1506,6389],{},[1506,6391,413],{"className":6392,"style":2853},[1850,2852],[19,6394,3168],{},[122,6396,6397,6415],{},[57,6398,6399,6414],{},[1506,6400,6402],{"className":6401},[1509],[1506,6403,6405],{"className":6404,"ariaHidden":1514},[1513],[1506,6406,6408,6411],{"className":6407},[1518],[1506,6409],{"className":6410,"style":5801},[1522],[1506,6412,1534],{"className":6413},[1527,1528]," = Nombre de domaines",[57,6416,6417,6478],{},[1506,6418,6420],{"className":6419},[1509],[1506,6421,6423],{"className":6422,"ariaHidden":1514},[1513],[1506,6424,6426,6429],{"className":6425},[1518],[1506,6427],{"className":6428,"style":5889},[1522],[1506,6430,6432,6435],{"className":6431},[1527],[1506,6433,1618],{"className":6434,"style":1617},[1527,1528],[1506,6436,6438],{"className":6437},[1553],[1506,6439,6441,6470],{"className":6440},[1557,1625],[1506,6442,6444,6467],{"className":6443},[1561],[1506,6445,6447],{"className":6446,"style":1745},[1565],[1506,6448,6449,6452],{"style":1635},[1506,6450],{"className":6451,"style":1574},[1573],[1506,6453,6455],{"className":6454},[1578,1579,1580,1581],[1506,6456,6458,6461,6464],{"className":6457},[1527,1581],[1506,6459,1761],{"className":6460},[1527,1528,1581],[1506,6462,1534],{"className":6463},[1527,1528,1581],[1506,6465,5928],{"className":6466},[1527,1528,1581],[1506,6468,1660],{"className":6469},[1659],[1506,6471,6473],{"className":6472},[1561],[1506,6474,6476],{"className":6475,"style":2030},[1565],[1506,6477],{}," = Fréquence de déploiement du domaine",[617,6480,608],{"id":6481},"change-failure-rate",[19,6483,6484],{},[60,6485,2715],{},[122,6487,6488],{},[57,6489,6490],{},"Non calculé à ce niveau en raison de la difficulté à associer précisément les incidents à des composants spécifiques",[19,6492,6493],{},[60,6494,3433],{},[1506,6496,6498],{"className":6497},[1597],[1506,6499,6501],{"className":6500},[1509],[1506,6502,6504,6604],{"className":6503,"ariaHidden":1514},[1513],[1506,6505,6507,6510,6513,6516,6519,6522,6525,6528,6531,6534,6537,6595,6598,6601],{"className":6506},[1518],[1506,6508],{"className":6509,"style":1610},[1522],[1506,6511,2383],{"className":6512,"style":2382},[1527,1528],[1506,6514,2387],{"className":6515},[1527,1528],[1506,6517,2391],{"className":6518,"style":2015},[1527,1528],[1506,6520,1765],{"className":6521},[1527,1528],[1506,6523,2399],{"className":6524,"style":2398},[1527,1528],[1506,6526,2403],{"className":6527},[1527,1528],[1506,6529,2408],{"className":6530,"style":2407},[1527,1528],[1506,6532,1462],{"className":6533},[1527,1528],[1506,6535,1542],{"className":6536,"style":1541},[1527,1528],[1506,6538,6540,6543],{"className":6539},[1527],[1506,6541,1765],{"className":6542},[1527,1528],[1506,6544,6546],{"className":6545},[1553],[1506,6547,6549,6587],{"className":6548},[1557,1625],[1506,6550,6552,6584],{"className":6551},[1561],[1506,6553,6555],{"className":6554,"style":1745},[1565],[1506,6556,6557,6560],{"style":1748},[1506,6558],{"className":6559,"style":1574},[1573],[1506,6561,6563],{"className":6562},[1578,1579,1580,1581],[1506,6564,6566,6569,6572,6575,6578,6581],{"className":6565},[1527,1581],[1506,6567,19],{"className":6568},[1527,1528,1581],[1506,6570,2447],{"className":6571},[1527,1528,1581],[1506,6573,1761],{"className":6574},[1527,1528,1581],[1506,6576,1462],{"className":6577},[1527,1528,1581],[1506,6579,2457],{"className":6580},[1527,1528,1581],[1506,6582,1732],{"className":6583},[1527,1528,1581],[1506,6585,1660],{"className":6586},[1659],[1506,6588,6590],{"className":6589},[1561],[1506,6591,6593],{"className":6592,"style":1667},[1565],[1506,6594],{},[1506,6596],{"className":6597,"style":1674},[1673],[1506,6599,1679],{"className":6600},[1678],[1506,6602],{"className":6603,"style":1674},[1673],[1506,6605,6607,6610],{"className":6606},[1518],[1506,6608],{"className":6609,"style":2488},[1522],[1506,6611,6613,6616,6779],{"className":6612},[1527],[1506,6614],{"className":6615},[1696,1697],[1506,6617,6619],{"className":6618},[1701],[1506,6620,6622,6771],{"className":6621},[1557,1625],[1506,6623,6625,6768],{"className":6624},[1561],[1506,6626,6628,6697,6705],{"className":6627,"style":2507},[1565],[1506,6629,6630,6633],{"style":1714},[1506,6631],{"className":6632,"style":1718},[1573],[1506,6634,6636,6639,6642],{"className":6635},[1527],[1506,6637,2169],{"className":6638,"style":2520},[2120,2167,2519],[1506,6640],{"className":6641,"style":2116},[1673],[1506,6643,6645,6648],{"className":6644},[1527],[1506,6646,1761],{"className":6647},[1527,1528],[1506,6649,6651],{"className":6650},[1553],[1506,6652,6654,6689],{"className":6653},[1557,1625],[1506,6655,6657,6686],{"className":6656},[1561],[1506,6658,6660],{"className":6659,"style":1745},[1565],[1506,6661,6662,6665],{"style":1748},[1506,6663],{"className":6664,"style":1574},[1573],[1506,6666,6668],{"className":6667},[1578,1579,1580,1581],[1506,6669,6671,6674,6677,6680,6683],{"className":6670},[1527,1581],[1506,6672,1732],{"className":6673},[1527,1528,1581],[1506,6675,1534],{"className":6676},[1527,1528,1581],[1506,6678,1732],{"className":6679},[1527,1528,1581],[1506,6681,26],{"className":6682},[1527,1528,1581],[1506,6684,2408],{"className":6685,"style":2407},[1527,1528,1581],[1506,6687,1660],{"className":6688},[1659],[1506,6690,6692],{"className":6691},[1561],[1506,6693,6695],{"className":6694,"style":2030},[1565],[1506,6696],{},[1506,6698,6699,6702],{"style":1853},[1506,6700],{"className":6701,"style":1718},[1573],[1506,6703],{"className":6704,"style":1861},[1860],[1506,6706,6707,6710],{"style":1864},[1506,6708],{"className":6709,"style":1718},[1573],[1506,6711,6713,6716,6719],{"className":6712},[1527],[1506,6714,2169],{"className":6715,"style":2520},[2120,2167,2519],[1506,6717],{"className":6718,"style":2116},[1673],[1506,6720,6722,6725],{"className":6721},[1527],[1506,6723,1761],{"className":6724},[1527,1528],[1506,6726,6728],{"className":6727},[1553],[1506,6729,6731,6760],{"className":6730},[1557,1625],[1506,6732,6734,6757],{"className":6733},[1561],[1506,6735,6737],{"className":6736,"style":1745},[1565],[1506,6738,6739,6742],{"style":1748},[1506,6740],{"className":6741,"style":1574},[1573],[1506,6743,6745],{"className":6744},[1578,1579,1580,1581],[1506,6746,6748,6751,6754],{"className":6747},[1527,1581],[1506,6749,1618],{"className":6750,"style":1617},[1527,1528,1581],[1506,6752,2403],{"className":6753},[1527,1528,1581],[1506,6755,2408],{"className":6756,"style":2407},[1527,1528,1581],[1506,6758,1660],{"className":6759},[1659],[1506,6761,6763],{"className":6762},[1561],[1506,6764,6766],{"className":6765,"style":1667},[1565],[1506,6767],{},[1506,6769,1660],{"className":6770},[1659],[1506,6772,6774],{"className":6773},[1561],[1506,6775,6777],{"className":6776,"style":2665},[1565],[1506,6778],{},[1506,6780],{"className":6781},[1850,1697],[19,6783,3168],{},[122,6785,6786,6850],{},[57,6787,6788,6849],{},[1506,6789,6791],{"className":6790},[1509],[1506,6792,6794],{"className":6793,"ariaHidden":1514},[1513],[1506,6795,6797,6800],{"className":6796},[1518],[1506,6798],{"className":6799,"style":1610},[1522],[1506,6801,6803,6806],{"className":6802},[1527],[1506,6804,1761],{"className":6805},[1527,1528],[1506,6807,6809],{"className":6808},[1553],[1506,6810,6812,6841],{"className":6811},[1557,1625],[1506,6813,6815,6838],{"className":6814},[1561],[1506,6816,6818],{"className":6817,"style":1745},[1565],[1506,6819,6820,6823],{"style":1748},[1506,6821],{"className":6822,"style":1574},[1573],[1506,6824,6826],{"className":6825},[1578,1579,1580,1581],[1506,6827,6829,6832,6835],{"className":6828},[1527,1581],[1506,6830,1618],{"className":6831,"style":1617},[1527,1528,1581],[1506,6833,2403],{"className":6834},[1527,1528,1581],[1506,6836,2408],{"className":6837,"style":2407},[1527,1528,1581],[1506,6839,1660],{"className":6840},[1659],[1506,6842,6844],{"className":6843},[1561],[1506,6845,6847],{"className":6846,"style":1667},[1565],[1506,6848],{}," = Nombre de déploiements précédant au moins un incident",[57,6851,6852,6920],{},[1506,6853,6855],{"className":6854},[1509],[1506,6856,6858],{"className":6857,"ariaHidden":1514},[1513],[1506,6859,6861,6865],{"className":6860},[1518],[1506,6862],{"className":6863,"style":6864},[1522],"height:0.8444em;vertical-align:-0.15em;",[1506,6866,6868,6871],{"className":6867},[1527],[1506,6869,1761],{"className":6870},[1527,1528],[1506,6872,6874],{"className":6873},[1553],[1506,6875,6877,6912],{"className":6876},[1557,1625],[1506,6878,6880,6909],{"className":6879},[1561],[1506,6881,6883],{"className":6882,"style":1745},[1565],[1506,6884,6885,6888],{"style":1748},[1506,6886],{"className":6887,"style":1574},[1573],[1506,6889,6891],{"className":6890},[1578,1579,1580,1581],[1506,6892,6894,6897,6900,6903,6906],{"className":6893},[1527,1581],[1506,6895,1732],{"className":6896},[1527,1528,1581],[1506,6898,1534],{"className":6899},[1527,1528,1581],[1506,6901,1732],{"className":6902},[1527,1528,1581],[1506,6904,26],{"className":6905},[1527,1528,1581],[1506,6907,2408],{"className":6908,"style":2407},[1527,1528,1581],[1506,6910,1660],{"className":6911},[1659],[1506,6913,6915],{"className":6914},[1561],[1506,6916,6918],{"className":6917,"style":2030},[1565],[1506,6919],{}," = Nombre total de déploiements du produit",[19,6922,6923],{},[60,6924,4019],{},[1506,6926,6928],{"className":6927},[1597],[1506,6929,6931],{"className":6930},[1509],[1506,6932,6934,7025],{"className":6933,"ariaHidden":1514},[1513],[1506,6935,6937,6940,6943,6946,6949,6952,6955,6958,6961,6964,6967,7016,7019,7022],{"className":6936},[1518],[1506,6938],{"className":6939,"style":5889},[1522],[1506,6941,2383],{"className":6942,"style":2382},[1527,1528],[1506,6944,2387],{"className":6945},[1527,1528],[1506,6947,2391],{"className":6948,"style":2015},[1527,1528],[1506,6950,1765],{"className":6951},[1527,1528],[1506,6953,2399],{"className":6954,"style":2398},[1527,1528],[1506,6956,2403],{"className":6957},[1527,1528],[1506,6959,2408],{"className":6960,"style":2407},[1527,1528],[1506,6962,1462],{"className":6963},[1527,1528],[1506,6965,1542],{"className":6966,"style":1541},[1527,1528],[1506,6968,6970,6973],{"className":6969},[1527],[1506,6971,1765],{"className":6972},[1527,1528],[1506,6974,6976],{"className":6975},[1553],[1506,6977,6979,7008],{"className":6978},[1557,1625],[1506,6980,6982,7005],{"className":6981},[1561],[1506,6983,6985],{"className":6984,"style":1745},[1565],[1506,6986,6987,6990],{"style":1748},[1506,6988],{"className":6989,"style":1574},[1573],[1506,6991,6993],{"className":6992},[1578,1579,1580,1581],[1506,6994,6996,6999,7002],{"className":6995},[1527,1581],[1506,6997,1761],{"className":6998},[1527,1528,1581],[1506,7000,1534],{"className":7001},[1527,1528,1581],[1506,7003,5928],{"className":7004},[1527,1528,1581],[1506,7006,1660],{"className":7007},[1659],[1506,7009,7011],{"className":7010},[1561],[1506,7012,7014],{"className":7013,"style":2030},[1565],[1506,7015],{},[1506,7017],{"className":7018,"style":1674},[1673],[1506,7020,1679],{"className":7021},[1678],[1506,7023],{"className":7024,"style":1674},[1673],[1506,7026,7028,7031,7130,7133,7136,7139],{"className":7027},[1518],[1506,7029],{"className":7030,"style":1689},[1522],[1506,7032,7034,7037,7127],{"className":7033},[1527],[1506,7035],{"className":7036},[1696,1697],[1506,7038,7040],{"className":7039},[1701],[1506,7041,7043,7119],{"className":7042},[1557,1625],[1506,7044,7046,7116],{"className":7045},[1561],[1506,7047,7049,7097,7105],{"className":7048,"style":1711},[1565],[1506,7050,7051,7054],{"style":1714},[1506,7052],{"className":7053,"style":1718},[1573],[1506,7055,7057],{"className":7056},[1527],[1506,7058,7060,7063],{"className":7059},[1527],[1506,7061,2078],{"className":7062},[1527,1528],[1506,7064,7066],{"className":7065},[1553],[1506,7067,7069,7089],{"className":7068},[1557,1625],[1506,7070,7072,7086],{"className":7071},[1561],[1506,7073,7075],{"className":7074,"style":1632},[1565],[1506,7076,7077,7080],{"style":1748},[1506,7078],{"className":7079,"style":1574},[1573],[1506,7081,7083],{"className":7082},[1578,1579,1580,1581],[1506,7084,19],{"className":7085},[1527,1528,1581],[1506,7087,1660],{"className":7088},[1659],[1506,7090,7092],{"className":7091},[1561],[1506,7093,7095],{"className":7094,"style":1667},[1565],[1506,7096],{},[1506,7098,7099,7102],{"style":1853},[1506,7100],{"className":7101,"style":1718},[1573],[1506,7103],{"className":7104,"style":1861},[1860],[1506,7106,7107,7110],{"style":1864},[1506,7108],{"className":7109,"style":1718},[1573],[1506,7111,7113],{"className":7112},[1527],[1506,7114,1592],{"className":7115},[1527],[1506,7117,1660],{"className":7118},[1659],[1506,7120,7122],{"className":7121},[1561],[1506,7123,7125],{"className":7124,"style":1883},[1565],[1506,7126],{},[1506,7128],{"className":7129},[1850,1697],[1506,7131],{"className":7132,"style":2116},[1673],[1506,7134,2169],{"className":7135,"style":2520},[2120,2167,2168],[1506,7137],{"className":7138,"style":2116},[1673],[1506,7140,7142,7145,7148,7151,7154,7157,7160,7163,7166,7169,7172,7230],{"className":7141},[2848],[1506,7143,1725],{"className":7144,"style":2853},[1696,2852],[1506,7146,2383],{"className":7147,"style":2382},[1527,1528],[1506,7149,2387],{"className":7150},[1527,1528],[1506,7152,2391],{"className":7153,"style":2015},[1527,1528],[1506,7155,1765],{"className":7156},[1527,1528],[1506,7158,2399],{"className":7159,"style":2398},[1527,1528],[1506,7161,2403],{"className":7162},[1527,1528],[1506,7164,2408],{"className":7165,"style":2407},[1527,1528],[1506,7167,1462],{"className":7168},[1527,1528],[1506,7170,1542],{"className":7171,"style":1541},[1527,1528],[1506,7173,7175,7178],{"className":7174},[1527],[1506,7176,1765],{"className":7177},[1527,1528],[1506,7179,7181],{"className":7180},[1553],[1506,7182,7184,7222],{"className":7183},[1557,1625],[1506,7185,7187,7219],{"className":7186},[1561],[1506,7188,7190],{"className":7189,"style":1745},[1565],[1506,7191,7192,7195],{"style":1748},[1506,7193],{"className":7194,"style":1574},[1573],[1506,7196,7198],{"className":7197},[1578,1579,1580,1581],[1506,7199,7201,7204,7207,7210,7213,7216],{"className":7200},[1527,1581],[1506,7202,19],{"className":7203},[1527,1528,1581],[1506,7205,2447],{"className":7206},[1527,1528,1581],[1506,7208,1761],{"className":7209},[1527,1528,1581],[1506,7211,1462],{"className":7212},[1527,1528,1581],[1506,7214,2457],{"className":7215},[1527,1528,1581],[1506,7217,1732],{"className":7218},[1527,1528,1581],[1506,7220,1660],{"className":7221},[1659],[1506,7223,7225],{"className":7224},[1561],[1506,7226,7228],{"className":7227,"style":1667},[1565],[1506,7229],{},[1506,7231,413],{"className":7232,"style":2853},[1850,2852],[19,7234,3168],{},[122,7236,7237],{},[57,7238,7239,4593],{},[1506,7240,7242],{"className":7241},[1509],[1506,7243,7245],{"className":7244,"ariaHidden":1514},[1513],[1506,7246,7248,7251],{"className":7247},[1518],[1506,7249],{"className":7250,"style":4549},[1522],[1506,7252,7254,7257],{"className":7253},[1527],[1506,7255,2078],{"className":7256},[1527,1528],[1506,7258,7260],{"className":7259},[1553],[1506,7261,7263,7283],{"className":7262},[1557,1625],[1506,7264,7266,7280],{"className":7265},[1561],[1506,7267,7269],{"className":7268,"style":1632},[1565],[1506,7270,7271,7274],{"style":1748},[1506,7272],{"className":7273,"style":1574},[1573],[1506,7275,7277],{"className":7276},[1578,1579,1580,1581],[1506,7278,19],{"className":7279},[1527,1528,1581],[1506,7281,1660],{"className":7282},[1659],[1506,7284,7286],{"className":7285},[1561],[1506,7287,7289],{"className":7288,"style":1667},[1565],[1506,7290],{},[19,7292,7293],{},[60,7294,4598],{},[1506,7296,7298],{"className":7297},[1597],[1506,7299,7301],{"className":7300},[1509],[1506,7302,7304,7404],{"className":7303,"ariaHidden":1514},[1513],[1506,7305,7307,7310,7313,7316,7319,7322,7325,7328,7331,7334,7337,7395,7398,7401],{"className":7306},[1518],[1506,7308],{"className":7309,"style":1610},[1522],[1506,7311,2383],{"className":7312,"style":2382},[1527,1528],[1506,7314,2387],{"className":7315},[1527,1528],[1506,7317,2391],{"className":7318,"style":2015},[1527,1528],[1506,7320,1765],{"className":7321},[1527,1528],[1506,7323,2399],{"className":7324,"style":2398},[1527,1528],[1506,7326,2403],{"className":7327},[1527,1528],[1506,7329,2408],{"className":7330,"style":2407},[1527,1528],[1506,7332,1462],{"className":7333},[1527,1528],[1506,7335,1542],{"className":7336,"style":1541},[1527,1528],[1506,7338,7340,7343],{"className":7339},[1527],[1506,7341,1765],{"className":7342},[1527,1528],[1506,7344,7346],{"className":7345},[1553],[1506,7347,7349,7387],{"className":7348},[1557,1625],[1506,7350,7352,7384],{"className":7351},[1561],[1506,7353,7355],{"className":7354,"style":1745},[1565],[1506,7356,7357,7360],{"style":1748},[1506,7358],{"className":7359,"style":1574},[1573],[1506,7361,7363],{"className":7362},[1578,1579,1580,1581],[1506,7364,7366,7369,7372,7375,7378,7381],{"className":7365},[1527,1581],[1506,7367,6221],{"className":7368,"style":2407},[1527,1528,1581],[1506,7370,26],{"className":7371},[1527,1528,1581],[1506,7373,1732],{"className":7374},[1527,1528,1581],[1506,7376,1618],{"className":7377,"style":1617},[1527,1528,1581],[1506,7379,6234],{"className":7380,"style":1541},[1527,1528,1581],[1506,7382,1652],{"className":7383},[1527,1528,1581],[1506,7385,1660],{"className":7386},[1659],[1506,7388,7390],{"className":7389},[1561],[1506,7391,7393],{"className":7392,"style":1667},[1565],[1506,7394],{},[1506,7396],{"className":7397,"style":1674},[1673],[1506,7399,1679],{"className":7400},[1678],[1506,7402],{"className":7403,"style":1674},[1673],[1506,7405,7407,7410,7509,7512,7515,7518],{"className":7406},[1518],[1506,7408],{"className":7409,"style":3556},[1522],[1506,7411,7413,7416,7506],{"className":7412},[1527],[1506,7414],{"className":7415},[1696,1697],[1506,7417,7419],{"className":7418},[1701],[1506,7420,7422,7498],{"className":7421},[1557,1625],[1506,7423,7425,7495],{"className":7424},[1561],[1506,7426,7428,7476,7484],{"className":7427,"style":1711},[1565],[1506,7429,7430,7433],{"style":1714},[1506,7431],{"className":7432,"style":1718},[1573],[1506,7434,7436],{"className":7435},[1527],[1506,7437,7439,7442],{"className":7438},[1527],[1506,7440,2078],{"className":7441},[1527,1528],[1506,7443,7445],{"className":7444},[1553],[1506,7446,7448,7468],{"className":7447},[1557,1625],[1506,7449,7451,7465],{"className":7450},[1561],[1506,7452,7454],{"className":7453,"style":1745},[1565],[1506,7455,7456,7459],{"style":1748},[1506,7457],{"className":7458,"style":1574},[1573],[1506,7460,7462],{"className":7461},[1578,1579,1580,1581],[1506,7463,1761],{"className":7464},[1527,1528,1581],[1506,7466,1660],{"className":7467},[1659],[1506,7469,7471],{"className":7470},[1561],[1506,7472,7474],{"className":7473,"style":2030},[1565],[1506,7475],{},[1506,7477,7478,7481],{"style":1853},[1506,7479],{"className":7480,"style":1718},[1573],[1506,7482],{"className":7483,"style":1861},[1860],[1506,7485,7486,7489],{"style":1864},[1506,7487],{"className":7488,"style":1718},[1573],[1506,7490,7492],{"className":7491},[1527],[1506,7493,1592],{"className":7494},[1527],[1506,7496,1660],{"className":7497},[1659],[1506,7499,7501],{"className":7500},[1561],[1506,7502,7504],{"className":7503,"style":3651},[1565],[1506,7505],{},[1506,7507],{"className":7508},[1850,1697],[1506,7510],{"className":7511,"style":2116},[1673],[1506,7513,2169],{"className":7514,"style":2520},[2120,2167,2168],[1506,7516],{"className":7517,"style":2116},[1673],[1506,7519,7521,7524,7527,7530,7533,7536,7539,7542,7545,7548,7551,7600],{"className":7520},[2848],[1506,7522,1725],{"className":7523,"style":2853},[1696,2852],[1506,7525,2383],{"className":7526,"style":2382},[1527,1528],[1506,7528,2387],{"className":7529},[1527,1528],[1506,7531,2391],{"className":7532,"style":2015},[1527,1528],[1506,7534,1765],{"className":7535},[1527,1528],[1506,7537,2399],{"className":7538,"style":2398},[1527,1528],[1506,7540,2403],{"className":7541},[1527,1528],[1506,7543,2408],{"className":7544,"style":2407},[1527,1528],[1506,7546,1462],{"className":7547},[1527,1528],[1506,7549,1542],{"className":7550,"style":1541},[1527,1528],[1506,7552,7554,7557],{"className":7553},[1527],[1506,7555,1765],{"className":7556},[1527,1528],[1506,7558,7560],{"className":7559},[1553],[1506,7561,7563,7592],{"className":7562},[1557,1625],[1506,7564,7566,7589],{"className":7565},[1561],[1506,7567,7569],{"className":7568,"style":1745},[1565],[1506,7570,7571,7574],{"style":1748},[1506,7572],{"className":7573,"style":1574},[1573],[1506,7575,7577],{"className":7576},[1578,1579,1580,1581],[1506,7578,7580,7583,7586],{"className":7579},[1527,1581],[1506,7581,1761],{"className":7582},[1527,1528,1581],[1506,7584,1534],{"className":7585},[1527,1528,1581],[1506,7587,5928],{"className":7588},[1527,1528,1581],[1506,7590,1660],{"className":7591},[1659],[1506,7593,7595],{"className":7594},[1561],[1506,7596,7598],{"className":7597,"style":2030},[1565],[1506,7599],{},[1506,7601,413],{"className":7602,"style":2853},[1850,2852],[19,7604,3168],{},[122,7606,7607],{},[57,7608,7609,5172],{},[1506,7610,7612],{"className":7611},[1509],[1506,7613,7615],{"className":7614,"ariaHidden":1514},[1513],[1506,7616,7618,7621],{"className":7617},[1518],[1506,7619],{"className":7620,"style":3973},[1522],[1506,7622,7624,7627],{"className":7623},[1527],[1506,7625,2078],{"className":7626},[1527,1528],[1506,7628,7630],{"className":7629},[1553],[1506,7631,7633,7653],{"className":7632},[1557,1625],[1506,7634,7636,7650],{"className":7635},[1561],[1506,7637,7639],{"className":7638,"style":1745},[1565],[1506,7640,7641,7644],{"style":1748},[1506,7642],{"className":7643,"style":1574},[1573],[1506,7645,7647],{"className":7646},[1578,1579,1580,1581],[1506,7648,1761],{"className":7649},[1527,1528,1581],[1506,7651,1660],{"className":7652},[1659],[1506,7654,7656],{"className":7655},[1561],[1506,7657,7659],{"className":7658,"style":2030},[1565],[1506,7660],{},[617,7662,7664],{"id":7663},"mean-time-to-recover","Mean Time To Recover",[19,7666,7667],{},[60,7668,2715],{},[122,7670,7671],{},[57,7672,7673],{},"Non calculé à ce niveau car les incidents sont tracés au niveau produit",[19,7675,7676],{},[60,7677,3433],{},[1506,7679,7681],{"className":7680},[1597],[1506,7682,7684],{"className":7683},[1509],[1506,7685,7687,7767],{"className":7686,"ariaHidden":1514},[1513],[1506,7688,7690,7693,7697,7758,7761,7764],{"className":7689},[1518],[1506,7691],{"className":7692,"style":2731},[1522],[1506,7694,7696],{"className":7695,"style":2398},[1527,1528],"MTT",[1506,7698,7700,7705],{"className":7699},[1527],[1506,7701,7704],{"className":7702,"style":7703},[1527,1528],"margin-right:0.00773em;","R",[1506,7706,7708],{"className":7707},[1553],[1506,7709,7711,7750],{"className":7710},[1557,1625],[1506,7712,7714,7747],{"className":7713},[1561],[1506,7715,7717],{"className":7716,"style":1745},[1565],[1506,7718,7720,7723],{"style":7719},"top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;",[1506,7721],{"className":7722,"style":1574},[1573],[1506,7724,7726],{"className":7725},[1578,1579,1580,1581],[1506,7727,7729,7732,7735,7738,7741,7744],{"className":7728},[1527,1581],[1506,7730,19],{"className":7731},[1527,1528,1581],[1506,7733,2447],{"className":7734},[1527,1528,1581],[1506,7736,1761],{"className":7737},[1527,1528,1581],[1506,7739,1462],{"className":7740},[1527,1528,1581],[1506,7742,2457],{"className":7743},[1527,1528,1581],[1506,7745,1732],{"className":7746},[1527,1528,1581],[1506,7748,1660],{"className":7749},[1659],[1506,7751,7753],{"className":7752},[1561],[1506,7754,7756],{"className":7755,"style":1667},[1565],[1506,7757],{},[1506,7759],{"className":7760,"style":1674},[1673],[1506,7762,1679],{"className":7763},[1678],[1506,7765],{"className":7766,"style":1674},[1673],[1506,7768,7770,7773,7835,7838,7841,7844],{"className":7769},[1518],[1506,7771],{"className":7772,"style":5653},[1522],[1506,7774,7776,7779,7832],{"className":7775},[1527],[1506,7777],{"className":7778},[1696,1697],[1506,7780,7782],{"className":7781},[1701],[1506,7783,7785,7824],{"className":7784},[1557,1625],[1506,7786,7788,7821],{"className":7787},[1561],[1506,7789,7791,7802,7810],{"className":7790,"style":1711},[1565],[1506,7792,7793,7796],{"style":1714},[1506,7794],{"className":7795,"style":1718},[1573],[1506,7797,7799],{"className":7798},[1527],[1506,7800,2078],{"className":7801},[1527,1528],[1506,7803,7804,7807],{"style":1853},[1506,7805],{"className":7806,"style":1718},[1573],[1506,7808],{"className":7809,"style":1861},[1860],[1506,7811,7812,7815],{"style":1864},[1506,7813],{"className":7814,"style":1718},[1573],[1506,7816,7818],{"className":7817},[1527],[1506,7819,1592],{"className":7820},[1527],[1506,7822,1660],{"className":7823},[1659],[1506,7825,7827],{"className":7826},[1561],[1506,7828,7830],{"className":7829,"style":2107},[1565],[1506,7831],{},[1506,7833],{"className":7834},[1850,1697],[1506,7836],{"className":7837,"style":2116},[1673],[1506,7839,2169],{"className":7840,"style":2520},[2120,2167,2168],[1506,7842],{"className":7843,"style":2116},[1673],[1506,7845,7847,7850,7899,7902,7905,7908,7963],{"className":7846},[2848],[1506,7848,1725],{"className":7849,"style":2853},[1696,2852],[1506,7851,7853,7856],{"className":7852},[1527],[1506,7854,1732],{"className":7855},[1527,1528],[1506,7857,7859],{"className":7858},[1553],[1506,7860,7862,7891],{"className":7861},[1557,1625],[1506,7863,7865,7888],{"className":7864},[1561],[1506,7866,7868],{"className":7867,"style":1745},[1565],[1506,7869,7870,7873],{"style":1748},[1506,7871],{"className":7872,"style":1574},[1573],[1506,7874,7876],{"className":7875},[1578,1579,1580,1581],[1506,7877,7879,7882,7885],{"className":7878},[1527,1581],[1506,7880,1765],{"className":7881},[1527,1528,1581],[1506,7883,2078],{"className":7884},[1527,1528,1581],[1506,7886,1761],{"className":7887},[1527,1528,1581],[1506,7889,1660],{"className":7890},[1659],[1506,7892,7894],{"className":7893},[1561],[1506,7895,7897],{"className":7896,"style":2030},[1565],[1506,7898],{},[1506,7900],{"className":7901,"style":1787},[1673],[1506,7903,1588],{"className":7904},[1791],[1506,7906],{"className":7907,"style":1787},[1673],[1506,7909,7911,7914],{"className":7910},[1527],[1506,7912,1732],{"className":7913},[1527,1528],[1506,7915,7917],{"className":7916},[1553],[1506,7918,7920,7955],{"className":7919},[1557,1625],[1506,7921,7923,7952],{"className":7922},[1561],[1506,7924,7926],{"className":7925,"style":2283},[1565],[1506,7927,7928,7931],{"style":1748},[1506,7929],{"className":7930,"style":1574},[1573],[1506,7932,7934],{"className":7933},[1578,1579,1580,1581],[1506,7935,7937,7940,7943,7946,7949],{"className":7936},[1527,1581],[1506,7938,1549],{"className":7939},[1527,1528,1581],[1506,7941,1732],{"className":7942},[1527,1528,1581],[1506,7944,26],{"className":7945},[1527,1528,1581],[1506,7947,1542],{"className":7948,"style":1541},[1527,1528,1581],[1506,7950,1732],{"className":7951},[1527,1528,1581],[1506,7953,1660],{"className":7954},[1659],[1506,7956,7958],{"className":7957},[1561],[1506,7959,7961],{"className":7960,"style":2030},[1565],[1506,7962],{},[1506,7964,413],{"className":7965,"style":2853},[1850,2852],[19,7967,3168],{},[122,7969,7970,7988,8053],{},[57,7971,7972,7987],{},[1506,7973,7975],{"className":7974},[1509],[1506,7976,7978],{"className":7977,"ariaHidden":1514},[1513],[1506,7979,7981,7984],{"className":7980},[1518],[1506,7982],{"className":7983,"style":5801},[1522],[1506,7985,2078],{"className":7986},[1527,1528]," = Nombre d'incidents",[57,7989,7990,8052],{},[1506,7991,7993],{"className":7992},[1509],[1506,7994,7996],{"className":7995,"ariaHidden":1514},[1513],[1506,7997,7999,8003],{"className":7998},[1518],[1506,8000],{"className":8001,"style":8002},[1522],"height:0.7651em;vertical-align:-0.15em;",[1506,8004,8006,8009],{"className":8005},[1527],[1506,8007,1732],{"className":8008},[1527,1528],[1506,8010,8012],{"className":8011},[1553],[1506,8013,8015,8044],{"className":8014},[1557,1625],[1506,8016,8018,8041],{"className":8017},[1561],[1506,8019,8021],{"className":8020,"style":1745},[1565],[1506,8022,8023,8026],{"style":1748},[1506,8024],{"className":8025,"style":1574},[1573],[1506,8027,8029],{"className":8028},[1578,1579,1580,1581],[1506,8030,8032,8035,8038],{"className":8031},[1527,1581],[1506,8033,1765],{"className":8034},[1527,1528,1581],[1506,8036,2078],{"className":8037},[1527,1528,1581],[1506,8039,1761],{"className":8040},[1527,1528,1581],[1506,8042,1660],{"className":8043},[1659],[1506,8045,8047],{"className":8046},[1561],[1506,8048,8050],{"className":8049,"style":2030},[1565],[1506,8051],{}," = Date de résolution de l'incident",[57,8054,8055,8122],{},[1506,8056,8058],{"className":8057},[1509],[1506,8059,8061],{"className":8060,"ariaHidden":1514},[1513],[1506,8062,8064,8067],{"className":8063},[1518],[1506,8065],{"className":8066,"style":8002},[1522],[1506,8068,8070,8073],{"className":8069},[1527],[1506,8071,1732],{"className":8072},[1527,1528],[1506,8074,8076],{"className":8075},[1553],[1506,8077,8079,8114],{"className":8078},[1557,1625],[1506,8080,8082,8111],{"className":8081},[1561],[1506,8083,8085],{"className":8084,"style":2283},[1565],[1506,8086,8087,8090],{"style":1748},[1506,8088],{"className":8089,"style":1574},[1573],[1506,8091,8093],{"className":8092},[1578,1579,1580,1581],[1506,8094,8096,8099,8102,8105,8108],{"className":8095},[1527,1581],[1506,8097,1549],{"className":8098},[1527,1528,1581],[1506,8100,1732],{"className":8101},[1527,1528,1581],[1506,8103,26],{"className":8104},[1527,1528,1581],[1506,8106,1542],{"className":8107,"style":1541},[1527,1528,1581],[1506,8109,1732],{"className":8110},[1527,1528,1581],[1506,8112,1660],{"className":8113},[1659],[1506,8115,8117],{"className":8116},[1561],[1506,8118,8120],{"className":8119,"style":2030},[1565],[1506,8121],{}," = Date de début de l'incident",[19,8124,8125],{},[60,8126,4019],{},[1506,8128,8130],{"className":8129},[1597],[1506,8131,8133],{"className":8132},[1509],[1506,8134,8136,8204],{"className":8135,"ariaHidden":1514},[1513],[1506,8137,8139,8143,8146,8195,8198,8201],{"className":8138},[1518],[1506,8140],{"className":8141,"style":8142},[1522],"height:0.8333em;vertical-align:-0.15em;",[1506,8144,7696],{"className":8145,"style":2398},[1527,1528],[1506,8147,8149,8152],{"className":8148},[1527],[1506,8150,7704],{"className":8151,"style":7703},[1527,1528],[1506,8153,8155],{"className":8154},[1553],[1506,8156,8158,8187],{"className":8157},[1557,1625],[1506,8159,8161,8184],{"className":8160},[1561],[1506,8162,8164],{"className":8163,"style":1745},[1565],[1506,8165,8166,8169],{"style":7719},[1506,8167],{"className":8168,"style":1574},[1573],[1506,8170,8172],{"className":8171},[1578,1579,1580,1581],[1506,8173,8175,8178,8181],{"className":8174},[1527,1581],[1506,8176,1761],{"className":8177},[1527,1528,1581],[1506,8179,1534],{"className":8180},[1527,1528,1581],[1506,8182,5928],{"className":8183},[1527,1528,1581],[1506,8185,1660],{"className":8186},[1659],[1506,8188,8190],{"className":8189},[1561],[1506,8191,8193],{"className":8192,"style":2030},[1565],[1506,8194],{},[1506,8196],{"className":8197,"style":1674},[1673],[1506,8199,1679],{"className":8200},[1678],[1506,8202],{"className":8203,"style":1674},[1673],[1506,8205,8207,8210,8272,8275,8278,8281],{"className":8206},[1518],[1506,8208],{"className":8209,"style":5653},[1522],[1506,8211,8213,8216,8269],{"className":8212},[1527],[1506,8214],{"className":8215},[1696,1697],[1506,8217,8219],{"className":8218},[1701],[1506,8220,8222,8261],{"className":8221},[1557,1625],[1506,8223,8225,8258],{"className":8224},[1561],[1506,8226,8228,8239,8247],{"className":8227,"style":1711},[1565],[1506,8229,8230,8233],{"style":1714},[1506,8231],{"className":8232,"style":1718},[1573],[1506,8234,8236],{"className":8235},[1527],[1506,8237,1652],{"className":8238},[1527,1528],[1506,8240,8241,8244],{"style":1853},[1506,8242],{"className":8243,"style":1718},[1573],[1506,8245],{"className":8246,"style":1861},[1860],[1506,8248,8249,8252],{"style":1864},[1506,8250],{"className":8251,"style":1718},[1573],[1506,8253,8255],{"className":8254},[1527],[1506,8256,1592],{"className":8257},[1527],[1506,8259,1660],{"className":8260},[1659],[1506,8262,8264],{"className":8263},[1561],[1506,8265,8267],{"className":8266,"style":2107},[1565],[1506,8268],{},[1506,8270],{"className":8271},[1850,1697],[1506,8273],{"className":8274,"style":2116},[1673],[1506,8276,2169],{"className":8277,"style":2520},[2120,2167,2168],[1506,8279],{"className":8280,"style":2116},[1673],[1506,8282,8284,8287,8290,8348],{"className":8283},[2848],[1506,8285,1725],{"className":8286,"style":2853},[1696,2852],[1506,8288,7696],{"className":8289,"style":2398},[1527,1528],[1506,8291,8293,8296],{"className":8292},[1527],[1506,8294,7704],{"className":8295,"style":7703},[1527,1528],[1506,8297,8299],{"className":8298},[1553],[1506,8300,8302,8340],{"className":8301},[1557,1625],[1506,8303,8305,8337],{"className":8304},[1561],[1506,8306,8308],{"className":8307,"style":1745},[1565],[1506,8309,8310,8313],{"style":7719},[1506,8311],{"className":8312,"style":1574},[1573],[1506,8314,8316],{"className":8315},[1578,1579,1580,1581],[1506,8317,8319,8322,8325,8328,8331,8334],{"className":8318},[1527,1581],[1506,8320,19],{"className":8321},[1527,1528,1581],[1506,8323,2447],{"className":8324},[1527,1528,1581],[1506,8326,1761],{"className":8327},[1527,1528,1581],[1506,8329,1462],{"className":8330},[1527,1528,1581],[1506,8332,2457],{"className":8333},[1527,1528,1581],[1506,8335,1732],{"className":8336},[1527,1528,1581],[1506,8338,1660],{"className":8339},[1659],[1506,8341,8343],{"className":8342},[1561],[1506,8344,8346],{"className":8345,"style":1667},[1565],[1506,8347],{},[1506,8349,413],{"className":8350,"style":2853},[1850,2852],[19,8352,3168],{},[122,8354,8355],{},[57,8356,8357,4593],{},[1506,8358,8360],{"className":8359},[1509],[1506,8361,8363],{"className":8362,"ariaHidden":1514},[1513],[1506,8364,8366,8369],{"className":8365},[1518],[1506,8367],{"className":8368,"style":5801},[1522],[1506,8370,1652],{"className":8371},[1527,1528],[19,8373,8374],{},[60,8375,4598],{},[1506,8377,8379],{"className":8378},[1597],[1506,8380,8382],{"className":8381},[1509],[1506,8383,8385,8461],{"className":8384,"ariaHidden":1514},[1513],[1506,8386,8388,8391,8394,8452,8455,8458],{"className":8387},[1518],[1506,8389],{"className":8390,"style":2731},[1522],[1506,8392,7696],{"className":8393,"style":2398},[1527,1528],[1506,8395,8397,8400],{"className":8396},[1527],[1506,8398,7704],{"className":8399,"style":7703},[1527,1528],[1506,8401,8403],{"className":8402},[1553],[1506,8404,8406,8444],{"className":8405},[1557,1625],[1506,8407,8409,8441],{"className":8408},[1561],[1506,8410,8412],{"className":8411,"style":1745},[1565],[1506,8413,8414,8417],{"style":7719},[1506,8415],{"className":8416,"style":1574},[1573],[1506,8418,8420],{"className":8419},[1578,1579,1580,1581],[1506,8421,8423,8426,8429,8432,8435,8438],{"className":8422},[1527,1581],[1506,8424,6221],{"className":8425,"style":2407},[1527,1528,1581],[1506,8427,26],{"className":8428},[1527,1528,1581],[1506,8430,1732],{"className":8431},[1527,1528,1581],[1506,8433,1618],{"className":8434,"style":1617},[1527,1528,1581],[1506,8436,6234],{"className":8437,"style":1541},[1527,1528,1581],[1506,8439,1652],{"className":8440},[1527,1528,1581],[1506,8442,1660],{"className":8443},[1659],[1506,8445,8447],{"className":8446},[1561],[1506,8448,8450],{"className":8449,"style":1667},[1565],[1506,8451],{},[1506,8453],{"className":8454,"style":1674},[1673],[1506,8456,1679],{"className":8457},[1678],[1506,8459],{"className":8460,"style":1674},[1673],[1506,8462,8464,8467,8529,8532,8535,8538],{"className":8463},[1518],[1506,8465],{"className":8466,"style":5653},[1522],[1506,8468,8470,8473,8526],{"className":8469},[1527],[1506,8471],{"className":8472},[1696,1697],[1506,8474,8476],{"className":8475},[1701],[1506,8477,8479,8518],{"className":8478},[1557,1625],[1506,8480,8482,8515],{"className":8481},[1561],[1506,8483,8485,8496,8504],{"className":8484,"style":1711},[1565],[1506,8486,8487,8490],{"style":1714},[1506,8488],{"className":8489,"style":1718},[1573],[1506,8491,8493],{"className":8492},[1527],[1506,8494,1534],{"className":8495},[1527,1528],[1506,8497,8498,8501],{"style":1853},[1506,8499],{"className":8500,"style":1718},[1573],[1506,8502],{"className":8503,"style":1861},[1860],[1506,8505,8506,8509],{"style":1864},[1506,8507],{"className":8508,"style":1718},[1573],[1506,8510,8512],{"className":8511},[1527],[1506,8513,1592],{"className":8514},[1527],[1506,8516,1660],{"className":8517},[1659],[1506,8519,8521],{"className":8520},[1561],[1506,8522,8524],{"className":8523,"style":2107},[1565],[1506,8525],{},[1506,8527],{"className":8528},[1850,1697],[1506,8530],{"className":8531,"style":2116},[1673],[1506,8533,2169],{"className":8534,"style":2520},[2120,2167,2168],[1506,8536],{"className":8537,"style":2116},[1673],[1506,8539,8541,8544,8547,8596],{"className":8540},[2848],[1506,8542,1725],{"className":8543,"style":2853},[1696,2852],[1506,8545,7696],{"className":8546,"style":2398},[1527,1528],[1506,8548,8550,8553],{"className":8549},[1527],[1506,8551,7704],{"className":8552,"style":7703},[1527,1528],[1506,8554,8556],{"className":8555},[1553],[1506,8557,8559,8588],{"className":8558},[1557,1625],[1506,8560,8562,8585],{"className":8561},[1561],[1506,8563,8565],{"className":8564,"style":1745},[1565],[1506,8566,8567,8570],{"style":7719},[1506,8568],{"className":8569,"style":1574},[1573],[1506,8571,8573],{"className":8572},[1578,1579,1580,1581],[1506,8574,8576,8579,8582],{"className":8575},[1527,1581],[1506,8577,1761],{"className":8578},[1527,1528,1581],[1506,8580,1534],{"className":8581},[1527,1528,1581],[1506,8583,5928],{"className":8584},[1527,1528,1581],[1506,8586,1660],{"className":8587},[1659],[1506,8589,8591],{"className":8590},[1561],[1506,8592,8594],{"className":8593,"style":2030},[1565],[1506,8595],{},[1506,8597,413],{"className":8598,"style":2853},[1850,2852],[19,8600,3168],{},[122,8602,8603],{},[57,8604,8605,5172],{},[1506,8606,8608],{"className":8607},[1509],[1506,8609,8611],{"className":8610,"ariaHidden":1514},[1513],[1506,8612,8614,8617],{"className":8613},[1518],[1506,8615],{"className":8616,"style":5801},[1522],[1506,8618,1534],{"className":8619},[1527,1528],[617,8621,8623],{"id":8622},"calcul-des-métriques-avec-bigquery","Calcul des métriques avec BigQuery",[19,8625,8626],{},[142,8627],{"alt":8628,"src":8629},"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,8631,8632,8635,8636,8635,8643,8635,8646],{},[787,8633,8634],{},"Photo by"," ",[26,8637,8640],{"href":8638,"rel":8639},"https:\u002F\u002Funsplash.com\u002F@tvick?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash",[30],[787,8641,8642],{},"Taylor Vick",[787,8644,8645],{},"on",[26,8647,8650],{"href":8648,"rel":8649},"https:\u002F\u002Funsplash.com\u002Fphotos\u002Fcable-network-M5tzZtFCOfs?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash",[30],[787,8651,8652],{},"Unsplash",[19,8654,8655],{},"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,8657,8658],{},[60,8659,2710],{},[122,8661,8662,8665],{},[57,8663,8664],{},"Mesure le temps entre une modification de code et son déploiement en production",[57,8666,8667,8668],{},"Formule : ",[1506,8669,8671],{"className":8670},[1509],[1506,8672,8674,8741,8848],{"className":8673,"ariaHidden":1514},[1513],[1506,8675,8677,8680,8683,8732,8735,8738],{"className":8676},[1518],[1506,8678],{"className":8679,"style":2731},[1522],[1506,8681,2735],{"className":8682},[1527],[1506,8684,8686,8689],{"className":8685},[1527],[1506,8687,1732],{"className":8688},[1527,1528],[1506,8690,8692],{"className":8691},[1553],[1506,8693,8695,8724],{"className":8694},[1557,1625],[1506,8696,8698,8721],{"className":8697},[1561],[1506,8699,8701],{"className":8700,"style":1745},[1565],[1506,8702,8703,8706],{"style":1748},[1506,8704],{"className":8705,"style":1574},[1573],[1506,8707,8709],{"className":8708},[1578,1579,1580,1581],[1506,8710,8712,8715,8718],{"className":8711},[1527,1581],[1506,8713,2768],{"className":8714},[1527,1528,1581],[1506,8716,1618],{"className":8717,"style":1617},[1527,1528,1581],[1506,8719,2457],{"className":8720},[1527,1528,1581],[1506,8722,1660],{"className":8723},[1659],[1506,8725,8727],{"className":8726},[1561],[1506,8728,8730],{"className":8729,"style":1667},[1565],[1506,8731],{},[1506,8733],{"className":8734,"style":1674},[1673],[1506,8736,1679],{"className":8737},[1678],[1506,8739],{"className":8740,"style":1674},[1673],[1506,8742,8744,8748,8839,8842,8845],{"className":8743},[1518],[1506,8745],{"className":8746,"style":8747},[1522],"height:0.9682em;vertical-align:-0.3531em;",[1506,8749,8751,8754],{"className":8750},[1527],[1506,8752,1732],{"className":8753},[1527,1528],[1506,8755,8757],{"className":8756},[1553],[1506,8758,8760,8830],{"className":8759},[1557,1625],[1506,8761,8763,8827],{"className":8762},[1561],[1506,8764,8766],{"className":8765,"style":1745},[1565],[1506,8767,8768,8771],{"style":1748},[1506,8769],{"className":8770,"style":1574},[1573],[1506,8772,8774],{"className":8773},[1578,1579,1580,1581],[1506,8775,8777],{"className":8776},[1527,1581],[1506,8778,8780,8783],{"className":8779},[1527,1581],[1506,8781,1761],{"className":8782},[1527,1528,1581],[1506,8784,8786],{"className":8785},[1553],[1506,8787,8789,8818],{"className":8788},[1557,1625],[1506,8790,8792,8815],{"className":8791},[1561],[1506,8793,8795],{"className":8794,"style":3760},[1565],[1506,8796,8797,8800],{"style":4093},[1506,8798],{"className":8799,"style":2797},[1573],[1506,8801,8803],{"className":8802},[1578,2801,2802,1581],[1506,8804,8806,8809,8812],{"className":8805},[1527,1581],[1506,8807,19],{"className":8808},[1527,1528,1581],[1506,8810,2447],{"className":8811},[1527,1528,1581],[1506,8813,1761],{"className":8814},[1527,1528,1581],[1506,8816,1660],{"className":8817},[1659],[1506,8819,8821],{"className":8820},[1561],[1506,8822,8825],{"className":8823,"style":8824},[1565],"height:0.2901em;",[1506,8826],{},[1506,8828,1660],{"className":8829},[1659],[1506,8831,8833],{"className":8832},[1561],[1506,8834,8837],{"className":8835,"style":8836},[1565],"height:0.3531em;",[1506,8838],{},[1506,8840],{"className":8841,"style":1787},[1673],[1506,8843,1588],{"className":8844},[1791],[1506,8846],{"className":8847,"style":1787},[1673],[1506,8849,8851,8854],{"className":8850},[1518],[1506,8852],{"className":8853,"style":8002},[1522],[1506,8855,8857,8860],{"className":8856},[1527],[1506,8858,1732],{"className":8859},[1527,1528],[1506,8861,8863],{"className":8862},[1553],[1506,8864,8866,8889],{"className":8865},[1557,1625],[1506,8867,8869,8886],{"className":8868},[1561],[1506,8870,8872],{"className":8871,"style":1632},[1565],[1506,8873,8874,8877],{"style":1748},[1506,8875],{"className":8876,"style":1574},[1573],[1506,8878,8880],{"className":8879},[1578,1579,1580,1581],[1506,8881,8883],{"className":8882},[1527,1581],[1506,8884,1648],{"className":8885},[1527,1528,1581],[1506,8887,1660],{"className":8888},[1659],[1506,8890,8892],{"className":8891},[1561],[1506,8893,8895],{"className":8894,"style":2030},[1565],[1506,8896],{},[8898,8899,8903],"pre",{"className":8900,"code":8901,"language":8902,"meta":186,"style":186},"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",[999,8904,8905,8913,8932,8944,8983,8996,9002,9011,9017,9039,9057,9081],{"__ignoreMap":186},[1506,8906,8909],{"class":8907,"line":8908},"line",1,[1506,8910,8912],{"class":8911},"sH3jZ","-- Calcul du Lead Time For Changes par composant\n",[1506,8914,8915,8919,8923,8926,8929],{"class":8907,"line":68},[1506,8916,8918],{"class":8917},"suJrU","SELECT",[1506,8920,8922],{"class":8921},"sFSAA"," d",[1506,8924,32],{"class":8925},"sZEs4",[1506,8927,8928],{"class":8921},"component_name",[1506,8930,8931],{"class":8925},",\n",[1506,8933,8934,8937,8939,8942],{"class":8907,"line":79},[1506,8935,8936],{"class":8921},"       d",[1506,8938,32],{"class":8925},[1506,8940,8941],{"class":8921},"product_id",[1506,8943,8931],{"class":8925},[1506,8945,8946,8949,8952,8954,8956,8959,8962,8964,8966,8969,8971,8974,8977,8980],{"class":8907,"line":90},[1506,8947,8948],{"class":8921},"       AVG",[1506,8950,8951],{"class":8925},"(TIMESTAMP_DIFF(",[1506,8953,1761],{"class":8921},[1506,8955,32],{"class":8925},[1506,8957,8958],{"class":8921},"deployment_timestamp",[1506,8960,8961],{"class":8925},", ",[1506,8963,2457],{"class":8921},[1506,8965,32],{"class":8925},[1506,8967,8968],{"class":8921},"commit_timestamp",[1506,8970,8961],{"class":8925},[1506,8972,8973],{"class":8917},"HOUR",[1506,8975,8976],{"class":8925},")) ",[1506,8978,8979],{"class":8917},"as",[1506,8981,8982],{"class":8925}," lead_time_hours\n",[1506,8984,8986,8989,8993],{"class":8907,"line":8985},5,[1506,8987,8988],{"class":8917},"FROM",[1506,8990,8992],{"class":8991},"s9uIt"," `dora_metrics.deployments`",[1506,8994,8995],{"class":8925}," d\n",[1506,8997,8999],{"class":8907,"line":8998},6,[1506,9000,9001],{"class":8917},"         JOIN\n",[1506,9003,9005,9008],{"class":8907,"line":9004},7,[1506,9006,9007],{"class":8991},"     `dora_metrics.git_commits`",[1506,9009,9010],{"class":8925}," c\n",[1506,9012,9014],{"class":8907,"line":9013},8,[1506,9015,9016],{"class":8917},"     ON\n",[1506,9018,9020,9023,9025,9028,9031,9034,9036],{"class":8907,"line":9019},9,[1506,9021,9022],{"class":8921},"         d",[1506,9024,32],{"class":8925},[1506,9026,9027],{"class":8921},"git_tag",[1506,9029,9030],{"class":8917}," =",[1506,9032,9033],{"class":8921}," c",[1506,9035,32],{"class":8925},[1506,9037,9038],{"class":8921},"tag\n",[1506,9040,9042,9045,9047,9049,9052,9054],{"class":8907,"line":9041},10,[1506,9043,9044],{"class":8917},"WHERE",[1506,9046,8922],{"class":8921},[1506,9048,32],{"class":8925},[1506,9050,9051],{"class":8921},"environment",[1506,9053,9030],{"class":8917},[1506,9055,9056],{"class":8991}," 'prod'\n",[1506,9058,9060,9063,9065,9067,9069,9072,9075,9078],{"class":8907,"line":9059},11,[1506,9061,9062],{"class":8917},"  AND",[1506,9064,8922],{"class":8921},[1506,9066,32],{"class":8925},[1506,9068,8958],{"class":8921},[1506,9070,9071],{"class":8917}," BETWEEN",[1506,9073,9074],{"class":8991}," '2024-01-01'",[1506,9076,9077],{"class":8917}," AND",[1506,9079,9080],{"class":8991}," '2024-12-31'\n",[1506,9082,9084,9087,9089,9091,9093,9095,9097,9099],{"class":8907,"line":9083},12,[1506,9085,9086],{"class":8917},"GROUP BY",[1506,9088,8922],{"class":8921},[1506,9090,32],{"class":8925},[1506,9092,8928],{"class":8921},[1506,9094,8961],{"class":8925},[1506,9096,1761],{"class":8921},[1506,9098,32],{"class":8925},[1506,9100,9101],{"class":8921},"product_id\n",[19,9103,9104],{},[60,9105,598],{},[122,9107,9108,9111,9114],{},[57,9109,9110],{},"Fréquence des déploiements en production",[57,9112,9113],{},"Calculée par composant puis agrégée au niveau produit",[57,9115,9116],{},"Exclusion des déploiements de configuration",[8898,9118,9120],{"className":8900,"code":9119,"language":8902,"meta":186,"style":186},"-- 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",[999,9121,9122,9127,9146,9151,9156,9170,9181,9189,9199,9207,9219,9232,9252,9259,9265,9284,9302,9329,9337,9348],{"__ignoreMap":186},[1506,9123,9124],{"class":8907,"line":8908},[1506,9125,9126],{"class":8911},"-- Calcul de la fréquence de déploiement par composant\n",[1506,9128,9129,9132,9135,9138,9141,9143],{"class":8907,"line":68},[1506,9130,9131],{"class":8917},"WITH",[1506,9133,9134],{"class":8925}," deployments_ordered ",[1506,9136,9137],{"class":8917},"AS",[1506,9139,9140],{"class":8925}," (",[1506,9142,8918],{"class":8917},[1506,9144,9145],{"class":8925}," component_name,\n",[1506,9147,9148],{"class":8907,"line":79},[1506,9149,9150],{"class":8925},"                                    product_id,\n",[1506,9152,9153],{"class":8907,"line":90},[1506,9154,9155],{"class":8925},"                                    deployment_timestamp,\n",[1506,9157,9158,9161,9164,9167],{"class":8907,"line":8985},[1506,9159,9160],{"class":8921},"                                    LAG",[1506,9162,9163],{"class":8925},"(deployment_timestamp) ",[1506,9165,9166],{"class":8917},"OVER",[1506,9168,9169],{"class":8925}," (\n",[1506,9171,9172,9175,9178],{"class":8907,"line":8998},[1506,9173,9174],{"class":8917},"      PARTITION",[1506,9176,9177],{"class":8917}," BY",[1506,9179,9180],{"class":8925}," component_name\n",[1506,9182,9183,9186],{"class":8907,"line":9004},[1506,9184,9185],{"class":8917},"      ORDER BY",[1506,9187,9188],{"class":8925}," deployment_timestamp\n",[1506,9190,9191,9194,9196],{"class":8907,"line":9013},[1506,9192,9193],{"class":8925},"    ) ",[1506,9195,8979],{"class":8917},[1506,9197,9198],{"class":8925}," previous_deployment\n",[1506,9200,9201,9204],{"class":8907,"line":9019},[1506,9202,9203],{"class":8917},"                             FROM",[1506,9205,9206],{"class":8991}," `dora_metrics.deployments`\n",[1506,9208,9209,9212,9215,9217],{"class":8907,"line":9041},[1506,9210,9211],{"class":8917},"                             WHERE",[1506,9213,9214],{"class":8925}," environment ",[1506,9216,1679],{"class":8917},[1506,9218,9056],{"class":8991},[1506,9220,9221,9224,9227,9229],{"class":8907,"line":9059},[1506,9222,9223],{"class":8917},"                               AND",[1506,9225,9226],{"class":8925}," is_config_only ",[1506,9228,1679],{"class":8917},[1506,9230,9231],{"class":8925}," FALSE\n",[1506,9233,9234,9236,9239,9242,9244,9246,9249],{"class":8907,"line":9083},[1506,9235,9223],{"class":8917},[1506,9237,9238],{"class":8925}," deployment_timestamp ",[1506,9240,9241],{"class":8917},"BETWEEN",[1506,9243,9074],{"class":8991},[1506,9245,9077],{"class":8917},[1506,9247,9248],{"class":8991}," '2024-12-31'",[1506,9250,9251],{"class":8925},")\n",[1506,9253,9255,9257],{"class":8907,"line":9254},13,[1506,9256,8918],{"class":8917},[1506,9258,9145],{"class":8925},[1506,9260,9262],{"class":8907,"line":9261},14,[1506,9263,9264],{"class":8925},"       product_id,\n",[1506,9266,9268,9271,9273,9276,9279,9281],{"class":8907,"line":9267},15,[1506,9269,9270],{"class":8921},"       COUNT",[1506,9272,1725],{"class":8925},[1506,9274,9275],{"class":8917},"*",[1506,9277,9278],{"class":8925},")                                                            ",[1506,9280,8979],{"class":8917},[1506,9282,9283],{"class":8925}," deployment_count,\n",[1506,9285,9287,9289,9292,9295,9297,9299],{"class":8907,"line":9286},16,[1506,9288,8948],{"class":8921},[1506,9290,9291],{"class":8925},"(TIMESTAMP_DIFF(deployment_timestamp, previous_deployment, ",[1506,9293,9294],{"class":8917},"DAY",[1506,9296,8976],{"class":8925},[1506,9298,8979],{"class":8917},[1506,9300,9301],{"class":8925}," avg_days_between_deployments,\n",[1506,9303,9305,9308,9311,9313,9315,9318,9321,9324,9326],{"class":8907,"line":9304},17,[1506,9306,9307],{"class":8925},"       SAFE_DIVIDE(",[1506,9309,9310],{"class":8921},"COUNT",[1506,9312,1725],{"class":8925},[1506,9314,9275],{"class":8917},[1506,9316,9317],{"class":8925},"), ",[1506,9319,9320],{"class":8921},"365",[1506,9322,9323],{"class":8925},")                                          ",[1506,9325,8979],{"class":8917},[1506,9327,9328],{"class":8925}," deployments_per_day\n",[1506,9330,9332,9334],{"class":8907,"line":9331},18,[1506,9333,8988],{"class":8917},[1506,9335,9336],{"class":8925}," deployments_ordered\n",[1506,9338,9340,9342,9345],{"class":8907,"line":9339},19,[1506,9341,9044],{"class":8917},[1506,9343,9344],{"class":8925}," previous_deployment ",[1506,9346,9347],{"class":8917},"IS NOT NULL\n",[1506,9349,9351,9353],{"class":8907,"line":9350},20,[1506,9352,9086],{"class":8917},[1506,9354,9355],{"class":8925}," component_name, product_id\n",[19,9357,9358],{},[60,9359,608],{},[122,9361,9362,9365,9368],{},[57,9363,9364],{},"Taux de déploiements causant au moins un incident en production",[57,9366,9367],{},"Exprimé en pourcentage",[57,9369,9370],{},"Basé sur les déploiements Kubernetes réussis et les incidents ServiceNow résolus",[8898,9372,9374],{"className":8900,"code":9373,"language":8902,"meta":186,"style":186},"-- 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",[999,9375,9376,9381,9403,9414,9461,9470,9475,9483,9488,9505,9527,9558,9568,9588,9609,9624,9643,9664,9671,9687,9700,9730,9738],{"__ignoreMap":186},[1506,9377,9378],{"class":8907,"line":8908},[1506,9379,9380],{"class":8911},"-- Calcul du Change Failure Rate par produit\n",[1506,9382,9383,9385,9388,9390,9392,9394,9396,9398,9401],{"class":8907,"line":68},[1506,9384,9131],{"class":8917},[1506,9386,9387],{"class":8925}," deployments_with_incidents ",[1506,9389,9137],{"class":8917},[1506,9391,9140],{"class":8925},[1506,9393,8918],{"class":8917},[1506,9395,8922],{"class":8921},[1506,9397,32],{"class":8925},[1506,9399,9400],{"class":8921},"deployment_id",[1506,9402,8931],{"class":8925},[1506,9404,9405,9408,9410,9412],{"class":8907,"line":79},[1506,9406,9407],{"class":8921},"                                           d",[1506,9409,32],{"class":8925},[1506,9411,8941],{"class":8921},[1506,9413,8931],{"class":8925},[1506,9415,9416,9419,9421,9424,9427,9430,9432,9435,9438,9441,9444,9447,9450,9453,9456,9458],{"class":8907,"line":90},[1506,9417,9418],{"class":8921},"                                           MAX",[1506,9420,1725],{"class":8925},[1506,9422,9423],{"class":8917},"CASE",[1506,9425,9426],{"class":8917}," WHEN",[1506,9428,9429],{"class":8921}," i",[1506,9431,32],{"class":8925},[1506,9433,9434],{"class":8921},"incident_id",[1506,9436,9437],{"class":8917}," IS NOT NULL",[1506,9439,9440],{"class":8917}," THEN",[1506,9442,9443],{"class":8921}," 1",[1506,9445,9446],{"class":8917}," ELSE",[1506,9448,9449],{"class":8921}," 0",[1506,9451,9452],{"class":8917}," END",[1506,9454,9455],{"class":8925},") ",[1506,9457,8979],{"class":8917},[1506,9459,9460],{"class":8925}," has_incident\n",[1506,9462,9463,9466,9468],{"class":8907,"line":8985},[1506,9464,9465],{"class":8917},"                                    FROM",[1506,9467,8992],{"class":8991},[1506,9469,8995],{"class":8925},[1506,9471,9472],{"class":8907,"line":8998},[1506,9473,9474],{"class":8917},"                                             LEFT JOIN\n",[1506,9476,9477,9480],{"class":8907,"line":9004},[1506,9478,9479],{"class":8991},"                                         `dora_metrics.incidents`",[1506,9481,9482],{"class":8925}," i\n",[1506,9484,9485],{"class":8907,"line":9013},[1506,9486,9487],{"class":8917},"                                         ON\n",[1506,9489,9490,9493,9495,9497,9499,9501,9503],{"class":8907,"line":9019},[1506,9491,9492],{"class":8921},"                                             d",[1506,9494,32],{"class":8925},[1506,9496,8941],{"class":8921},[1506,9498,9030],{"class":8917},[1506,9500,9429],{"class":8921},[1506,9502,32],{"class":8925},[1506,9504,9101],{"class":8921},[1506,9506,9507,9510,9512,9514,9517,9520,9522,9524],{"class":8907,"line":9041},[1506,9508,9509],{"class":8917},"                                                 AND",[1506,9511,9429],{"class":8921},[1506,9513,32],{"class":8925},[1506,9515,9516],{"class":8921},"created_timestamp",[1506,9518,9519],{"class":8917}," >",[1506,9521,8922],{"class":8921},[1506,9523,32],{"class":8925},[1506,9525,9526],{"class":8921},"deployment_timestamp\n",[1506,9528,9529,9531,9533,9535,9537,9540,9542,9544,9547,9549,9552,9554,9556],{"class":8907,"line":9059},[1506,9530,9509],{"class":8917},[1506,9532,9429],{"class":8921},[1506,9534,32],{"class":8925},[1506,9536,9516],{"class":8921},[1506,9538,9539],{"class":8917}," \u003C=",[1506,9541,9140],{"class":8925},[1506,9543,8918],{"class":8917},[1506,9545,9546],{"class":8921}," MIN",[1506,9548,1725],{"class":8925},[1506,9550,9551],{"class":8921},"next_d",[1506,9553,32],{"class":8925},[1506,9555,8958],{"class":8921},[1506,9557,9251],{"class":8925},[1506,9559,9560,9563,9565],{"class":8907,"line":9083},[1506,9561,9562],{"class":8917},"                                                                             FROM",[1506,9564,8992],{"class":8991},[1506,9566,9567],{"class":8925}," next_d\n",[1506,9569,9570,9573,9576,9578,9580,9582,9584,9586],{"class":8907,"line":9254},[1506,9571,9572],{"class":8917},"                                                                             WHERE",[1506,9574,9575],{"class":8921}," next_d",[1506,9577,32],{"class":8925},[1506,9579,8941],{"class":8921},[1506,9581,9030],{"class":8917},[1506,9583,8922],{"class":8921},[1506,9585,32],{"class":8925},[1506,9587,9101],{"class":8921},[1506,9589,9590,9593,9595,9597,9599,9601,9603,9605,9607],{"class":8907,"line":9261},[1506,9591,9592],{"class":8917},"                                                                               AND",[1506,9594,9575],{"class":8921},[1506,9596,32],{"class":8925},[1506,9598,8958],{"class":8921},[1506,9600,9519],{"class":8917},[1506,9602,8922],{"class":8921},[1506,9604,32],{"class":8925},[1506,9606,8958],{"class":8921},[1506,9608,9251],{"class":8925},[1506,9610,9611,9614,9616,9618,9620,9622],{"class":8907,"line":9267},[1506,9612,9613],{"class":8917},"                                    WHERE",[1506,9615,8922],{"class":8921},[1506,9617,32],{"class":8925},[1506,9619,9051],{"class":8921},[1506,9621,9030],{"class":8917},[1506,9623,9056],{"class":8991},[1506,9625,9626,9629,9631,9633,9635,9637,9639,9641],{"class":8907,"line":9286},[1506,9627,9628],{"class":8917},"                                      AND",[1506,9630,8922],{"class":8921},[1506,9632,32],{"class":8925},[1506,9634,8958],{"class":8921},[1506,9636,9071],{"class":8917},[1506,9638,9074],{"class":8991},[1506,9640,9077],{"class":8917},[1506,9642,9080],{"class":8991},[1506,9644,9645,9648,9650,9652,9654,9656,9658,9660,9662],{"class":8907,"line":9304},[1506,9646,9647],{"class":8917},"                                    GROUP BY",[1506,9649,8922],{"class":8921},[1506,9651,32],{"class":8925},[1506,9653,9400],{"class":8921},[1506,9655,8961],{"class":8925},[1506,9657,1761],{"class":8921},[1506,9659,32],{"class":8925},[1506,9661,8941],{"class":8921},[1506,9663,9251],{"class":8925},[1506,9665,9666,9668],{"class":8907,"line":9331},[1506,9667,8918],{"class":8917},[1506,9669,9670],{"class":8925}," product_id,\n",[1506,9672,9673,9675,9677,9679,9682,9684],{"class":8907,"line":9339},[1506,9674,9270],{"class":8921},[1506,9676,1725],{"class":8925},[1506,9678,9275],{"class":8917},[1506,9680,9681],{"class":8925},")                                       ",[1506,9683,8979],{"class":8917},[1506,9685,9686],{"class":8925}," total_deployments,\n",[1506,9688,9689,9692,9695,9697],{"class":8907,"line":9350},[1506,9690,9691],{"class":8921},"       SUM",[1506,9693,9694],{"class":8925},"(has_incident)                              ",[1506,9696,8979],{"class":8917},[1506,9698,9699],{"class":8925}," failed_deployments,\n",[1506,9701,9703,9705,9708,9711,9713,9715,9717,9719,9721,9724,9727],{"class":8907,"line":9702},21,[1506,9704,9307],{"class":8925},[1506,9706,9707],{"class":8921},"SUM",[1506,9709,9710],{"class":8925},"(has_incident), ",[1506,9712,9310],{"class":8921},[1506,9714,1725],{"class":8925},[1506,9716,9275],{"class":8917},[1506,9718,8976],{"class":8925},[1506,9720,9275],{"class":8917},[1506,9722,9723],{"class":8921}," 100",[1506,9725,9726],{"class":8917}," as",[1506,9728,9729],{"class":8925}," change_failure_rate_percent\n",[1506,9731,9733,9735],{"class":8907,"line":9732},22,[1506,9734,8988],{"class":8917},[1506,9736,9737],{"class":8925}," deployments_with_incidents\n",[1506,9739,9741,9743],{"class":8907,"line":9740},23,[1506,9742,9086],{"class":8917},[1506,9744,9745],{"class":8925}," product_id\n",[19,9747,9748],{},[60,9749,7664],{},[122,9751,9752,9755,9758],{},[57,9753,9754],{},"Temps moyen de résolution des incidents",[57,9756,9757],{},"Calculé à partir des dates d'ouverture et de résolution dans ServiceNow",[57,9759,9760],{},"Agrégé au niveau produit",[8898,9762,9764],{"className":8900,"code":9763,"language":8902,"meta":186,"style":186},"-- 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",[999,9765,9766,9771,9777,9793,9809,9816,9828,9843,9852],{"__ignoreMap":186},[1506,9767,9768],{"class":8907,"line":8908},[1506,9769,9770],{"class":8911},"-- Calcul du Mean Time To Recover par produit\n",[1506,9772,9773,9775],{"class":8907,"line":68},[1506,9774,8918],{"class":8917},[1506,9776,9670],{"class":8925},[1506,9778,9779,9781,9783,9785,9788,9790],{"class":8907,"line":79},[1506,9780,9270],{"class":8921},[1506,9782,1725],{"class":8925},[1506,9784,9275],{"class":8917},[1506,9786,9787],{"class":8925},")                                                         ",[1506,9789,8979],{"class":8917},[1506,9791,9792],{"class":8925}," incident_count,\n",[1506,9794,9795,9797,9800,9802,9804,9806],{"class":8907,"line":90},[1506,9796,8948],{"class":8921},[1506,9798,9799],{"class":8925},"(TIMESTAMP_DIFF(resolved_timestamp, created_timestamp, ",[1506,9801,8973],{"class":8917},[1506,9803,8976],{"class":8925},[1506,9805,8979],{"class":8917},[1506,9807,9808],{"class":8925}," mttr_hours\n",[1506,9810,9811,9813],{"class":8907,"line":8985},[1506,9812,8988],{"class":8917},[1506,9814,9815],{"class":8991}," `dora_metrics.incidents`\n",[1506,9817,9818,9820,9823,9825],{"class":8907,"line":8998},[1506,9819,9044],{"class":8917},[1506,9821,9822],{"class":8917}," status",[1506,9824,9030],{"class":8917},[1506,9826,9827],{"class":8991}," 'Resolved'\n",[1506,9829,9830,9832,9835,9837,9839,9841],{"class":8907,"line":9004},[1506,9831,9062],{"class":8917},[1506,9833,9834],{"class":8925}," created_timestamp ",[1506,9836,9241],{"class":8917},[1506,9838,9074],{"class":8991},[1506,9840,9077],{"class":8917},[1506,9842,9080],{"class":8991},[1506,9844,9845,9847,9850],{"class":8907,"line":9013},[1506,9846,9062],{"class":8917},[1506,9848,9849],{"class":8925}," resolved_timestamp ",[1506,9851,9347],{"class":8917},[1506,9853,9854,9856],{"class":8907,"line":9019},[1506,9855,9086],{"class":8917},[1506,9857,9745],{"class":8925},[617,9859,9861],{"id":9860},"fiabilisation-et-optimisation-des-données","Fiabilisation et optimisation des données",[19,9863,9864],{},[60,9865,9866],{},"Infrastructure as Code",[122,9868,9869,9872,9875],{},[57,9870,9871],{},"Utilisation de Terraform pour standardiser les déploiements",[57,9873,9874],{},"Configuration automatique des annotations requises",[57,9876,9877],{},"Validation des formats de données",[19,9879,9880],{},[60,9881,9882],{},"Bonnes pratiques",[122,9884,9885,9888,9891],{},[57,9886,9887],{},"Tagging systématique des versions",[57,9889,9890],{},"Documentation des conventions",[57,9892,9893],{},"Formation des équipes",[19,9895,9896],{},[60,9897,9898],{},"Monitoring",[122,9900,9901,9904,9907],{},[57,9902,9903],{},"Détection des annotations manquantes",[57,9905,9906],{},"Alertes sur les incohérences",[57,9908,9909],{},"Suivi de la qualité des données",[19,9911,9912],{},[60,9913,9914],{},"Optimisation de BigQuery",[19,9916,9917],{},"La gestion d'un volume important de données dans BigQuery a nécessité plusieurs optimisations :",[8898,9919,9921],{"className":8900,"code":9920,"language":8902,"meta":186,"style":186},"-- 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",[999,9922,9923,9928,9939,9949,9954,9959,9963,9968,9975,9984,9989,9994,9999,10007,10011,10044,10049,10054,10059],{"__ignoreMap":186},[1506,9924,9925],{"class":8907,"line":8908},[1506,9926,9927],{"class":8911},"-- Création de tables partitionnées par date pour améliorer les performances\n",[1506,9929,9930,9933,9936],{"class":8907,"line":68},[1506,9931,9932],{"class":8917},"CREATE",[1506,9934,9935],{"class":8917}," TABLE",[1506,9937,9938],{"class":8991}," `dora_metrics.deployments_partitioned`\n",[1506,9940,9941,9944,9946],{"class":8907,"line":79},[1506,9942,9943],{"class":8917},"    PARTITION",[1506,9945,9177],{"class":8917},[1506,9947,9948],{"class":8917}," DATE\n",[1506,9950,9951],{"class":8907,"line":90},[1506,9952,9953],{"class":8925},"(\n",[1506,9955,9956],{"class":8907,"line":8985},[1506,9957,9958],{"class":8925},"    deployment_timestamp\n",[1506,9960,9961],{"class":8907,"line":8998},[1506,9962,9251],{"class":8925},[1506,9964,9965],{"class":8907,"line":9004},[1506,9966,9967],{"class":8917},"AS\n",[1506,9969,9970,9972],{"class":8907,"line":9013},[1506,9971,8918],{"class":8917},[1506,9973,9974],{"class":8917}," *\n",[1506,9976,9977,9979,9981],{"class":8907,"line":9019},[1506,9978,8988],{"class":8917},[1506,9980,8992],{"class":8991},[1506,9982,9983],{"class":8925},";\n",[1506,9985,9986],{"class":8907,"line":9041},[1506,9987,9988],{"emptyLinePlaceholder":198},"\n",[1506,9990,9991],{"class":8907,"line":9059},[1506,9992,9993],{"class":8911},"-- Création de vues matérialisées pour les requêtes fréquentes\n",[1506,9995,9996],{"class":8907,"line":9083},[1506,9997,9998],{"class":8917},"CREATE\n",[1506,10000,10001,10004],{"class":8907,"line":9254},[1506,10002,10003],{"class":8925},"MATERIALIZED VIEW ",[1506,10005,10006],{"class":8991},"`dora_metrics.lead_time_daily`\n",[1506,10008,10009],{"class":8907,"line":9261},[1506,10010,9967],{"class":8917},[1506,10012,10013,10015,10018,10021,10024,10026,10029,10032,10035,10037,10039,10041],{"class":8907,"line":9267},[1506,10014,8918],{"class":8917},[1506,10016,10017],{"class":8925}," product_id, ",[1506,10019,10020],{"class":8917},"DATE",[1506,10022,10023],{"class":8925}," (deployment_timestamp) ",[1506,10025,8979],{"class":8917},[1506,10027,10028],{"class":8925}," deployment_date, ",[1506,10030,10031],{"class":8921},"AVG",[1506,10033,10034],{"class":8925}," (TIMESTAMP_DIFF(deployment_timestamp, commit_timestamp, ",[1506,10036,8973],{"class":8917},[1506,10038,8976],{"class":8925},[1506,10040,8979],{"class":8917},[1506,10042,10043],{"class":8925}," avg_lead_time_hours\n",[1506,10045,10046],{"class":8907,"line":9286},[1506,10047,10048],{"class":8917},"FROM\n",[1506,10050,10051],{"class":8907,"line":9304},[1506,10052,10053],{"class":8991},"    `dora_metrics.deployments_with_commits`\n",[1506,10055,10056],{"class":8907,"line":9331},[1506,10057,10058],{"class":8917},"GROUP BY\n",[1506,10060,10061],{"class":8907,"line":9339},[1506,10062,10063],{"class":8925},"    product_id, deployment_date;\n",[19,10065,10066],{},[60,10067,10068],{},"Automatisation des flux de données",[19,10070,10071],{},"Nous avons mis en place plusieurs processus automatisés pour maintenir des données à jour :",[122,10073,10074,10077,10080],{},[57,10075,10076],{},"Jobs Cloud Functions pour synchroniser les données ServiceNow toutes les 15 minutes",[57,10078,10079],{},"Webhooks GitHub pour capturer les événements de commit et de tag en temps réel",[57,10081,10082],{},"Export des logs Kubernetes via Cloud Logging avec un délai maximum de 5 minutes",[19,10084,10085],{},"Cette approche nous permet d'obtenir des métriques fiables et exploitables pour l'amélioration continue de nos processus de livraison.",[617,10087,10089],{"id":10088},"points-clés-pour-lagrégation","Points clés pour l'agrégation 🔑",[592,10091,10092],{},[19,10093,10094],{},[60,10095,10096],{},"Garantir la cohérence et la pertinence des métriques agrégées",[122,10098,10099,10104,10109],{},[57,10100,10101],{},[60,10102,10103],{},"Pondération",[57,10105,10106],{},[60,10107,10108],{},"Exclusions",[57,10110,10111],{},[60,10112,10113],{},"Cas particuliers",[19,10115,10116],{},"Cette approche d'agrégation garantit :",[122,10118,10119,10122,10125],{},[57,10120,10121],{},"Une représentation équitable à chaque niveau",[57,10123,10124],{},"Une cohérence dans le calcul des métriques",[57,10126,10127],{},"Une prise en compte appropriée des cas limites",[617,10129,10131],{"id":10130},"synthèse-de-notre-approche-dimplémentation","Synthèse de notre approche d'implémentation",[592,10133,10134],{},[19,10135,10136],{},[60,10137,10138],{},"Une implémentation progressive et adaptée au contexte",[19,10140,10141],{},"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,10143,10144],{},"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.",[37,10146,10148],{"id":10147},"_6-bénéfices-enseignements-et-perspectives","6. Bénéfices, enseignements et perspectives 🤔",[592,10150,10151],{},[19,10152,10153],{},[60,10154,10155],{},"La mise en place des DORA Metrics est un voyage, pas une destination.",[19,10157,10158],{},"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.",[617,10160,10162],{"id":10161},"bénéfices-observés","Bénéfices observés",[592,10164,10165],{},[19,10166,10167],{},[60,10168,10169],{},"Impact transformationnel : au-delà des chiffres",[19,10171,10172],{},"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,10174,10175],{},"Voici les principaux impacts positifs observés :",[122,10177,10178,10184,10190],{},[57,10179,10180,10183],{},[60,10181,10182],{},"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\").",[57,10185,10186,10189],{},[60,10187,10188],{},"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.",[57,10191,10192,10195],{},[60,10193,10194],{},"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,10197,10198],{},"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.",[617,10200,10202],{"id":10201},"enseignements-clés","Enseignements clés",[19,10204,10205],{},"Cette expérience a impliqué de nombreuses adaptations et m'a permis de tirer plusieurs enseignements importants :",[122,10207,10208,10214,10220,10226,10232],{},[57,10209,10210,10213],{},[60,10211,10212],{},"Standardisation nécessaire"," : Les DORA Metrics nécessitent une standardisation des pratiques DevOps pour être efficaces",[57,10215,10216,10219],{},[60,10217,10218],{},"Adaptation au contexte"," : Il est essentiel d'adapter les métriques au contexte spécifique de l'entreprise",[57,10221,10222,10225],{},[60,10223,10224],{},"Qualité des données cruciale"," : La fiabilité des métriques dépend directement de la qualité des données collectées",[57,10227,10228,10231],{},[60,10229,10230],{},"Dimension humaine prépondérante"," : L'accompagnement des équipes et la gestion du changement sont aussi importants que l'aspect technique",[57,10233,10234,10237],{},[60,10235,10236],{},"Pragmatisme indispensable"," : Accepter les imperfections initiales et itérer progressivement est la clé du succès",[617,10239,10241],{"id":10240},"perspectives-dévolution","Perspectives d'évolution",[19,10243,10244],{},"Cette première phase d'implémentation nous a permis d'identifier plusieurs axes d'amélioration pour l'avenir :",[122,10246,10247,10253,10259],{},[57,10248,10249,10252],{},[60,10250,10251],{},"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.",[57,10254,10255,10258],{},[60,10256,10257],{},"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.",[57,10260,10261,10264],{},[60,10262,10263],{},"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.",[37,10266,10267],{"id":173},"Conclusion 🙌",[19,10269,10270],{},"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,10272,10273],{},"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,10275,10276],{},"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.",[592,10278,10279],{},[19,10280,10281,10282,10286,10287,10291],{},"J'espère que ce partage d'expérience vous sera utile ! N'hésitez à me contacter ",[26,10283,10285],{"href":13,"rel":10284},[30],"sur Linkedin"," ou ",[26,10288,10290],{"href":10289},"mailto:maxime@hoppr.tech","par mail"," si vous souhaitez échanger sur le sujet 🙂",[10293,10294,10295],"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":186,"searchDepth":68,"depth":68,"links":10297},[10298,10302,10310,10317,10323,10335,10340],{"id":614,"depth":68,"text":615,"children":10299},[10300,10301],{"id":619,"depth":79,"text":620},{"id":669,"depth":79,"text":670},{"id":715,"depth":68,"text":716,"children":10303},[10304,10305,10306,10307,10308,10309],{"id":722,"depth":79,"text":723},{"id":748,"depth":79,"text":749},{"id":793,"depth":79,"text":794},{"id":849,"depth":79,"text":850},{"id":898,"depth":79,"text":899},{"id":934,"depth":79,"text":935},{"id":968,"depth":68,"text":969,"children":10311},[10312,10313,10314,10315,10316],{"id":983,"depth":79,"text":984},{"id":1024,"depth":79,"text":1025},{"id":1057,"depth":79,"text":1058},{"id":1087,"depth":79,"text":1088},{"id":1123,"depth":79,"text":1124},{"id":1162,"depth":68,"text":1163,"children":10318},[10319,10320,10321,10322],{"id":1174,"depth":79,"text":1175},{"id":1203,"depth":79,"text":1204},{"id":1328,"depth":79,"text":1329},{"id":1384,"depth":79,"text":1385},{"id":1442,"depth":68,"text":1443,"children":10324},[10325,10326,10327,10328,10329,10330,10331,10332,10333,10334],{"id":1454,"depth":79,"text":1455},{"id":2676,"depth":79,"text":2677},{"id":2709,"depth":79,"text":2710},{"id":5175,"depth":79,"text":598},{"id":6481,"depth":79,"text":608},{"id":7663,"depth":79,"text":7664},{"id":8622,"depth":79,"text":8623},{"id":9860,"depth":79,"text":9861},{"id":10088,"depth":79,"text":10089},{"id":10130,"depth":79,"text":10131},{"id":10147,"depth":68,"text":10148,"children":10336},[10337,10338,10339],{"id":10161,"depth":79,"text":10162},{"id":10201,"depth":79,"text":10202},{"id":10240,"depth":79,"text":10241},{"id":173,"depth":68,"text":10267},"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",[10346,10348,10350],{"id":556,"name":557,"image":10347,"linkedin":559,"x":206},"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":208,"name":209,"image":10349,"linkedin":211,"x":206},"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":213,"name":214,"image":10351,"linkedin":216,"x":206},"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":572,"description":10342},"blogs\u002F2025-05-19-bref-jai-mis-en-place-les-dora-metrics-dans-un-grand-groupe-rex\u002Findex",[226,227,231,230,228,229],"ycA5vXwxJYkyDRph3MaKxn750vp-QRZR-YiTh8WN_No",{"id":10357,"title":10358,"alt":10359,"authors":10360,"body":10362,"date":11841,"description":11842,"extension":195,"image":196,"meta":11843,"navigation":198,"ogImage":196,"path":11844,"published":198,"reviewers":11845,"seo":11850,"stem":11851,"tags":11852,"__hash__":11855},"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.",[10361],{"id":10,"name":11,"image":12,"linkedin":13,"x":14},{"type":16,"value":10363,"toc":11818},[10364,10389,10392,10396,10399,10408,10415,10418,10439,10442,10444,10448,10451,10457,10480,10483,10512,10515,10518,10527,10533,10535,10539,10542,10553,10559,10561,10569,10576,10580,10595,10605,10618,10625,10631,10635,10638,10695,10705,10712,10714,10718,10721,10724,10794,10801,10827,10834,10857,10859,10863,10872,10878,10882,10897,11040,11044,11047,11199,11202,11205,11207,11211,11214,11217,11318,11321,11342,11349,11353,11360,11387,11389,11393,11396,11407,11445,11448,11451,11477,11479,11483,11486,11500,11530,11549,11555,11564,11566,11570,11573,11579,11595,11601,11617,11619,11623,11626,11778,11780,11784,11791,11797,11808,11810,11815],[19,10365,10366,10369,10370,10369,10376,10369,10379,10369,10386],{},[787,10367,10368],{},"Comment faire fonctionner"," ",[26,10371,10374],{"href":10372,"rel":10373},"https:\u002F\u002Fwww.datadoghq.com\u002F",[30],[787,10375,385],{},[787,10377,10378],{},"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",[26,10380,10383],{"href":10381,"rel":10382},"https:\u002F\u002Fvector.dev\u002F",[30],[787,10384,10385],{},"Vector",[787,10387,10388],{},"pour connecter un cluster hors-ligne à Datadog.",[10390,10391],"hr",{},[37,10393,10395],{"id":10394},"le-contexte-des-serveurs-aveugles","Le contexte : des serveurs aveugles",[19,10397,10398],{},"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,10400,10401,10402,10407],{},"Un client du secteur de l'assurance a contacté ",[26,10403,10406],{"href":10404,"rel":10405},"http:\u002F\u002Fhoppr.tech\u002F",[30],"HoppR"," 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,10409,10410,10411,10414],{},"La contrainte principale : ",[60,10412,10413],{},"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,10416,10417],{},"Le cahier des charges :",[122,10419,10420,10423,10426,10429,10436],{},[57,10421,10422],{},"Centraliser les logs applicatifs IIS dans Datadog",[57,10424,10425],{},"Collecter les métriques de performance (HTTP, runtime .NET, SQL)",[57,10427,10428],{},"Activer le tracing distribué (APM) sur les applications cibles",[57,10430,10431,10432,10435],{},"Anonymiser les données sensibles ",[60,10433,10434],{},"avant"," qu'elles quittent le réseau",[57,10437,10438],{},"Garantir zéro perte de données en cas de coupure réseau",[19,10440,10441],{},"L'objectif : un pipeline de bout en bout, opérationnel et validé par le client.",[10390,10443],{},[37,10445,10447],{"id":10446},"pourquoi-vector-et-pas-un-proxy-http","Pourquoi Vector et pas un proxy HTTP",[19,10449,10450],{},"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,10452,10453,10456],{},[60,10454,10455],{},"Mais"," ça ne suffit pas ici. On ne veut pas juste relayer du trafic HTTPS. On veut :",[122,10458,10459,10465,10471,10477],{},[57,10460,10461,10464],{},[60,10462,10463],{},"Transformer"," les données en transit (anonymisation)",[57,10466,10467,10470],{},[60,10468,10469],{},"Bufferiser sur disque"," en cas de coupure réseau vers Datadog",[57,10472,10473,10476],{},[60,10474,10475],{},"Séparer les flux"," (logs, métriques, traces) vers les bons endpoints",[57,10478,10479],{},"Avoir un pipeline observable et debuggable",[19,10481,10482],{},"Vector coche toutes ces cases.",[19,10484,10485,10486,8961,10491,9140,10496,10501,10502,10507,10508,10511],{},"C'est un binaire unique écrit en ",[26,10487,10490],{"href":10488,"rel":10489},"https:\u002F\u002Frust-lang.org\u002Ffr\u002F",[30],"Rust",[26,10492,10495],{"href":10493,"rel":10494},"https:\u002F\u002Fgithub.com\u002Fvectordotdev\u002Fvector",[30],"haute performance",[26,10497,10500],{"href":10498,"rel":10499},"https:\u002F\u002Fvector.dev\u002Fdocs\u002Fsetup\u002Fgoing-to-prod\u002Fsizing\u002F",[30],"~25 MiB\u002Fs par vCPU"," pour des logs structurés — soit ",[26,10503,10506],{"href":10504,"rel":10505},"https:\u002F\u002Fgithub.com\u002Fvectordotdev\u002Fvector#performance",[30],"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 ",[60,10509,10510],{},"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,10513,10514],{},"Le coût en ressources ? Négligeable.",[19,10516,10517],{},"Contrairement à un proxy maison qu'il faudrait maintenir, Vector traite notre volume de logs avec une empreinte CPU\u002FRAM minimale.",[19,10519,10520,10521,10526],{},"Le bonus : Vector supporte VRL (",[26,10522,10525],{"href":10523,"rel":10524},"https:\u002F\u002Fvector.dev\u002Fdocs\u002Freference\u002Fvrl\u002F",[30],"Vector Remap Language","), un langage de transformation dédié. Exactement ce qu'il faut pour l'anonymisation.",[19,10528,10529],{},[142,10530],{"alt":10531,"src":10532},"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",[10390,10534],{},[37,10536,10538],{"id":10537},"larchitecture-implémentée","L'architecture implémentée",[19,10540,10541],{},"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,10543,10544,10545,10548,10549,10552],{},"Les serveurs Windows envoient ",[60,10546,10547],{},"tout"," vers Vector : logs, métriques, traces APM, données OTLP. L'agent Datadog Windows est configuré avec un bloc ",[999,10550,10551],{},"vector:"," natif qui redirige, de manière transparente, tous les flux.",[19,10554,10555],{},[142,10556],{"alt":10557,"src":10558},"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",[10390,10560],{},[37,10562,10564,10565,10568],{"id":10563},"piège-n1-store_api_key-un-comportement-par-défaut-trompeur","Piège n°1 : ",[999,10566,10567],{},"store_api_key"," — un comportement par défaut trompeur",[19,10570,10571,10572,10575],{},"Ce problème de configuration est le plus subtil qu'on ait rencontré. Tout semblait fonctionner correctement : les agents envoyaient des données et ",[999,10573,10574],{},"vector top"," affichait les flux. Mais côté Datadog, aucune donnée ne remontait, sans message d'erreur explicite.",[617,10577,10579],{"id":10578},"la-raison","La raison ?",[19,10581,10582,10583,10586,10587,10590,10591,10594],{},"L'agent Datadog sur les serveurs Windows a besoin d'une ",[999,10584,10585],{},"api_key"," dans sa config, même s'il n'envoie rien directement à Datadog.\nLe placeholder mis en place était ",[999,10588,10589],{},"00000000000000000000000000000000",". L'idée ? Permettre à Vector d'utiliser sa propre clé API valide via ",[999,10592,10593],{},"default_api_key"," dans ses sinks.",[19,10596,10597,10598,10601,10602,32],{},"Sauf que Vector, par défaut, a ",[999,10599,10600],{},"store_api_key: true"," sur sa source ",[999,10603,10604],{},"datadog_agent",[19,10606,10607,10608,10611,10612,10615,10616,32],{},"Ce paramètre fait que Vector ",[60,10609,10610],{},"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 ",[60,10613,10614],{},"prend le dessus"," sur ",[999,10617,10593],{},[19,10619,10620,10621,10624],{},"Résultat : Vector envoie les logs avec la clé ",[999,10622,10623],{},"00000000..."," — qui se fait rejeter par Datadog. Tout cela sans alerte ou notification pour comprendre ce rejet.",[19,10626,10627],{},[142,10628],{"alt":10629,"src":10630},"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",[617,10632,10634],{"id":10633},"la-solution","La solution",[19,10636,10637],{},"Un seul paramètre à changer :",[8898,10639,10643],{"className":10640,"code":10641,"language":10642,"meta":186,"style":186},"language-yaml shiki shiki-themes github-dark-default","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","yaml",[999,10644,10645,10654,10661,10672,10682],{"__ignoreMap":186},[1506,10646,10647,10651],{"class":8907,"line":8908},[1506,10648,10650],{"class":10649},"sPWt5","sources",[1506,10652,10653],{"class":8925},":\n",[1506,10655,10656,10659],{"class":8907,"line":68},[1506,10657,10658],{"class":10649},"  datadog_agents",[1506,10660,10653],{"class":8925},[1506,10662,10663,10666,10669],{"class":8907,"line":79},[1506,10664,10665],{"class":10649},"    type",[1506,10667,10668],{"class":8925},": ",[1506,10670,10671],{"class":8991},"datadog_agent\n",[1506,10673,10674,10677,10679],{"class":8907,"line":90},[1506,10675,10676],{"class":10649},"    address",[1506,10678,10668],{"class":8925},[1506,10680,10681],{"class":8991},"\"0.0.0.0:8443\"\n",[1506,10683,10684,10687,10689,10692],{"class":8907,"line":8985},[1506,10685,10686],{"class":10649},"    store_api_key",[1506,10688,10668],{"class":8925},[1506,10690,10691],{"class":8921},"false",[1506,10693,10694],{"class":8911},"  # ← C'est ça qui manquait\n",[19,10696,10697,10698,10701,10702,10704],{},"Avec ",[999,10699,10700],{},"store_api_key: false",", Vector ignore la clé transmise par les agents et utilise systématiquement la ",[999,10703,10593],{}," configurée dans chaque sink.",[19,10706,10707,10708,10711],{},"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 ",[999,10709,10710],{},"journalctl"," qu'on a identifié la cause. Le correctif tient en un seul paramètre.",[10390,10713],{},[37,10715,10717],{"id":10716},"piège-n2-tls-et-certificats-internes","Piège n°2 : TLS et certificats internes",[19,10719,10720],{},"Les communications agent → Vector passent en TLS sur le port 8443. Le client utilise une PKI interne avec un certificat wildcard.",[19,10722,10723],{},"Côté Vector (Linux), la config TLS est straightforward :",[8898,10725,10727],{"className":10640,"code":10726,"language":10642,"meta":186,"style":186},"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",[999,10728,10729,10735,10741,10749,10757,10764,10774,10784],{"__ignoreMap":186},[1506,10730,10731,10733],{"class":8907,"line":8908},[1506,10732,10650],{"class":10649},[1506,10734,10653],{"class":8925},[1506,10736,10737,10739],{"class":8907,"line":68},[1506,10738,10658],{"class":10649},[1506,10740,10653],{"class":8925},[1506,10742,10743,10745,10747],{"class":8907,"line":79},[1506,10744,10665],{"class":10649},[1506,10746,10668],{"class":8925},[1506,10748,10671],{"class":8991},[1506,10750,10751,10753,10755],{"class":8907,"line":90},[1506,10752,10676],{"class":10649},[1506,10754,10668],{"class":8925},[1506,10756,10681],{"class":8991},[1506,10758,10759,10762],{"class":8907,"line":8985},[1506,10760,10761],{"class":10649},"    tls",[1506,10763,10653],{"class":8925},[1506,10765,10766,10769,10771],{"class":8907,"line":8998},[1506,10767,10768],{"class":10649},"      enabled",[1506,10770,10668],{"class":8925},[1506,10772,10773],{"class":8921},"true\n",[1506,10775,10776,10779,10781],{"class":8907,"line":9004},[1506,10777,10778],{"class":10649},"      crt_file",[1506,10780,10668],{"class":8925},[1506,10782,10783],{"class":8991},"\"\u002Fvector\u002Fcerts\u002Fserver.crt\"\n",[1506,10785,10786,10789,10791],{"class":8907,"line":9013},[1506,10787,10788],{"class":10649},"      key_file",[1506,10790,10668],{"class":8925},[1506,10792,10793],{"class":8991},"\"\u002Fvector\u002Fcerts\u002Fserver.key\"\n",[19,10795,10796,10797,10800],{},"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 ",[999,10798,10799],{},"Trusted Root Certification Authorities"," de la machine, l'agent refuse la connexion TLS sans message d'erreur très explicite.",[8898,10802,10806],{"className":10803,"code":10804,"language":10805,"meta":186,"style":186},"language-powershell shiki shiki-themes github-dark-default","Import-Certificate -FilePath \"C:\\\\certs\\\\ca-interne.crt\" -CertStoreLocation Cert:\\\\LocalMachine\\\\Root\n","powershell",[999,10807,10808],{"__ignoreMap":186},[1506,10809,10810,10813,10816,10819,10822,10824],{"class":8907,"line":8908},[1506,10811,10812],{"class":8921},"Import-Certificate",[1506,10814,10815],{"class":8917}," -",[1506,10817,10818],{"class":8925},"FilePath ",[1506,10820,10821],{"class":8991},"\"C:\\\\certs\\\\ca-interne.crt\"",[1506,10823,10815],{"class":8917},[1506,10825,10826],{"class":8925},"CertStoreLocation Cert:\\\\LocalMachine\\\\Root\n",[19,10828,10829,10830,10833],{},"Pensez aussi à vérifier la connectivité avec ",[999,10831,10832],{},"Test-NetConnection"," avant de chercher un bug applicatif :",[8898,10835,10837],{"className":10803,"code":10836,"language":10805,"meta":186,"style":186},"Test-NetConnection -ComputerName vector.internal.company.local -Port 8443\n",[999,10838,10839],{"__ignoreMap":186},[1506,10840,10841,10843,10845,10848,10851,10854],{"class":8907,"line":8908},[1506,10842,10832],{"class":8921},[1506,10844,10815],{"class":8917},[1506,10846,10847],{"class":8925},"ComputerName vector.internal.company.local ",[1506,10849,10850],{"class":8917},"-",[1506,10852,10853],{"class":8925},"Port ",[1506,10855,10856],{"class":8921},"8443\n",[10390,10858],{},[37,10860,10862],{"id":10861},"la-double-anonymisation-ceinture-et-bretelles","La double anonymisation : ceinture et bretelles",[19,10864,10865,10866,10871],{},"Le client avait une exigence forte : aucune ",[26,10867,10870],{"href":10868,"rel":10869},"https:\u002F\u002Fwww.cnil.fr\u002Ffr\u002Fdefinition\u002Fdonnee-personnelle",[30],"donnée à caractère personnel (DCP)"," ne doit quitter le réseau interne. On a donc mis en place une anonymisation à deux niveaux.",[19,10873,10874],{},[142,10875],{"alt":10876,"src":10877},"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",[617,10879,10881],{"id":10880},"niveau-1-agent-datadog-serveurs-windows","Niveau 1 : Agent Datadog (serveurs Windows)",[19,10883,10884,10885,10888,10889,10892,10893,10896],{},"L'agent Datadog supporte nativement des ",[999,10886,10887],{},"processing_rules"," de type ",[999,10890,10891],{},"mask_sequences"," dans la section ",[999,10894,10895],{},"logs_config",". On masque à la source :",[8898,10898,10900],{"className":10640,"code":10899,"language":10642,"meta":186,"style":186},"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",[999,10901,10902,10908,10915,10928,10938,10948,10958,10962,10972,10981,10990,10999,11003,11013,11022,11031],{"__ignoreMap":186},[1506,10903,10904,10906],{"class":8907,"line":8908},[1506,10905,10895],{"class":10649},[1506,10907,10653],{"class":8925},[1506,10909,10910,10913],{"class":8907,"line":68},[1506,10911,10912],{"class":10649},"  processing_rules",[1506,10914,10653],{"class":8925},[1506,10916,10917,10920,10923,10925],{"class":8907,"line":79},[1506,10918,10919],{"class":8925},"    - ",[1506,10921,10922],{"class":10649},"type",[1506,10924,10668],{"class":8925},[1506,10926,10927],{"class":8991},"mask_sequences\n",[1506,10929,10930,10933,10935],{"class":8907,"line":90},[1506,10931,10932],{"class":10649},"      name",[1506,10934,10668],{"class":8925},[1506,10936,10937],{"class":8991},"mask_ip_addresses\n",[1506,10939,10940,10943,10945],{"class":8907,"line":8985},[1506,10941,10942],{"class":10649},"      pattern",[1506,10944,10668],{"class":8925},[1506,10946,10947],{"class":8991},"'(?:(?: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",[1506,10949,10950,10953,10955],{"class":8907,"line":8998},[1506,10951,10952],{"class":10649},"      replace_placeholder",[1506,10954,10668],{"class":8925},[1506,10956,10957],{"class":8991},"\"[HIDE_IP]\"\n",[1506,10959,10960],{"class":8907,"line":9004},[1506,10961,9988],{"emptyLinePlaceholder":198},[1506,10963,10964,10966,10968,10970],{"class":8907,"line":9013},[1506,10965,10919],{"class":8925},[1506,10967,10922],{"class":10649},[1506,10969,10668],{"class":8925},[1506,10971,10927],{"class":8991},[1506,10973,10974,10976,10978],{"class":8907,"line":9019},[1506,10975,10932],{"class":10649},[1506,10977,10668],{"class":8925},[1506,10979,10980],{"class":8991},"mask_emails\n",[1506,10982,10983,10985,10987],{"class":8907,"line":9041},[1506,10984,10942],{"class":10649},[1506,10986,10668],{"class":8925},[1506,10988,10989],{"class":8991},"'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\\\.[a-zA-Z0-9-.]+'\n",[1506,10991,10992,10994,10996],{"class":8907,"line":9059},[1506,10993,10952],{"class":10649},[1506,10995,10668],{"class":8925},[1506,10997,10998],{"class":8991},"\"[HIDE_EMAIL]\"\n",[1506,11000,11001],{"class":8907,"line":9083},[1506,11002,9988],{"emptyLinePlaceholder":198},[1506,11004,11005,11007,11009,11011],{"class":8907,"line":9254},[1506,11006,10919],{"class":8925},[1506,11008,10922],{"class":10649},[1506,11010,10668],{"class":8925},[1506,11012,10927],{"class":8991},[1506,11014,11015,11017,11019],{"class":8907,"line":9261},[1506,11016,10932],{"class":10649},[1506,11018,10668],{"class":8925},[1506,11020,11021],{"class":8991},"mask_phone_numbers\n",[1506,11023,11024,11026,11028],{"class":8907,"line":9267},[1506,11025,10942],{"class":10649},[1506,11027,10668],{"class":8925},[1506,11029,11030],{"class":8991},"'(?:\\\\+33|0)[1-9]\\\\d{8}'\n",[1506,11032,11033,11035,11037],{"class":8907,"line":9286},[1506,11034,10952],{"class":10649},[1506,11036,10668],{"class":8925},[1506,11038,11039],{"class":8991},"\"[HIDE_PHONE_NUMBER]\"\n",[617,11041,11043],{"id":11042},"niveau-2-vector-serveur-relai","Niveau 2 : Vector (serveur relai)",[19,11045,11046],{},"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.",[8898,11048,11050],{"className":10640,"code":11049,"language":10642,"meta":186,"style":186},"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",[999,11051,11052,11059,11066,11075,11082,11090,11100,11105,11109,11114,11119,11124,11129,11133,11137,11142,11147,11151,11155,11159,11164,11169,11173,11177,11182,11188,11194],{"__ignoreMap":186},[1506,11053,11054,11057],{"class":8907,"line":8908},[1506,11055,11056],{"class":10649},"transforms",[1506,11058,10653],{"class":8925},[1506,11060,11061,11064],{"class":8907,"line":68},[1506,11062,11063],{"class":10649},"  anonymize_logs",[1506,11065,10653],{"class":8925},[1506,11067,11068,11070,11072],{"class":8907,"line":79},[1506,11069,10665],{"class":10649},[1506,11071,10668],{"class":8925},[1506,11073,11074],{"class":8991},"remap\n",[1506,11076,11077,11080],{"class":8907,"line":90},[1506,11078,11079],{"class":10649},"    inputs",[1506,11081,10653],{"class":8925},[1506,11083,11084,11087],{"class":8907,"line":8985},[1506,11085,11086],{"class":8925},"      - ",[1506,11088,11089],{"class":8991},"\"datadog_agents.logs\"\n",[1506,11091,11092,11095,11097],{"class":8907,"line":8998},[1506,11093,11094],{"class":10649},"    source",[1506,11096,10668],{"class":8925},[1506,11098,11099],{"class":8917},"|\n",[1506,11101,11102],{"class":8907,"line":9004},[1506,11103,11104],{"class":8991},"      .message = to_string(.message) ?? \"\"\n",[1506,11106,11107],{"class":8907,"line":9013},[1506,11108,9988],{"emptyLinePlaceholder":198},[1506,11110,11111],{"class":8907,"line":9019},[1506,11112,11113],{"class":8991},"      .message = redact!(.message,\n",[1506,11115,11116],{"class":8907,"line":9041},[1506,11117,11118],{"class":8991},"        [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",[1506,11120,11121],{"class":8907,"line":9059},[1506,11122,11123],{"class":8991},"        {\"type\": \"text\", \"replacement\": \"[HIDE_IP]\"}\n",[1506,11125,11126],{"class":8907,"line":9083},[1506,11127,11128],{"class":8991},"      )\n",[1506,11130,11131],{"class":8907,"line":9254},[1506,11132,9988],{"emptyLinePlaceholder":198},[1506,11134,11135],{"class":8907,"line":9261},[1506,11136,11113],{"class":8991},[1506,11138,11139],{"class":8907,"line":9267},[1506,11140,11141],{"class":8991},"        [r'https?:\u002F\u002F[\\\\w\\\\-]+(\\\\.[\\\\w\\\\-]+)+([\\\\w\\\\-.,@?^=%&:\u002F~+#]*[\\\\w\\\\-@?^=%&\u002F~+#])?'],\n",[1506,11143,11144],{"class":8907,"line":9286},[1506,11145,11146],{"class":8991},"        {\"type\": \"text\", \"replacement\": \"[HIDE_URL]\"}\n",[1506,11148,11149],{"class":8907,"line":9304},[1506,11150,11128],{"class":8991},[1506,11152,11153],{"class":8907,"line":9331},[1506,11154,9988],{"emptyLinePlaceholder":198},[1506,11156,11157],{"class":8907,"line":9339},[1506,11158,11113],{"class":8991},[1506,11160,11161],{"class":8907,"line":9350},[1506,11162,11163],{"class":8991},"        [r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\\\.[a-zA-Z0-9-.]+'],\n",[1506,11165,11166],{"class":8907,"line":9702},[1506,11167,11168],{"class":8991},"        {\"type\": \"text\", \"replacement\": \"[HIDE_EMAIL]\"}\n",[1506,11170,11171],{"class":8907,"line":9732},[1506,11172,11128],{"class":8991},[1506,11174,11175],{"class":8907,"line":9740},[1506,11176,9988],{"emptyLinePlaceholder":198},[1506,11178,11180],{"class":8907,"line":11179},24,[1506,11181,11113],{"class":8991},[1506,11183,11185],{"class":8907,"line":11184},25,[1506,11186,11187],{"class":8991},"        [r'(?:\\\\+33|0)[1-9]\\\\d{8}'],\n",[1506,11189,11191],{"class":8907,"line":11190},26,[1506,11192,11193],{"class":8991},"        {\"type\": \"text\", \"replacement\": \"[HIDE_PHONE_NUMBER]\"}\n",[1506,11195,11197],{"class":8907,"line":11196},27,[1506,11198,11128],{"class":8991},[19,11200,11201],{},"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,11203,11204],{},"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.",[10390,11206],{},[37,11208,11210],{"id":11209},"résilience-le-buffer-disque-write-ahead-log","Résilience : le buffer disque write-ahead log",[19,11212,11213],{},"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,11215,11216],{},"On a activé le buffer disque, qui fonctionne comme un write-ahead log :",[8898,11218,11220],{"className":10640,"code":11219,"language":10642,"meta":186,"style":186},"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",[999,11221,11222,11229,11236,11245,11251,11258,11268,11278,11285,11295,11308],{"__ignoreMap":186},[1506,11223,11224,11227],{"class":8907,"line":8908},[1506,11225,11226],{"class":10649},"sinks",[1506,11228,10653],{"class":8925},[1506,11230,11231,11234],{"class":8907,"line":68},[1506,11232,11233],{"class":10649},"  dd_logs",[1506,11235,10653],{"class":8925},[1506,11237,11238,11240,11242],{"class":8907,"line":79},[1506,11239,10665],{"class":10649},[1506,11241,10668],{"class":8925},[1506,11243,11244],{"class":8991},"datadog_logs\n",[1506,11246,11247,11249],{"class":8907,"line":90},[1506,11248,11079],{"class":10649},[1506,11250,10653],{"class":8925},[1506,11252,11253,11255],{"class":8907,"line":8985},[1506,11254,11086],{"class":8925},[1506,11256,11257],{"class":8991},"anonymize_logs\n",[1506,11259,11260,11263,11265],{"class":8907,"line":8998},[1506,11261,11262],{"class":10649},"    default_api_key",[1506,11264,10668],{"class":8925},[1506,11266,11267],{"class":8991},"\"${DD_API_KEY}\"\n",[1506,11269,11270,11273,11275],{"class":8907,"line":9004},[1506,11271,11272],{"class":10649},"    site",[1506,11274,10668],{"class":8925},[1506,11276,11277],{"class":8991},"\"datadoghq.eu\"\n",[1506,11279,11280,11283],{"class":8907,"line":9013},[1506,11281,11282],{"class":10649},"    buffer",[1506,11284,10653],{"class":8925},[1506,11286,11287,11290,11292],{"class":8907,"line":9019},[1506,11288,11289],{"class":10649},"      type",[1506,11291,10668],{"class":8925},[1506,11293,11294],{"class":8991},"disk\n",[1506,11296,11297,11300,11302,11305],{"class":8907,"line":9041},[1506,11298,11299],{"class":10649},"      max_size",[1506,11301,10668],{"class":8925},[1506,11303,11304],{"class":8921},"85899345920",[1506,11306,11307],{"class":8911},"  # ~80 Go\n",[1506,11309,11310,11313,11315],{"class":8907,"line":9059},[1506,11311,11312],{"class":10649},"      when_full",[1506,11314,10668],{"class":8925},[1506,11316,11317],{"class":8991},"block\n",[19,11319,11320],{},"Le fonctionnement :",[122,11322,11323,11330,11336,11339],{},[57,11324,11325,11326,11329],{},"Chaque événement est ",[60,11327,11328],{},"écrit sur disque"," avant d'être envoyé",[57,11331,11332,11333],{},"En cas de coupure, les événements s'accumulent dans ",[999,11334,11335],{},"\u002Fvector\u002Fbuffer\u002F",[57,11337,11338],{},"Quand la connexion revient, Vector vide automatiquement le buffer",[57,11340,11341],{},"En cas de crash, les données sont récupérées au redémarrage",[19,11343,11344,11345,11348],{},"Les fichiers buffer sont des segments de 128 Mo en append-only. Le paramètre ",[999,11346,11347],{},"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.",[617,11350,11352],{"id":11351},"un-point-dattention-sur-le-monitoring-du-buffer","Un point d'attention sur le monitoring du buffer",[19,11354,11355,11356,11359],{},"Le buffer disque crée des fichiers ",[999,11357,11358],{},"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.",[8898,11361,11365],{"className":11362,"code":11363,"language":11364,"meta":186,"style":186},"language-bash shiki shiki-themes github-dark-default","# Surveiller en temps réel\nwatch -n 5 'ls -lah \u002Fvector\u002Fbuffer\u002Fdd_logs\u002F'\n","bash",[999,11366,11367,11372],{"__ignoreMap":186},[1506,11368,11369],{"class":8907,"line":8908},[1506,11370,11371],{"class":8911},"# Surveiller en temps réel\n",[1506,11373,11374,11378,11381,11384],{"class":8907,"line":68},[1506,11375,11377],{"class":11376},"sQhOw","watch",[1506,11379,11380],{"class":8921}," -n",[1506,11382,11383],{"class":8921}," 5",[1506,11385,11386],{"class":8991}," 'ls -lah \u002Fvector\u002Fbuffer\u002Fdd_logs\u002F'\n",[10390,11388],{},[37,11390,11392],{"id":11391},"langle-mort-qui-surveille-le-surveillant","L'angle mort : qui surveille le surveillant ?",[19,11394,11395],{},"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,11397,11398,11399,11402,11403,11406],{},"La solution : un ",[60,11400,11401],{},"agent Datadog dédié"," installé directement sur le serveur Vector, qui se connecte à Datadog ",[60,11404,11405],{},"sans passer par Vector",". Cet agent surveille :",[122,11408,11409,11418,11427,11436],{},[57,11410,11411,9140,11414,11417],{},[60,11412,11413],{},"Le processus Vector",[999,11415,11416],{},"process.d",") : est-ce que le binaire tourne ?",[57,11419,11420,9140,11423,11426],{},[60,11421,11422],{},"Le port 8443",[999,11424,11425],{},"tcp_check.d",") : est-ce que Vector écoute ?",[57,11428,11429,9140,11432,11435],{},[60,11430,11431],{},"L'espace disque",[999,11433,11434],{},"disk.d",") : le buffer risque-t-il de saturer ?",[57,11437,11438,9140,11441,11444],{},[60,11439,11440],{},"Les logs systemd",[999,11442,11443],{},"journal.d",") : y a-t-il des erreurs ?",[19,11446,11447],{},"Ça crée un canal de monitoring indépendant. Si Vector crash, on le sait immédiatement via l'agent dédié.",[19,11449,11450],{},"Les alertes à poser dans Datadog pour avoir l'esprit tranquille :",[122,11452,11453,11459,11465,11471],{},[57,11454,11455,11458],{},[60,11456,11457],{},"Process down"," : le processus Vector n'est pas détecté depuis 2 minutes",[57,11460,11461,11464],{},[60,11462,11463],{},"Port 8443 injoignable"," : les agents ne peuvent plus envoyer leurs données",[57,11466,11467,11470],{},[60,11468,11469],{},"Disque buffer > 90%"," : risque de perte si le buffer sature",[57,11472,11473,11476],{},[60,11474,11475],{},"Absence de logs applicatifs"," : aucun log reçu depuis 15 minutes (coupure complète)",[10390,11478],{},[37,11480,11482],{"id":11481},"la-gestion-des-secrets","La gestion des secrets",[19,11484,11485],{},"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,11487,11488,11489,11492,11493,11496,11497,32],{},"Côté Vector, la clé est injectée via une variable d'environnement ",[999,11490,11491],{},"DD_API_KEY"," dans le fichier ",[999,11494,11495],{},"EnvironmentFile"," du service systemd. Le fichier est lisible uniquement par l'utilisateur système ",[999,11498,11499],{},"vector",[8898,11501,11503],{"className":10640,"code":11502,"language":10642,"meta":186,"style":186},"# vector.yaml — la clé n'est jamais en dur\nsinks:\n  dd_logs:\n    default_api_key: \"${DD_API_KEY}\"\n",[999,11504,11505,11510,11516,11522],{"__ignoreMap":186},[1506,11506,11507],{"class":8907,"line":8908},[1506,11508,11509],{"class":8911},"# vector.yaml — la clé n'est jamais en dur\n",[1506,11511,11512,11514],{"class":8907,"line":68},[1506,11513,11226],{"class":10649},[1506,11515,10653],{"class":8925},[1506,11517,11518,11520],{"class":8907,"line":79},[1506,11519,11233],{"class":10649},[1506,11521,10653],{"class":8925},[1506,11523,11524,11526,11528],{"class":8907,"line":90},[1506,11525,11262],{"class":10649},[1506,11527,10668],{"class":8925},[1506,11529,11267],{"class":8991},[8898,11531,11533],{"className":11362,"code":11532,"language":11364,"meta":186,"style":186},"# vector.default (EnvironmentFile systemd, chmod 600)\nDD_API_KEY=votre-clé-api\n",[999,11534,11535,11540],{"__ignoreMap":186},[1506,11536,11537],{"class":8907,"line":8908},[1506,11538,11539],{"class":8911},"# vector.default (EnvironmentFile systemd, chmod 600)\n",[1506,11541,11542,11544,11546],{"class":8907,"line":68},[1506,11543,11491],{"class":8925},[1506,11545,1679],{"class":8917},[1506,11547,11548],{"class":8991},"votre-clé-api\n",[19,11550,11551,11552,11554],{},"Côté agents Windows, la clé est un placeholder ",[999,11553,10623],{}," 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,11556,11557,11558,11561,11562,32],{},"Le certificat TLS privé est aussi protégé en ",[999,11559,11560],{},"chmod 600",", accessible uniquement par l'utilisateur ",[999,11563,11499],{},[10390,11565],{},[37,11567,11569],{"id":11568},"ce-que-jaurais-fait-différemment","Ce que j'aurais fait différemment",[19,11571,11572],{},"Quelques leçons tirées de cette intervention :",[19,11574,11575,11578],{},[60,11576,11577],{},"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,11580,11581,10369,11584,10369,11588,11591,11592,11594],{},[60,11582,11583],{},"Tester",[60,11585,11586],{},[999,11587,10567],{},[60,11589,11590],{},"dès le début."," Ce paramètre est le piège classique de la source ",[999,11593,10604],{}," dans Vector. Si je refais ce setup, c'est le premier truc que je vérifie.",[19,11596,11597,11600],{},[60,11598,11599],{},"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,11602,11603,10369,11606,11612,11613,11616],{},[60,11604,11605],{},"Documenter le",[60,11607,11608,11611],{},[999,11609,11610],{},"vector tap","****."," C'est la commande la plus utile pour débugger. ",[999,11614,11615],{},"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.",[10390,11618],{},[37,11620,11622],{"id":11621},"les-commandes-de-survie","Les commandes de survie",[19,11624,11625],{},"Pour ceux qui souhaitent se lancer avec un setup similaire, voici les commandes utilisées dans notre cas d'étude :",[8898,11627,11629],{"className":11362,"code":11628,"language":11364,"meta":186,"style":186},"# 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",[999,11630,11631,11636,11653,11657,11662,11669,11673,11678,11691,11695,11700,11726,11730,11735,11756,11760,11765],{"__ignoreMap":186},[1506,11632,11633],{"class":8907,"line":8908},[1506,11634,11635],{"class":8911},"# Santé de Vector\n",[1506,11637,11638,11641,11644,11647,11650],{"class":8907,"line":68},[1506,11639,11640],{"class":11376},"curl",[1506,11642,11643],{"class":8917}," \u003C",[1506,11645,11646],{"class":8991},"http:\u002F\u002F127.0.0.1:8686\u002Fhealt",[1506,11648,11649],{"class":8925},"h",[1506,11651,11652],{"class":8917},">\n",[1506,11654,11655],{"class":8907,"line":79},[1506,11656,9988],{"emptyLinePlaceholder":198},[1506,11658,11659],{"class":8907,"line":90},[1506,11660,11661],{"class":8911},"# Vue temps réel du pipeline (events in\u002Fout par composant)\n",[1506,11663,11664,11666],{"class":8907,"line":8985},[1506,11665,11499],{"class":11376},[1506,11667,11668],{"class":8991}," top\n",[1506,11670,11671],{"class":8907,"line":8998},[1506,11672,9988],{"emptyLinePlaceholder":198},[1506,11674,11675],{"class":8907,"line":9004},[1506,11676,11677],{"class":8911},"# Observer les événements en transit avant un sink\n",[1506,11679,11680,11682,11685,11688],{"class":8907,"line":9013},[1506,11681,11499],{"class":11376},[1506,11683,11684],{"class":8991}," tap",[1506,11686,11687],{"class":8921}," --inputs-of",[1506,11689,11690],{"class":8991}," dd_logs\n",[1506,11692,11693],{"class":8907,"line":9019},[1506,11694,9988],{"emptyLinePlaceholder":198},[1506,11696,11697],{"class":8907,"line":9041},[1506,11698,11699],{"class":8911},"# Vérifier les métriques d'envoi\n",[1506,11701,11702,11704,11707,11709,11712,11714,11717,11720,11723],{"class":8907,"line":9059},[1506,11703,11640],{"class":11376},[1506,11705,11706],{"class":8921}," -s",[1506,11708,11643],{"class":8917},[1506,11710,11711],{"class":8991},"http:\u002F\u002F127.0.0.1:8686\u002Fapi\u002Fv1\u002Fmetric",[1506,11713,1549],{"class":8925},[1506,11715,11716],{"class":8917},">",[1506,11718,11719],{"class":8917}," |",[1506,11721,11722],{"class":11376}," grep",[1506,11724,11725],{"class":8991}," component_sent_events_total\n",[1506,11727,11728],{"class":8907,"line":9083},[1506,11729,9988],{"emptyLinePlaceholder":198},[1506,11731,11732],{"class":8907,"line":9254},[1506,11733,11734],{"class":8911},"# Taille du buffer\n",[1506,11736,11737,11739,11741,11743,11745,11747,11749,11751,11753],{"class":8907,"line":9261},[1506,11738,11640],{"class":11376},[1506,11740,11706],{"class":8921},[1506,11742,11643],{"class":8917},[1506,11744,11711],{"class":8991},[1506,11746,1549],{"class":8925},[1506,11748,11716],{"class":8917},[1506,11750,11719],{"class":8917},[1506,11752,11722],{"class":11376},[1506,11754,11755],{"class":8991}," buffer_byte_size\n",[1506,11757,11758],{"class":8907,"line":9267},[1506,11759,9988],{"emptyLinePlaceholder":198},[1506,11761,11762],{"class":8907,"line":9286},[1506,11763,11764],{"class":8911},"# Valider la config avant de redémarrer\n",[1506,11766,11767,11769,11772,11775],{"class":8907,"line":9304},[1506,11768,11499],{"class":11376},[1506,11770,11771],{"class":8991}," validate",[1506,11773,11774],{"class":8921}," --config-dir",[1506,11776,11777],{"class":8991}," \u002Fpath\u002Fto\u002Fconfig\u002F\n",[10390,11779],{},[37,11781,11783],{"id":11782},"en-résumé","En résumé",[19,11785,11786,11787,11790],{},"Mettre Datadog sur des serveurs on-premise sans internet, c'est faisable.\n",[26,11788,10385],{"href":10381,"rel":11789},[30]," 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,11792,11793,11794,11796],{},"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. ",[999,11795,10700],{},", les certificats dans le bon magasin Windows, le buffer disque activé — ce sont ces petits paramètres qui font la différence.",[19,11798,11799,11802,11803,11807],{},[60,11800,11801],{},"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 ",[26,11804,10406],{"href":11805,"rel":11806},"https:\u002F\u002Fhoppr.tech\u002F",[30],", nous pouvons aisément nous rendre disponibles pour partager ce retour d'expérience et accompagner vos équipes sur des use cases similaires.",[10390,11809],{},[19,11811,11812],{},[787,11813,11814],{},"Stack utilisée : Vector 0.54, Datadog Agent v7.35+, Datadog .NET Tracer, OpenTelemetry SDK .NET, Debian 11, Windows Server.",[10293,11816,11817],{},"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":186,"searchDepth":68,"depth":68,"links":11819},[11820,11821,11822,11823,11828,11829,11833,11836,11837,11838,11839,11840],{"id":10394,"depth":68,"text":10395},{"id":10446,"depth":68,"text":10447},{"id":10537,"depth":68,"text":10538},{"id":10563,"depth":68,"text":11824,"children":11825},"Piège n°1 : store_api_key — un comportement par défaut trompeur",[11826,11827],{"id":10578,"depth":79,"text":10579},{"id":10633,"depth":79,"text":10634},{"id":10716,"depth":68,"text":10717},{"id":10861,"depth":68,"text":10862,"children":11830},[11831,11832],{"id":10880,"depth":79,"text":10881},{"id":11042,"depth":79,"text":11043},{"id":11209,"depth":68,"text":11210,"children":11834},[11835],{"id":11351,"depth":79,"text":11352},{"id":11391,"depth":68,"text":11392},{"id":11481,"depth":68,"text":11482},{"id":11568,"depth":68,"text":11569},{"id":11621,"depth":68,"text":11622},{"id":11782,"depth":68,"text":11783},"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",[11846,11848],{"id":213,"name":214,"image":11847,"linkedin":216,"x":206},"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":556,"name":557,"image":11849,"linkedin":559,"x":206},"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":10358,"description":11842},"blogs\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector\u002Findex",[231,11853,227,230,11854],"datadog","rex","uF-tlypPlJw2idZ8gEKE7VxOoVOmYA7yllsNB7B_Yuw",1776760469550]