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 パッケージをインストールします。
Glimpse をインストールすると、プロジェクトに Glimpse のアセンブリが追加されると共に Web.config に ASP.NET ハンドラー (Glimpse.axd) が設定されます。
● Glimpse を使う
Glimpse をインストールした Web アプリケーションで https://[アプリケーション URL]/Glimpse.axd を開くと下記のページが表示されます。
ここで [Turn Glimpse On] をクリックして Glimpse の診断を有効にしてから、再度対象のアプリケーションを表示します。すると、ページの右下に Glimplse のアイコンが表示されるようになります。
このアイコンをクリックすると診断ウィンドウが表示され、各種情報を見ていくことが出来るようになります。下記は、リクエスト処理のタイムライン表示の一例です。
● リモート環境でアプリケーションの診断を行う
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 のバージョンなど) も確認できます。
また、System.Diagnostics を利用したトレース出力も Glimpse の Trace ウィンドウに表示されます。
using System.Diagnostics;
...
public ActionResult Index()
{
Trace.TraceInformation("Home/Index was called.");
Trace.TraceError("This is Bad!");
....
こういった便利機能が、NuGet を通して簡単にプロジェクトに追加できるのはとても便利ですね。この Glimpse はそれほど頻繁に使うものではないかもしれませんが、覚えておくときっと役に立つときがくるのではないでしょうか。。。