Appstats para Java (somente ambiente de execução do Java 7)

O SDK para Java 8 inclui a biblioteca do Appstats usada para avaliar o desempenho da Chamada de procedimento remoto (RPC, na sigla em inglês) de seu aplicativo. Uma RPC do App Engine é uma chamada de rede de ida e volta entre seu aplicativo e uma App Engine Service API. Por exemplo, todas estas chamadas da API são chamadas RPC:

  • Chamadas do Datastore, como DatastoreService.get(), DatastoreService.put() ou DatastoreService.query().
  • Chamadas do Memcache, como MemcacheService.get() ou MemcacheService.getAll().
  • chamadas de Busca de URL.
  • chamadas de correio

Otimizar ou depurar um aplicativo escalonável pode ser um desafio porque vários problemas podem causar baixo desempenho ou custos inesperados. Esses problemas são muito difíceis de depurar com as fontes de informações comuns, como registros ou estatísticas de tempo de solicitação. A maioria das solicitações de aplicativos passa a maior parte do tempo esperando que as chamadas de rede sejam concluídas como parte do processo de atender a solicitação.

Para manter seu aplicativo rápido, você precisa saber disto:

  • Seu aplicativo está fazendo chamadas RPC desnecessárias?
  • Ele armazena dados em cache em vez de fazer chamadas RPC repetidas para conseguir os mesmos dados?
  • Seu aplicativo funcionará melhor se várias solicitações forem executadas em paralelo em vez de em série?

A biblioteca do Appstats ajuda você a responder essas perguntas e verificar se o aplicativo está usando chamadas RPC da maneira mais eficiente ao permitir que você defina perfis de suas chamadas RPC. O Appstats permite rastrear todas as chamadas RPC de determinada solicitação e relata o tempo e o custo de cada chamada.

Para mais informações sobre como gerenciar o custo do aplicativo, consulte o artigo Como gerenciar o uso de recursos do aplicativo.

Assistir a uma demonstração em vídeo.

Configurar

Para começar a usar o Appstats, não é necessário fazer o download nem a instalação dele. A única exigência é configurar seu aplicativo, reimplantá-lo e acessar o console do Appstats de acordo com a descrição contida nas etapas abaixo. A biblioteca do Appstats cuida do restante.

Dependências

Você precisa adicionar a dependência appengine-api-labs ao seu projeto. Veja uma maneira de fazer isso no arquivo pom.xml do Maven:

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

1. Instalar o gravador de eventos

As informações de cada solicitação são reunidas pelo Appstats usando um filtro de servlet, uma classe fornecida pelo SDK. Instale o filtro nas solicitações que quiser monitorar adicionando os elementos <filter> e <filter-mapping> ao descritor de implantação (web.xml).

Para instalar o filtro de servlet, adicione uma seção semelhante à seguinte no elemento de nível superior do seu arquivo 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>

Isso instala o filtro para todos os URLs, com <url-pattern> de /*. Isso inclui o console do Appstats baseado na Web discutido abaixo, que você pode preferir excluir da gravação. Você pode especificar um padrão diferente para limitar o Appstats a URLs que correspondam ao padrão.

2. Definir o caminho do console

O console do Appstats é acessado por meio de um URL para seu aplicativo em um navegador da Web. Você configura esse console como parte de seu aplicativo usando uma classe servlet fornecida pelo SDK.

Para configurar o console no caminho do URL /appstats/, protegido para que apenas os administradores de aplicativos possam acessá-lo, adicione o seguinte código ao elemento de nível superior do seu arquivo 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. Configuração opcional

Como gerar registros

É possível configurar a classe AppstatsFilter para gravar informações específicas de solicitações em registros de aplicativos. Para ativar a geração de registros, modifique o elemento filter criado na etapa 1 para incluir o parâmetro 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>

O valor de texto de param-value é anexado ao registro para cada solicitação processada pelo filtro, com {ID} substituído pelo código da solicitação. O texto neste exemplo fornece um caminho para os detalhes do Appstats referentes à solicitação.

Essas entradas de registro são escritas no nível "INFO", então é necessário que você configure também o nível de registro para "INFO". Isso pode ser definido especificamente para a classe AppstatsFilter, adicionando isto ao seu arquivo logging.properties :

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

Como exibir o custo

O AppStats pode acompanhar o custo da RPC e o tempo. Se o aplicativo é rápido o suficiente, mas é mais caro do que o esperado, procure operações que custem mais do você espera. Para ativar o rastreamento de custos, defina o parâmetro calculateRpcCosts de seu filtro appstats como 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>

Acesso público

Por padrão, somente os administradores de aplicativos autenticados podem acessar o console do Appstats. Para permitir o acesso público ao console, você precisa fazer duas coisas:

  • Modificar o elemento servlet da classe AppstatsServlet criado na etapa 2 para incluir o parâmetro requireAdminAuthentication configurado como 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>
    
  • Remover o elemento security-constraint criado na etapa 2.

4. Testar o Appstats pelo servidor de desenvolvimento

Você pode testar a configuração do Appstats com o servidor de desenvolvimento:

5. Implantar

Quando você estiver satisfeito com a configuração do Appstats, implante o aplicativo. Acesse o console em http://your_app_id.appspot.com/appstats.

Um tour pelo console do Appstats

O console do Appstats fornece informações gerais sobre chamadas RPC feitas, caminhos de URL solicitados, histórico de solicitações recentes e detalhes de solicitações individuais:

  • A tabela RPC Stats mostra estatísticas para cada tipo de RPC feita pelo aplicativo. Clique em um botão com o sinal de adição para expandir a entrada e exibir um detalhamento por solicitação de caminho da RPC:

    captura de tela

  • A tabela Path Stats mostra as estatísticas de cada solicitação de caminho enviada ao aplicativo. Clique em um botão com o sinal de adição para expandir a entrada e exibir um detalhamento das solicitações de caminho por RPC.

    captura de tela

    Se você ativou o recurso de rastreamento de custos da API, isso também exibirá os custos.

  • A tabela Request History mostra os dados relativos às solicitações individuais. Clique em um botão com o sinal de adição para expandir a entrada e exibir um detalhamento por RPC. Clique no link de uma solicitação para exibir uma linha do tempo da solicitação, incluindo os tempos individuais da RPC.

    captura de tela

  • O gráfico Timeline de RPC mostra quando as chamadas RPC específicas foram feitas e quanto tempo as solicitações levaram para serem processadas. A barra RPC Total mostra o tempo total gasto em espera em chamadas RPC, e a barra Grand Total mostra o tempo total gasto no processamento da solicitação. Como você pode ver na linha do tempo abaixo, a maior parte do tempo foi gasto em chamadas RPC. Frequentemente, esse é o caso. As outras guias mostram mais informações sobre a solicitação. Compreender o impacto das chamadas RPC no tempo de resposta do aplicativo é inestimável ao analisar o desempenho dela.

    captura de tela

Como funciona

O filtro de servlet do Appstats é adicionado automaticamente à estrutura remota de chamada de procedimentos subjacente às APIs de serviços do App Engine. Ele grava estatísticas de todas as chamadas à API feitas durante o gerenciador de solicitações e armazena os dados em memcache, usando um namespace __appstats__. O Appstats mantém as estatísticas referentes às 1.000 solicitações mais recentes (aproximadamente). Os dados incluem registros de resumo, cada um com cerca de 200 bytes, e registros de detalhes, que podem ter até 100 KB cada.

A versão do Appstats para Java usa comportamentos e valores fixos para o método de armazenamento de dados no memcache e no armazenamento de dados. Não é possível configurá-los da mesma maneira que na versão do Appstats para Python.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Java 8