Appstats pour Java (Environnement d'exécution Java 7 uniquement)

Le SDK Java 8 inclut la bibliothèque Appstats utilisée pour profiler les performances RPC (Appel de procédure à distance) de votre application. Un RPC App Engine est un appel réseau aller-retour entre votre application et une API de service App Engine. Tous les appels d'API suivants sont des appels RPC :

  • Appels Datastore tels que DatastoreService.get(), DatastoreService.put() ou DatastoreService.query().
  • Appels Memcache tels que MemcacheService.get() ou MemcacheService.getAll().
  • Appels URL Fetch
  • Appels Mail

L'optimisation ou le débogage d'une application évolutive peut constituer un défi, car de nombreux problèmes risquent de générer des performances médiocres ou des coûts inattendus. Ces problèmes sont très difficiles à résoudre à l'aide des sources d'information habituelles, telles que les journaux ou les statistiques de durée des requêtes. La plupart des requêtes d'une application passent la majorité de leur temps à attendre que les appels réseau se terminent pour pouvoir être traitées.

Pour que votre application fonctionne rapidement, vous devez pouvoir répondre aux questions suivantes :

  • Votre application effectue-t-elle des appels RPC inutiles ?
  • Devrait-elle mettre en cache des données au lieu de répéter les appels RPC afin d'obtenir ces mêmes données ?
  • Votre application fonctionnerait-elle mieux si plusieurs requêtes étaient exécutées en parallèle plutôt qu'en série ?

La bibliothèque Appstats vous aide à répondre à ces questions et à vérifier que votre application utilise les appels RPC de la manière la plus efficace possible, tout en vous permettant de les profiler. Appstats vous permet de suivre tous les appels RPC pour une requête donnée et de générer des rapports sur la durée et le coût de chaque appel.

(Pour en savoir plus sur la gestion des coûts liés aux applications, consultez l'article Gérer l'utilisation des ressources d'une application.)

Regardez une vidéo de démonstration.

Configurer

Il n'y a rien à importer ni à installer pour commencer à utiliser Appstats. Vous devez simplement configurer votre application, puis redéployer et accéder à la console Appstats comme décrit dans les étapes ci-dessous. La bibliothèque Appstats s'occupe du reste.

Dépendances

Vous devez ajouter la dépendance appengine-api-labs à votre projet. Voici une façon de procéder dans le fichier Maven pom.xml :

<dependency>
 <groupId>com.google.appengine</groupId>
 <artifactId>appengine-api-labs</artifactId>
 <version>1.9.76</version>
 <!-- <scope>test</scope> -->
</dependency>

1. Installer l'enregistreur d'événements

Appstats recueille des informations sur chaque requête à l'aide d'un filtre servlet, une classe proposée par le SDK. Le filtre s'installe sur les requêtes que vous souhaitez surveiller en ajoutant les éléments <filter> et <filter-mapping> au descripteur de déploiement (web.xml).

Pour installer le filtre servlet, ajoutez une section semblable à ce qui suit dans l'élément de premier niveau du fichier web.xml :

<pre suppresswarning="yes" class="prettyprint">
<filter>
  <filter-name>appstats</filter-name>
   <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>appstats</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
</pre>

Cette section installe le filtre pour toutes les URL, avec une valeur <url-pattern> de /*. (Cela inclut la console Web Appstats décrite ci-dessous, que vous préférez peut-être exclure de l'enregistrement.) Vous pouvez définir un format différent si vous souhaitez limiter Appstats aux URL correspondant à un format donné.

2. Définir le chemin d'accès à la console

Vous pouvez accéder à la console Appstats en entrant une URL pour votre application dans un navigateur Web. La configuration de cette console s'effectue dans le cadre de votre application, à l'aide d'une classe servlet fournie par le SDK.

Pour configurer la console au niveau du chemin de l'URL /appstats/, sécurisé afin que seuls les administrateurs de l'application puissent y accéder, ajoutez ce qui suit dans l'élément de premier niveau de votre fichier web.xml :

<pre suppresswarning="yes" class="prettyprint">
<servlet>
  <servlet-name>appstats</servlet-name>
  <servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>appstats</servlet-name>
  <url-pattern>/appstats/*</url-pattern>
</servlet-mapping>

<security-constraint>
  <web-resource-collection>
    <web-resource-name>appstats</web-resource-name>
    <url-pattern>/appstats/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>
</pre>

3. Configuration facultative

Journalisation

La classe AppstatsFilter peut être configurée de façon à écrire des informations propres à la requête dans les journaux d'application. Pour activer cette journalisation, modifiez l'élément filter créé à l'étape 1 en ajoutant le paramètre logMessage :

<pre suppresswarning="yes" class="prettyprint">
<filter>
  <filter-name>appstats</filter-name>
  <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
  <init-param>
    <param-name>logMessage</param-name>
    <param-value>Appstats available: /appstats/details?time={ID}</param-value>
  </init-param>
</filter>
</pre>

La valeur textuelle de param-value est ajoutée au journal pour chaque requête traitée par le filtre et {ID} est remplacé par l'ID de la requête. Le texte de cet exemple fournit un chemin d'accès aux détails Appstats concernant la requête.

Ces entrées de journal sont écrites au niveau "INFO". Vous devez donc également définir le niveau de journalisation sur "INFO". Vous pouvez définir cela spécifiquement pour la classe AppstatsFilter en ajoutant ce qui suit au fichier logging.properties :

<pre suppresswarning="yes" class="prettyprint">
com.google.appengine.tools.appstats.AppstatsFilter.level = INFO
</pre>

Afficher les coûts

AppStats peut suivre le coût et la durée des RPC. Si votre application est assez rapide, mais coûte plus cher que prévu, recherchez les opérations qui sont plus coûteuses que prévu. Pour activer le suivi des coûts, définissez le paramètre calculateRpcCosts de votre filtre appstats sur true :

<pre suppresswarning="yes" class="prettyprint">
<filter>
  <filter-name>appstats</filter-name>
  <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
  <init-param>
    <param-name>calculateRpcCosts</param-name>
    <param-value>true</param-value>
  </init-param>
</filter>
</pre>

Accès public

Par défaut, seuls les administrateurs d'application authentifiés peuvent accéder à la console Appstats. Pour autoriser l'accès public à la console, vous devez effectuer les deux opérations suivantes :

  • Modifiez l'élément servlet de la classe AppstatsServlet créée à l'étape 2 de façon à inclure le paramètre requireAdminAuthentication défini sur false :

    <pre suppresswarning="yes"  class="prettyprint">
    <servlet>
      <servlet-name>appstats</servlet-name>
      <servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>
      <init-param>
        <param-name>requireAdminAuthentication</param-name>
        <param-value>false</param-value>
      </init-param>
    </servlet>
    </pre>
    
  • Supprimez l'élément security-constraint créé à l'étape 2.

4. Tester Appstats depuis le serveur de développement

Vous pouvez tester votre configuration Appstats avec le serveur de développement :

  • Si vous utilisez Eclipse et que vous n'avez pas modifié le port par défaut, accédez à la console à l'adresse suivante : http://localhost:8888/appstats/.
  • Si vous utilisez la commande dev_appserver pour démarrer le serveur et que vous n'avez pas modifié le port par défaut, accédez à la console à l'adresse suivante : http://localhost:8080/appstats/.

5. Déployer

Une fois satisfait de la configuration d'Appstats, déployez votre application. Accédez à la console à l'adresse suivante : http://your_app_id.appspot.com/appstats.

Visite guidée de la console Appstats

La console Appstats fournit des informations générales sur les appels RPC effectués, les chemins d'URL demandés, l'historique des requêtes récentes et le détail des requêtes individuelles :

  • Le tableau RPC Stats (Statistiques RPC) affiche des statistiques pour chaque type d'appel RPC effectué par votre application. Cliquer sur le bouton Plus permet de développer l'entrée afin d'afficher une répartition des appels RPC par requête de chemin :

    capture d'écran

  • Le tableau Path Stats (Statistiques de chemin) affiche des statistiques pour chaque requête de chemin envoyée à votre application. Cliquer sur le bouton Plus permet de développer l'entrée afin d'afficher une répartition des requêtes de chemin par RPC :

    capture d'écran

    Si vous avez activé la fonctionnalité de Suivi des coûts d'API, les coûts s'afficheront également.

  • Le tableau Requests History (Historique des requêtes) affiche les données relatives aux requêtes individuelles. Cliquer sur un bouton Plus permet de développer l'entrée afin d'afficher une répartition par RPC. Cliquer sur un lien de requête permet d'afficher une chronologie pour la requête, y compris la durée d'un appel RPC individuel :

    capture d'écran

  • Le graphique Timeline (Chronologie) des appels RPC indique le moment auquel des appels RPC spécifiques ont été passés et le temps nécessaire au traitement des requêtes. La barre RPC Total (Total RPC) indique la durée totale d'attente des appels RPC et la barre Grand Total indique la durée totale consacrée au traitement d'une requête. Comme vous pouvez le constater dans la chronologie ci-dessous, la majorité du temps a été consacrée aux appels RPC. Cette situation est fréquente. Les autres onglets contiennent des informations supplémentaires sur la requête. Pour l'analyse des performances de votre application, il est essentiel de comprendre l'impact des appels RPC sur son temps de réponse.

    capture d'écran

Fonctionnement

Le filtre servlet d'Appstats s'ajoute au framework d'appel de procédure à distance qui sous-tend les API de services App Engine. Il enregistre des statistiques pour tous les appels d'API effectués pendant l'exécution du gestionnaire de requêtes, puis stocke les données dans Memcache, en utilisant un espace de noms __appstats__. Appstats conserve les statistiques des 1 000 requêtes les plus récentes (environ). Ces données se composent d'un récapitulatif d'environ 200 octets chacun et de détails pouvant atteindre 100 Ko.

La version Java d'Appstats utilise des valeurs et des comportements fixes en matière de stockage des données dans Memcache et le datastore. (Il est impossible de configurer ces éléments, mais cette configuration est possible dans la version Python d'Appstats).

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Java 8