失敗した要求トレースを使用して Classic ASP エラーをトラブルシューティングする
作成者 : Robert McMurray
発行日 : 2009 年 2 月 19 日 (作業者 : robmcm(英語))
更新日 : 2009 年 2 月 19 日 (作業者 : robmcm(英語))
IIS 7.0 に組み込まれている優れたトラブルシューティング機能の 1 つが失敗した要求トレースです。この機能を使用してサーバーにトレース規則を構成し、カスタムの失敗条件を定義することで、詳細なトラブルシューティング ログ ファイルを作成することができます。たとえば、HTTP 401 エラーのログ ファイルを生成するトレース規則を作成すると、認証エラーの詳細を記録することができます。
IIS 7.0 の失敗した要求トレースは、受動的にエラーをトレースするように構成できます。つまり、能動的にサーバーを監視していなくても、IIS にトレース規則を追加することで、エラー発生時にログ ファイルが作成されるようにできます。たとえば、このチュートリアルの手順では、HTTP 500 エラーの発生時には常にトレース ログが生成されるように、トレース規則を作成する方法を紹介します。この受動トレースの方法は、"非再現" トレースとして知られています。このトレースでは、定期的にサーバーのログを調べてエラーの発生があったかどうかを確認し、IIS がログを作成していた場合のみ対策をとるということが可能です。
ユーザー アクセス制御の操作
このドキュメントの手順は、完全な管理アクセス許可を持つアカウントを使用して実行する必要があります。次のいずれかの方法を使用することをお勧めします。
- ローカル管理者アカウントを使用してコンピューターにログインします。
- ローカル管理者アカウント以外の、管理アクセス許可を持つアカウントを使用してログインする場合は、すべてのアプリケーションとコマンド プロンプト セッションを [管理者として実行] オプションを使用して開きます。
Windows Vista および Windows Server 2008 では、ユーザーアカウント制御 (UAC) セキュリティ コンポーネントにより IIS 7 構成設定への管理目的でのアクセスが制限されるため、上記の条件が必要となります。UAC の詳細については、次のドキュメントを参照してください。
失敗した要求トレースのインストール
失敗した要求トレースは、IIS 7.0 に既定ではインストールされません。失敗した要求トレースをインストールするには、お使いの Windows バージョンで以下の手順を実行してください。
Windows Vista または Windows 7 クライアント
- [スタート] ボタン、[コントロール パネル] の順にクリックします。
- [コントロール パネル] の [プログラムと機能] をクリックして、[Windows の機能の有効化または無効化] をクリックします。
- [Internet Information Services]、[World Wide Web サービス]、[健常性と診断] の順に展開します。
- [追跡] をオンにして、[OK] をクリックします。
Windows Server 2008 または Windows Server 2008 R2
- [スタート] をクリックして、[管理ツール] をポイントし、[サーバー マネージャー] をクリックします。
- [サーバー マネージャー] のツリー表示で、[役割] を展開して [Web サーバー (IIS)] をクリックします。
- [Web サーバー (IIS)] ウィンドウで、[役割サービス] セクションまでスクロールして、[役割サービスの追加] をクリックします。
- 役割サービスの追加ウィザードの [役割サービスの選択] ページで [トレース] を選択し、[次へ] をクリックします。
- [インストール オプションの確認] ページで [インストール] をクリックします。
- [結果] ページで [閉じる] をクリックします。
IIS 7.0 の失敗した要求トレースのインストールに関する詳細は、Microsoft IIS.net (英語) Web サイトの以下のページを参照してください。
失敗した要求トレースを有効にする方法
- [スタート] をクリックして、[管理ツール] をポイントし、[インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。
- [接続] ウィンドウで、サーバー接続、サイト、アプリケーション、またはディレクトリのうち、失敗した要求トレースを構成する対象を選択します。
- [操作] ウィンドウで、[失敗した要求トレース] をクリックします。
- [Web サイトの失敗した要求トレース設定の編集] ダイアログ ボックスで、次のオプションを構成します。
- [有効にする] チェック ボックスをオンにして、トレースを有効にします。
- [ディレクトリ] ボックスで、失敗した要求のログ ファイルを格納する場所として既定値をそのまま使用するか、新しいディレクトリを入力します。
- [トレース ファイルの最大数] ボックスに、格納する失敗した要求トレース ファイルの数を入力します。
- [OK] をクリックします。
注 : Classic ASP、ASP.NET、またはその他の特定の条件に対して設定をカスタマイズすることもできますが、Web サーバー上のさまざまなエラー条件を検出するには、HTTP 500 エラーに対する一般的な規則が便利です。
また、失敗した要求トレースは、コマンド プロンプトから AppCmd.exe ユーティリティを利用し、次の構文を使って有効にすることもできます。
appcmd.exe set config -section:system.applicationHost/sites /[name='Default Web Site'].traceFailedRequestsLogging.enabled:"True" /commit:apphost appcmd.exe set config -section:system.applicationHost/sites /[name='Default Web Site'].traceFailedRequestsLogging.directory:"%SystemDrive%\inetpub\logs\FailedReqLogFiles" /commit:apphost appcmd.exe set config -section:system.applicationHost/sites /[name='Default Web Site'].traceFailedRequestsLogging.maxLogFiles:"50" /commit:apphost
Classic ASP エラーのトラブルシューティング
このセクションでは、Classic ASP を使用していくつかのエラーを生成し、失敗した要求トレースがどのように潜在的な問題の特定に役立つかを検証します。これらの例は、エラーの原因がわかっている明確な状況を対象としていますが、この手法はエラーの原因が不明な状況のトラブルシューティングにも利用できます。
HTTP 500 エラーのトラブルシューティング
IIS は、ASP ページの実行が失敗した場合に HTTP 500 エラーを返します。IIS 7.0 の失敗した要求トレース機能を使用していない場合、これらの HTTP 500 エラーのトラブルシューティングは非常に難しくなる可能性があります。これは、システムのトラブルシューティングを能動的に行っていないときに、ASP エラーが発生することがよくあるためです。そうすると、場合によっては、失敗した要求に関するログ エントリへの追加情報が ASP モジュールによって返されるのを期待して IIS 動作状況ログを調べる以外に方法はありません。失敗した要求トレースを使用する次の例では、状況をトラブルシューティングするために使用できるエラー記録の詳細が得られます。
HTTP 500 エラーに対するトレース規則の追加方法
次の手順では、HTTP 500 エラーに対する失敗した要求トレースの規則を構成します。この規則は、後述の Classic ASP エラー メッセージのトラブルシューティングで使用します。
- [スタート] をクリックして、[管理ツール] をポイントし、[インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。
- [接続] ウィンドウで、接続、サイト、アプリケーション、またはディレクトリのうち、失敗した要求トレースを構成する対象を選択します。
- [ホーム] ウィンドウで、[失敗した要求トレースの規則] をダブルクリックします。
- [操作] ウィンドウで、[追加] をクリックします。
- [失敗した要求トレース規則の追加] ウィザードの [トレースするコンテンツの指定 ] ページでは、通常はトレースするコンテンツの種類を選択します。ここでは、すべてのコンテンツの既定値をそのまま使用し、[次へ] をクリックします。
- [トレース条件の定義] ページで、[状態コード] テキスト ボックスに**「500」と入力することで HTTP 500 エラーのトレースを指定し、[次へ]** をクリックします。
- [トレース プロバイダーの選択] ページで、既定値をそのまま使用し、[終了] をクリックします。
無効な COM クラスを呼び出すページの作成
このエラー条件では、無効な COM クラスのインスタンスの作成を試みる ASP ページを検証します。この状況は、大半の場合、有効な COM クラスのスペルミスによって発生します。この問題をテストするには、次の ASP コードを Bad_class.asp として、HTTP 500 エラーに対する失敗した要求トレースを有効にした Web サイトの wwwroot フォルダーに保存します。
<html> <body> <h1>Bad Class</h1> <% Set objObject = CreateObject("Bad.Class.Name") %> </body> </html>
Web ブラウザーを使用してこのファイルを参照すると、IIS は HTTP 500 エラー メッセージを返し、失敗した要求トレース ログを作成します。このログは、既定で %SystemDrive**%\Inetpub\FailedRequestLogFiles\W3SVCnnn フォルダーに作成され、W3SVCnnn には IIS マネージャーでリストした Web サイトの一意の識別子が含まれます。失敗した要求トレースのログは XML ファイルであるため、IIS は XSL ファイルを作成して、XML を Internet Explorer で開くことのできる表示形式に変換します。
Internet Explorer でのトレース ログの読み取り
Internet Explorer を使用して失敗した要求トレースのログ ファイルを開くと、[Request Summary] にさまざまな情報が表示されます。この概要には、URL の実行、アプリケーション プール、認証の種類、ユーザー名などの、エラー条件に関する一般的な環境情報が含まれます。エラーの原因は状態コードにあり、状態は HTTP 500 エラーであったことがわかります。
概要の [Errors and Warning] セクションに、下図に示す [view trace] リンクが表示されます。
[view trace] リンクをクリックすると、Internet Explorer は ASP スクリプト エラーが発生したトレース セクションにジャンプします。個々のトレース イベントを展開すると、そのイベントの具体的な詳細を表示できます。詳細には、物理ファイルのパス、行番号、ASP エラー コードと説明、エラーの原因となった ASP コードの抜粋などがあります。ここでは、無効な COM クラスのインスタンスを作成しようとしたことが原因だとわかります。
次の図に例を示します。
表示の遅いページのトラブルシューティング
失敗した要求トレースを構成して、HTTP エラーだけでなく、指定した時間間隔を超えるページのログ ファイルを生成することができます。実際的な例として、Web サイトの一部の表示が時々遅いことに Web ユーザーが不満を持っていても、どのページが影響を受けているのかはわからない場合、時間間隔のトレース規則を作成して、ページがその間隔を超えた場合にログ ファイルが作成されるようにできます。これで、ページを示すログ ファイルが IIS によって作成されるのを待って、トラブルシューティングの範囲を影響を受けたページに絞ることができます。失敗した要求トレースを使用しない場合、IIS 動作状況ログで実行に時間のかかるページを調べることになり、これでは問題そのものではなく、問題が発生しているページのリストにしか範囲を絞ることはできません。次の例では、表示の遅いページ内のエラー原因を特定します。
表示の遅いコンテンツに対するトレース規則の追加方法
次の手順では、特定の時間を超えた要求に対する失敗した要求トレースの規則を構成します。この規則は、後述の表示の遅い ASP ページのトラブルシューティングで使用します。
- [スタート] をクリックして、[管理ツール] をポイントし、[インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。
- [接続] ウィンドウで、接続、サイト、アプリケーション、またはディレクトリのうち、失敗した要求トレースを構成する対象を選択します。
- [ホーム] ウィンドウで、[失敗した要求トレースの規則] をダブルクリックします。
- 前の例で作成した規則を強調表示し、[操作] ウィンドウで [削除] をクリックします。
- [操作] ウィンドウで、[追加] をクリックします。
- [失敗した要求トレース規則の追加] ウィザードの [トレースするコンテンツの指定] ページでは、通常はトレースするコンテンツの種類を選択します。ここでは、すべてのコンテンツの既定値をそのまま使用し、[次へ] をクリックします。
- [トレース条件の定義] ページで、次の手順に従います。
- [状態コード] チェック ボックスをオフにします。
- [所要時間 (秒)] チェック ボックスをオンにします。
- 秒数として**「5」**を入力します。
- [次へ] をクリックします。
- [トレース プロバイダーの選択] ページで、既定値をそのまま使用し、[終了] をクリックします。
無限にループするページの作成
このエラー条件では、無限にループするページを検証します。この問題は、ユーザー セッションがループを正しく終了できなかった場合によく発生します。コードがデータベース テーブルのリスト レコードをループする場合などです。この問題をテストするには、次の ASP コードを Slow_page.asp として、失敗した要求トレースを有効にした Web サイトの wwwroot フォルダーに保存します。
<html> <body> <h1>Slow Page</h1> <% Do If Response.IsClientConnected = False Then Exit Do End If Loop %> </body> </html>
Web ブラウザーを使用してこのファイルを参照すると、Web ブラウザーにエラーは表示されませんが、ブラウザーはページを返さず、最終的にタイム アウトする場合があります。(注 : このページは、Web ブラウザーを閉じるとループを終了するように記述されています。スクリプト タイムアウトに達する前にループを終了したい場合は、10 秒後に手動でブラウザーを閉じる必要があります。)
5 秒後に、IIS は失敗した要求トレースのログを %SystemDrive**%\Inetpub\FailedRequestLogFiles\W3SVCnnn フォルダーに既定で作成します。W3SVCnnn には IIS マネージャーでリストした Web サイトの一意の識別子が含まれます。
Internet Explorer でのトレース ログの読み取り
前の例で示したように、Internet Explorer を使用して失敗した要求トレースのログ ファイルを開くと、[Request Summary] に重要な情報が表示されます。この概要には、URL の実行、アプリケーション プール、認証の種類、ユーザー名などの、エラー条件に関する一般的な環境情報が含まれます。エラーの原因はかかった時間にあり、失敗した要求トレースの規則に指定した時間である 5 秒をわずかに超えていたことがわかります。注 : また、応答の HTTP 状態コードは、成功を示す HTTP 200 だったこともわかります。この成功応答は、しばしば、表示の遅いページの原因特定をより困難にする要因の 1 つとなり、ページの特定がさらに困難になります。
概要の [Errors and Warning] セクションで、下図に示す [view trace] リンクが表示されます。
[view trace] リンクをクリックすると、Internet Explorer は ASP スクリプト エラーが発生したトレース セクションにジャンプします。個々のトレース イベントを展開すると、そのイベントの具体的な詳細を表示できます。詳細には、物理ファイルのパス、行番号、ASP エラー コードと説明、ログ ファイルが作成されたときに実行されていた ASP コードの抜粋などがあります。この情報を使用することにより、ASP ページを検証して、無限ループ内で実行されていたコードの行を特定することが可能です。
次の図に例を示します。
詳細情報
IIS 7.0 の失敗した要求トレースの詳細は、Microsoft の IIS.net (英語) Web サイトの以下のページを参照してください。