Freigeben über


Glimpse を使って ASP.NET アプリをリモート診断する

Web アプリケーションのデバッグやトレースの方法はさまざまありますが、例えば Windows Azure などのサーバー側に配置した状態で ASP.NET アプリケーションを診断したい場合などに今回紹介する Glimpse が便利です。

Glimpse は、ASP.NET Web アプリケーションの診断 (Diagnostics) フレームワークで、オープンソースとして開発されています。使い方はとても簡単で、NuGet パッケージマネージャーから ASP.NET アプリケーションに簡単に組み込むことができます。

● Glimpse のインストール

[NuGet パッケージの管理] ダイアログで Glimpse を検索すると、Glimpse.MVC3 や Glimpse.MVC4 などいくつかのパッケージが見つかります。例えば ASP.NET MVC 4 のアプリケーション プロジェクトでは、Glimpse.MVC4 パッケージをインストールします。

image

Glimpse をインストールすると、プロジェクトに Glimpse のアセンブリが追加されると共に Web.config に ASP.NET ハンドラー (Glimpse.axd) が設定されます。

● Glimpse を使う

Glimpse をインストールした Web アプリケーションで https://[アプリケーション URL]/Glimpse.axd を開くと下記のページが表示されます。

image

ここで [Turn Glimpse On] をクリックして Glimpse の診断を有効にしてから、再度対象のアプリケーションを表示します。すると、ページの右下に Glimplse のアイコンが表示されるようになります。

image

このアイコンをクリックすると診断ウィンドウが表示され、各種情報を見ていくことが出来るようになります。下記は、リクエスト処理のタイムライン表示の一例です。

image

● リモート環境でアプリケーションの診断を行う

Glimpse を使って、Windows Azure などに配置したアプリケーションの診断も行うことができます。デフォルトではローカル環境でのみ診断が有効になっているので、リモート環境でも診断が行えるように Web.config の Glimpse 要素の設定を変更します。下記の通り、コメントアウトされている runtimePolicies 要素を有効にすればリモートでの診断が可能になります。

 <glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
  <!-- If you are having issues with Glimpse, please include this. It will help us figure out whats going on. 
    <logging level="Trace" />-->
  <!-- Want to use Glimpse on a remote server? Ignore the LocalPolicy by removing this comment.-->
    <runtimePolicies>
      <ignoredTypes>
        <add type="Glimpse.AspNet.Policy.LocalPolicy, Glimpse.AspNet"/>
      </ignoredTypes>
    </runtimePolicies>
</glimpse>

Windows Azure Web サイトに配置した ASP.NET アプリケーションで Glimpse 診断を使った例が下記です。サーバーの各種情報 (System Assemblies のバージョンなど) も確認できます。

image

また、System.Diagnostics を利用したトレース出力も Glimpse の Trace ウィンドウに表示されます。

 using System.Diagnostics;
...

public ActionResult Index()
{
    Trace.TraceInformation("Home/Index was called.");
    Trace.TraceError("This is Bad!");
    ....

image

こういった便利機能が、NuGet を通して簡単にプロジェクトに追加できるのはとても便利ですね。この Glimpse はそれほど頻繁に使うものではないかもしれませんが、覚えておくときっと役に立つときがくるのではないでしょうか。。。