App Stats for Java

これまでPython版にしかなかった App Stats が1.3.2でJavaに導入されたので試してみた.

App Statsとは

App Stats は各リクエストごとにApp EngineのAPIサービスの利用状況をモニタリングする仕掛け.どのAPIをどれだけ使ったか,個々のAPI呼び出しにどれだけ時間がかかったかを表示してくれる.

セットアップ

App Statsはそれぞれのアプリケーションに対して設定する必要がある.作業は次の2つ.

  • 統計情報を取得するためのフィルタの設置
  • 取得した情報を表示するためのサーブレットの設置
フィルタの設置

次のフラグメントをWEB-INF/web.xmlに追加する.
init-paramでlogMessage を登録しているが,これはログにそのリクエストの参照用IDを表示させるためのもの.

<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>
<filter-mapping>
   <filter-name>appstats</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
サーブレットの設置

同様に下記をWEB-INF/web.xml に追加する./appstats にサーブレットを設置しているが,このパスは任意なので別のところに設置しても構わない.

<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>
        <url-pattern>/appstats/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

実行してみる

クラウドにデプロイして実行してみる.アプリケーションの動作は通常と全く変わらない.appspot.com から管理コンソールを開き,そのアプリケーションのログを見る.All Requestsで,詳細に調査したいリクエストのログを開くと,ログメッセージが表示されている.これが,フィルタで設定したメッセージ.

メッセージで指定されたリンクを開くと,詳細なAPI呼び出しの情報を見ることができる.

所感

すばらしい.けど,どうせなら完全にシステムに統合して欲しい.有効化,無効化を管理コンソールで設定し,管理コンソールから直接,詳細表示画面を開けるようにしてくれないだろうか.簡単そうだけどなあ.

まあ,AppStatsはユーザレベルで動作しているものなので,管理コンソールとは別だ、と言うことなんだろうけど.