/ android

Dynatrace @ PagesJaunes

Application Performance Management avec Dynatrace

Dynatrace est une solution d’APM (Application Performance Management) qui se positionne en tant que leader reconnu sur ce marché. Très dynamique et proactif sur les technologies d’avenir (cloud, containeurs et micro-services, intelligence artificielle, agents Full Stack…), Dynatrace est leader du Quadrant Gartner depuis 7 ans.

Chez PagesJaunes, nous utilisons Dynatrace depuis plusieurs années pour suivre les KPI de performances techniques et business en utilisant une instrumentation bout en bout (des téléphones mobiles jusqu’aux serveurs dans nos datacenters). Cela nous offre une mesure précise des actions et des temps passés sur les téléphones, les couches réseau opérateurs et les transactions sur les serveurs dans nos datacenters.

User Experience Management (UEM)

Nous utilisons Dynatrace non seulement sur les serveurs, mais également dans les applications ios et android pour mesurer le ressenti réel sur le terrain, vécu par nos vrais utilisateurs :
schema1
Ce monitoring UEM (User Experience Management) nous procure une vision bout en bout englobant les actions et ressentis des performances coté utilisateur jusqu’aux détails coté datacenter en passant par la couche de transport des données. Sur le schéma précédant, la partie datacenter PagesJaunes est fortement schématisée, il faut plutôt se l’imaginer comme ci-dessous, reflétant une architecture à plusieurs niveaux avec des serveurs dédiés à différentes tâches (load balancing, cache, orchestration, apis, stockage de données,…)
schema2

Instrumentation du code

Sur la partie applicative (iOS et android), l’instrumentation consiste à incorporer une bibliothèque Dynatrace dédiée dans les exécutables ipa et apk. Cette bibliothèque permet soit une instrumentation automatique du code (par injection), soit une instrumentation manuelle. Il faut alors désigner plus finement des sections de code avec des marqueurs.

C’est cette dernière option que nous avons choisie chez PagesJaunes, car elle nous permet de limiter nos mesures très précisément à certains parcours dans l’application.
Une mesure se fait assez simplement dans le code en utilisant un singleton fourni par Dynatrace pour créer une Action via enterAction(). Lorsque cette action est terminée, on le signale via un appel à leaveAction(). Optionnellement on peut également envoyer des informations auxiliaires (des raisons d’erreur, des données personnalisables,…)

DTXAction searchAction = Dynatrace.enterAction("search");
try {
     [… section à mesurer …]    
     searchAction.reportValue("userdata", ud);     
} catch (Exception e) {    
     [… traitement d’erreur …]         
     searchAction.reportError("failed", e);      
}   
searchRequestAction.leaveAction();

Dynatrace permet également de mesurer les temps d’exécution de tous les appels internet sortants de l’application, ce qui permet d’avoir une idée précise sur le temps que nous mettons pour atteindre nos partenaires (pour l’affichage des cartes, les statistiques, les connexions à Facebook etc…) ainsi que bien évidement nos propres datacenters. Quand on a des SLA (Service Level Agreement) avec des partenaires, il peut s'avérer bien utile de connaître les performances de ces derniers. Un histogramme des temps de réponses nous donne la réponse en quelques clics, comme dans l'exemple ci-dessous:
response-time-histogram-1

La corrélation application <-> serveur

Comme nous venons de le voir, Dynatrace permet d'instrumenter les appels HTTPS sortants de nos applications android et iOS, et c’est sur ce dernier point que la solution dévoile tout son potentiel. Puisque nous instrumentons également les serveurs dans nos datacenters avec Dynatrace, il est capable de mettre en relation les appels sortants des téléphones avec les transactions entrantes dans le datacenter. Cela nous donne une vision globale des transactions, du téléphone jusqu’à leur continuité sur nos serveurs.

Gain de temps en diagnostic

Cette correlation nous permet de remonter rapidement à la source d’un incident technique et trouver les causes connexes, autant par nos équipes d’exploitation, nos architectes que par nos développeurs. Comme la transaction est visible de bout en bout, nous pouvons faire des croisements de critères pour répondre à des questions du genre :

  • quelles versions de nos applications utilisent quels APIs,
  • quelles versions d’OS sur nos applications provoquent le plus de crashes,
  • quel est le pourcentage des utilisateurs qui utilisent tel et tel matériel sous tel et tel OS, etc.
    Pouvoir remonter à la cause des soucis (faire un drill-down dans le jargon Dynatrace) est devenu un outil indispensable pour très rapidement remonter à la source d’un souci rencontré. Ci-dessous, un exemple de tableau de bord qui colorie différents codes retours de certaines API et permet ainsi de suivre le comportement du système par exemple pendant une mise en production ou une investigation par les équipes de recette.
    dashboard-contributif

Amélioration du service rendu aux métiers

Dynatrace permet également de construire des mesures métiers, appelées Business Transactions, en combinant des déclencheurs comme l'appel d'une méthode Java spécifique avec des filtres et critères, voire même en imbriquant des Business Transactions ou en croisant ces Business Transactions entre elles. Cela nous a permis de construire des requêtes très spécifiques à notre métier, qui permettent de voir en temps réel quelles types de recherche (par nom, lieu, activité…) ont été faites par nos utilisateurs lors d'une recherche PagesJaunes.

Avec la mise en place des mesures plus précises sur nos serveurs, nous proposons aux métiers (product owners, search,…) des mesures terrain sur ces indicateurs métiers. Par exemple, ils peuvent mesurer la nature et la typologie des recherches effectuées par nos utilisateurs, le nombre et la qualité des réponses, les appels au contributif, les dépots photos, avec la possibilité de les croiser selon différents critères.
Des dashboards spécifiques sont à disposition des équipes Search et Marketing, promouvant ainsi une approche collaborative cross-équipe.
Ces dashboards HTML en libre-service permettent d’accéder facilement à des courbes et indicateurs, sur des KPI autant techniques (p.ex. temps de démarrage des couches techniques et SDK sur un téléphone mobile) que business (p.ex. performance et distribution du parc des opérateurs mobiles, qualité réseau, taux d’adoption des versions, impact de campagnes de push,…)
dashboard-HTML-ios-2

Amélioration continue et campagnes de performances

Nous utilisons Dynatrace également pour mesurer finement les performances de nos applications dans une approche d’amélioration continue :
devops-optimisation
En comparant par exemple les performances de démarrage d’une application en version n avec sa version n-1, nous pouvons détecter une dérive des performances suite à des regressions, ou des ajouts fonctionnels (nouveaux SDK,…) dans les applications, ce qui déclenchera des mesures d’optimisation pour la version n+1. Actuellement, nous effectuons ce type de campagnes lors des mises en production, mais nous souhaitons à l’avenir inclure ces comparatifs plus en amont de la chaine de fabrication, idéalement dans notre chaine d’intégration continue.

Prendre des décisions en connaissance de causes

Les dashboards de performances mobiles fournissent aux équipes techniques les informations indispensables pour prendre des décisions (efforts à entreprendre dans les futures releases, connaissance des conditions des utilisateurs, état réel du service,…) pour répondre aux enjeux forts que pose notamment le temps de démarrage d’une application mobile. Pour cela, nous utilisons beaucoup les représentations centiles comme dans le dashboard ci-dessous.
performance-demarrage-ios-1
La lecture est simple : on commence à chercher un pourcentage en bas sur l’axe des abscisses, on remonte à la verticale jusqu’à croiser la courbe des données, et on lit le résultat à gauche sur l’axe des ordonnées. Par exemple dans la courbe ci-dessous, en partant à 70% on peut lire :

Pour 70% de nos utilisateurs, l’application a démarré et propose la saisie de la question en moins de 3 secondes pour tout le parc Apple sauf les (anciens) iPhones en version 4s

Si on se concentre uniquement sur les versions récentes des téléphones (iPhone 6 et plus récents) la situation est encore plus réjouissante : la version actuelle démarre en moins de 2 secondes pour la majorité des utilisateurs.

Quels sont les futurs chantiers ?

Une nouvelle génération de solution Dynatrace SaaS disponible depuis 2016 chez Dynatrace va nous permettre d’aller vers de nouvelles technologies Cloud, Microservices, Containers etc. tout en capitalisant sur notre expérience. Dynatrace est partenaire stratégique avec les acteurs majeurs du cloud : Microsoft Azure, Amazon Web Services, Google Cloud etc. Le passage au SaaS est un chantier ambitieux que nous allons entamer en 2018.
Nous souhaitons également incorporer Dynatrace dans la chaîne de continuous integration, car c’est bien connu :

plus on détecte une dégradation/anomalie tôt, moins ça coute cher de la réparer.

Pascal Specht est architecte technique au sein de PagesJaunes et s'occupe plus particulièrement des aspects performance et sécurité.

separator