{"id":675,"date":"2019-11-05T09:07:06","date_gmt":"2019-11-05T08:07:06","guid":{"rendered":"https:\/\/corsaire-consulting.fr\/blog\/?p=675"},"modified":"2019-11-05T09:07:06","modified_gmt":"2019-11-05T08:07:06","slug":"dynatrace-activegate","status":"publish","type":"post","link":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/2019\/11\/05\/dynatrace-activegate\/","title":{"rendered":"Dynatrace Activegate"},"content":{"rendered":"<p>J&rsquo;ai r\u00e9cemment effectu\u00e9 une mission chez un client visant \u00e0 mettre en place la supervision de plusieurs briques applicatives constituant un \u00e9co-syst\u00e8me complexe. La plupart de ces briques sont externes au syst\u00e8me d&rsquo;information du client et donc hors de sa responsabilit\u00e9.<\/p>\n<p>Il \u00e9tait toutefois n\u00e9cessaire de conna\u00eetre l&rsquo;\u00e9tat de sant\u00e9 de ces briques afin de pouvoir r\u00e9agir rapidement en cas de la d\u00e9faillance de l&rsquo;une d&rsquo;entre-elles.<\/p>\n<p>Le client disposant de <a href=\"https:\/\/www.dynatrace.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Dynatrace<\/a> (en mode SAAS) il a \u00e9t\u00e9 d\u00e9cid\u00e9 d&rsquo;utiliser le framework <a href=\"https:\/\/www.dynatrace.com\/support\/help\/setup-and-configuration\/dynatrace-activegate\/\" target=\"_blank\" rel=\"noopener noreferrer\">ActiveGate<\/a> pour interroger les diff\u00e9rentes briques et remonter leurs \u00e9tats sous forme de m\u00e9triques vers <a href=\"https:\/\/www.dynatrace.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Dynatrace<\/a>.<\/p>\n<p><!--more--><\/p>\n<h1>Architecture<\/h1>\n<p>L&rsquo;architecture est relativement simple et est constitu\u00e9e des \u00e9l\u00e9ments suivants :<\/p>\n<ul>\n<li>Un ensemble d&rsquo;applications internes ou externes au syst\u00e8me d&rsquo;information, accessible via internet et qui expose leur \u00e9tat de sant\u00e9 sous une forme ou sous une autre (ping, page html, API XML ou JSON, etc&#8230;)<\/li>\n<li>Une infrastructure Dynatrace, en mode SAAS ou en mode manag\u00e9.<\/li>\n<li>Une VM Linux \u00e9quip\u00e9e du moteur de Plugins <a href=\"https:\/\/www.dynatrace.com\/support\/help\/setup-and-configuration\/dynatrace-activegate\/\" target=\"_blank\" rel=\"noopener noreferrer\">ActiveGate<\/a>.<\/li>\n<li>Un ensemble de plugins d\u00e9velopp\u00e9s en Python (3.6.6 actuellement) qui s&rsquo;appuient sur le SDK Dynatrace ActiveGate.<\/li>\n<\/ul>\n<h1>Fonctionnement<\/h1>\n<p>A chaque minute, Dynatrace interroge les plugins ActiveGate. Chaque plugin interroge \u00e0 son tour l&rsquo;application qu&rsquo;il doit surveiller, en d\u00e9termine l&rsquo;\u00e9tat et renvoie l&rsquo;information vers Dynatrace sous la forme de m\u00e9triques.<\/p>\n<figure id=\"attachment_684\" aria-describedby=\"caption-attachment-684\" style=\"width: 522px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-684\" src=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/11\/dyantrace-activegate-1-300x135.png\" alt=\"Architecture ActiveGate\" width=\"522\" height=\"235\" srcset=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/11\/dyantrace-activegate-1-300x135.png 300w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/11\/dyantrace-activegate-1-768x346.png 768w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/11\/dyantrace-activegate-1-1024x462.png 1024w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/11\/dyantrace-activegate-1.png 1280w\" sizes=\"auto, (max-width: 522px) 100vw, 522px\" \/><figcaption id=\"caption-attachment-684\" class=\"wp-caption-text\">Architecture ActiveGate<\/figcaption><\/figure>\n<h1>Retour d&rsquo;exp\u00e9rience<\/h1>\n<h2>Documentation<\/h2>\n<p>La documentation ActiveGate est accessible <a href=\"https:\/\/www.dynatrace.com\/support\/help\/setup-and-configuration\/dynatrace-activegate\/\" target=\"_blank\" rel=\"noopener noreferrer\">ici<\/a>.<\/p>\n<p>Personnellement je pense qu&rsquo;elle manque de profondeur et de d\u00e9tails sur les concepts et APIs expos\u00e9s.<\/p>\n<h2>Installation et prise en main<\/h2>\n<p>Le SDK est t\u00e9l\u00e9chargeable directement depuis l&rsquo;environnement SAAS Dynatrace. Il est pr\u00e9-configur\u00e9 de mani\u00e8re \u00e0 ce qu&rsquo;il ne soit nullement n\u00e9cessaire de lui indiquer par exemple l&rsquo;URL de Dynatrace pour que la communication se fasse avec ActiveGate. L&rsquo;installation est r\u00e9alis\u00e9e \u00e0 l&rsquo;aide d&rsquo;un script Shell t\u00e9l\u00e9chargeable \u00e9galement.<\/p>\n<p>L&rsquo;installation est donc facile et ne n\u00e9cessite aucune configuration post\u00e9rieure. Une fois install\u00e9e, l&rsquo;environnement ActiveGate est directement op\u00e9rationnel.<\/p>\n<h2>D\u00e9veloppement, d\u00e9ploiement et mise au point<\/h2>\n<p>Le d\u00e9veloppement des plugins se fait avec Python 3.6.6 \u00e0 l&rsquo;heure o\u00f9 cet article est \u00e9crit. Il faut respecter ce pr\u00e9-requis sous peine de dysfonctionnement des plugins.<\/p>\n<p>Le d\u00e9veloppement des plugins \u00e0 l&rsquo;aide du SDK ActiveGate est ensuite assez facile et ne pr\u00e9sente pas de grande difficult\u00e9.<\/p>\n<p>Le packaging des plugins s&rsquo;effectue \u00e0 l&rsquo;aide d&rsquo;un script Shell fournit avec le SDK AcivateGate. Le r\u00e9sultat obtenu est un fichier zip qui sera ensuite d\u00e9ploy\u00e9. Rien \u00e0 dire de particulier sur cette partie.<\/p>\n<p>La mise au point se fait \u00e0 l&rsquo;aide d&rsquo;un <a href=\"https:\/\/www.dynatrace.com\/support\/help\/extend-dynatrace\/plugins\/activegate-plugins\/troubleshooting\/activegate-plugin-simulator\/\" target=\"_blank\" rel=\"noopener noreferrer\">simulateur inclus dans le SDK<\/a>. Il permet de \u00ab\u00a0simuler\u00a0\u00bb le fonctionnement du moteur de plugins ActiveGate sans avoir \u00e0 d\u00e9ployer le plugin. Le client n&rsquo;ayant qu&rsquo;un seul environnement de Production et pas de tenant de test il \u00e9tait indispensable de pouvoir tester les plugins avant tout d\u00e9ploiement.<\/p>\n<p>Lors de mes d\u00e9veloppements j&rsquo;ai mis en \u00e9vidence plusieurs fois des \u00e9carts de comportement entre le simulateur et le moteur de plugins. Le simulateur montrait un fonctionnement correcte du plugin alors que celui-ci dysfonctionnait une fois d\u00e9ploy\u00e9 dans le SAAS. En cons\u00e9quence, il faut attendre le d\u00e9ploiement en production pour d\u00e9tecter d&rsquo;\u00e9ventuelles anomalies. C&rsquo;est le tr\u00e8s mauvais point du SDK selon moi.<\/p>\n<p>J&rsquo;ai remont\u00e9 ce probl\u00e8me majeur au support Dynatrace qui m&rsquo;a garanti se pencher sur la question. Wait and see.<\/p>\n<p>J&rsquo;ai \u00e9galement \u00e9t\u00e9 confront\u00e9 \u00e0 un probl\u00e8me avec la gestion des logs au sein des plugins. Le SDK souffre d&rsquo;un bug depuis pas mal de temps manifestement qui n&rsquo;est toujours pas corrig\u00e9. Dynatrace est au courant du probl\u00e8me depuis longtemps mais n&rsquo;a toujours pas propos\u00e9 de solution. En r\u00e9sum\u00e9, il n&rsquo;est pas possible d&rsquo;utiliser des logs de niveau DEBUG au sein des plugins ; Il faut g\u00e9n\u00e9rer des logs de niveau INFO et configurer le logger au niveau DEBUG ; Cela donne un plugin qui fonctionne en permanence en mode DEBUG et qui donc peut g\u00e9n\u00e9rer un volume tr\u00e8s important d&rsquo;informations, surtout avec une sollicitation toutes les minutes. Ce probl\u00e8me illustre \u00e9galement le probl\u00e8me entre le simulateur et le moteur de plugins : Le logger fonctionne parfaitement sous le simulateur.<\/p>\n<p>Ce probl\u00e8me est tr\u00e8s impactant lors de la recherche d&rsquo;anomalie sur le fonctionnement\u00a0 des plugins.<\/p>\n<p>Le <a href=\"https:\/\/www.dynatrace.com\/support\/help\/shortlink\/deploy_custom_plugin\" target=\"_blank\" rel=\"noopener noreferrer\">d\u00e9ploiement des plugins<\/a> se fait tr\u00e8s facilement \u00e0 l&rsquo;aide de la console Dynatrace. Il se fait en 2 \u00e9tapes :<\/p>\n<ul>\n<li>Upload et enregistrement du plugin dans l&rsquo;environnement Dynatrace<\/li>\n<li>Cr\u00e9ation et configuration des end-points, c&rsquo;est \u00e0 dire des VMs ActiveGate<\/li>\n<\/ul>\n<h2>Fonctionnement en production<\/h2>\n<p>Le probl\u00e8me de la configuration des loggers expliqu\u00e9 dans le chapitre pr\u00e9c\u00e9dent constitue le principal dysfonctionnement du moteur selon moi. C&rsquo;est dommage car ActiveGate permet de mettre \u00e0 jour la configuration du plugin tr\u00e8s facilement depuis la console Dynatrace. Il est donc possible th\u00e9oriquement de passer d&rsquo;un niveau de log INFO \u00e0 DEBUG <strong>tr\u00e8s facilement et \u00e0 chaud<\/strong> afin d&rsquo;obtenir une meilleure visibilit\u00e9 du fonctionnement du plugin en cas d&rsquo;anomalie.<\/p>\n<p>Il est regrettable \u00e9galement que la fr\u00e9quence des appels depuis Dynatrace vers les plugins ActiveGate fix\u00e9e \u00e0 1 minute ne puisse \u00eatre modifi\u00e9e. Si les services supervis\u00e9s ne peuvent subir une fr\u00e9quence aussi \u00e9lev\u00e9e il faut g\u00e9rer la situation au niveau du code Python du plugin.<\/p>\n<h2>Support et forums de discussion<\/h2>\n<p>J&rsquo;ai sollicit\u00e9 le <a href=\"https:\/\/answers.dynatrace.com\/spaces\/482\/dynatrace-open-qa.html\" target=\"_blank\" rel=\"noopener noreferrer\">forum de discussion Dynatrace<\/a> et le <a href=\"https:\/\/www.dynatrace.com\/support\/contact-support\/\" target=\"_blank\" rel=\"noopener noreferrer\">support<\/a> lors des probl\u00e8mes rencontr\u00e9s lors de la mise au point des plugins. Les retours sont plut\u00f4t rapides et g\u00e9n\u00e9ralement de bonne qualit\u00e9. Ma seule objection concerne le probl\u00e8me du simulateur auquel le support m&rsquo;a r\u00e9pondu que le client devrait disposer d&rsquo;un tenant de tests. Et donc payer une souscription suppl\u00e9mentaire alors que le SDK fournit normalement les outils pour s&rsquo;en passer.<\/p>\n<h2>Cycle de vie du SDK ActiveGate<\/h2>\n<p>Le rythme de sortie des releases du SDK ActiveGate est soutenu. Dynatrace publie une <a href=\"https:\/\/www.dynatrace.com\/support\/help\/shortlink\/release_notes#activegate\" target=\"_blank\" rel=\"noopener noreferrer\">release<\/a> au d\u00e9but de chaque mois. Mon conseil est de suivre les sorties des nouvelles versions de mani\u00e8re assez serr\u00e9e.<\/p>\n<figure id=\"attachment_691\" aria-describedby=\"caption-attachment-691\" style=\"width: 455px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.dynatrace.com\/support\/help\/shortlink\/release_notes#activegate\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-691 \" src=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/11\/ActiveGate-Releases-300x188.png\" alt=\"Releases ActiveGate\" width=\"455\" height=\"285\" srcset=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/11\/ActiveGate-Releases-300x188.png 300w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/11\/ActiveGate-Releases.png 676w\" sizes=\"auto, (max-width: 455px) 100vw, 455px\" \/><\/a><figcaption id=\"caption-attachment-691\" class=\"wp-caption-text\">Releases ActiveGate<\/figcaption><\/figure>\n<p>La documentation \u00e9volue \u00e9galement pas mal, ce qui est une bonne chose.<\/p>\n<h1>Conclusion<\/h1>\n<p>Le bilan est tr\u00e8s positif en terme de fonctionnalit\u00e9s attendues et dans leur mise en \u0153uvre. Les probl\u00e8mes de mise au point et de fonctionnement d\u00e9crits dans cet article assombrissent toutefois un peu le tableau. Nul doute que ces probl\u00e8mes seront r\u00e9solus rapidement par les \u00e9quipes de d\u00e9veloppement d&rsquo;ActiveGate.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai r\u00e9cemment effectu\u00e9 une mission chez un client visant \u00e0 mettre en place la supervision de plusieurs briques applicatives constituant un \u00e9co-syst\u00e8me complexe. La plupart de ces briques sont externes au syst\u00e8me d&rsquo;information du client et donc hors de sa responsabilit\u00e9. Il \u00e9tait toutefois n\u00e9cessaire de conna\u00eetre l&rsquo;\u00e9tat de sant\u00e9 de ces briques afin de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":678,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[103],"tags":[105,104,106,26],"class_list":["post-675","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-supervision","tag-activegate","tag-dynatrace","tag-python","tag-supervision"],"_links":{"self":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/675","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=675"}],"version-history":[{"count":17,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/675\/revisions"}],"predecessor-version":[{"id":697,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/675\/revisions\/697"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/media\/678"}],"wp:attachment":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}