IIS 7 でトレースを使用して失敗した要求のトラブルシューティング
適用対象: インターネット インフォメーション サービス 7.0
Note
この記事は IIS 7.0 に適用されます。 新しいバージョンについては、「 IIS 8.5 でトレースを使用して失敗した要求をトラブルシューティングするを参照してください。
要求ベースのトレースは、スタンドアロンの IIS サーバーと Azure Web アプリの両方で使用でき、発生している問題を再現できる場合に、要求で何が正確に行われているのか、その理由を判断する方法を提供します。 要求でのパフォーマンスの低下や認証関連のエラー、ASP または ASP.NET からのサーバー 500 エラーなどの問題は、多くの場合、発生したタイミングで問題のトレースをキャプチャしていない限り、トラブルシューティングは困難です。 この記事では、IIS サーバーでの失敗した要求トレースについて説明します。 Azure Web アプリでこれを行う方法については、「Visual Studio を使用した Azure App Service のアプリのトラブルシューティング」を参照してください。
失敗した要求トレースは、要求のトレース イベントをバッファーし、要求が失敗した場合にのみディスクにフラッシュするように設計されています。ここで、"failure" の定義を指定します。 404.2 エラー メッセージが表示される理由や、要求の停止を開始する理由を知りたい場合は、失敗した要求トレースを使用します。
この記事で説明するタスクは次のとおりです。
- 失敗した要求トレース モジュールの有効化。
- 失敗した要求トレース ログ ファイルセマンティクスの構成。
- 失敗した要求トレースを保持する URL の定義 (エラー定義やトレースする領域を含む)。
- エラー状態を生成し、結果のトレースを表示する。
前提条件
IIS のインストール
この記事のタスクを実行するには、あらかじめ IIS 7 以降をインストールしておく必要があります。 IIS がインストールされているかを確認するために http://localhost/
にアクセスします。 IIS がインストールされていない場合のインストール手順については、「 Windows Server 2008 での IIS のインストール 」を参照してください。 IIS をインストールするときは、次の機能もインストールしてください。
- ASP.NET ( World Wide Web サービス - アプリケーション開発機能 - ASP.NET)
- トレース ( World Wide Web Services - Health and Diagnostics - Tracing)
管理者としてサインインする
ログインに使用するアカウントが管理者アカウントであるか、Administrators グループに属していることを確認します。
Note
Administrators グループに含まれていると、既定では完全な管理者ユーザー権限は付与されません。 アプリケーションを管理者として実行する必要があります。そのためには、アプリケーション アイコンを右クリックし、 管理者として実行を選択します。
バックアップを作成する
次のセクションのタスクを実行する前に、構成のバックアップを作成する必要があります。
構成のバックアップを作成するには、次の手順に従います。
Start>All Programs>Accessories を選択します。
コマンド プロンプトを右クリックし、[管理者として実行選択。
コマンド プロンプトで次のコマンドを実行します。
%windir%\system32\inetsrv\appcmd add backup cleanInstall
サンプル コンテンツを作成する
%systemdrive%\inetpub\wwwroot
に移動します。コンテンツを安全な場所に移動するか (既存のコンテンツを復元する場合)、削除します。
空のファイルを作成し、 test.asp名前を付けます。
コマンド プロンプトで、\inetpub\wwwroot 内のtest.asp ファイルに移動します。
test.asp ファイルに、次の内容を貼り付けます。
<h2>Failed Request Tracing Lab</h2><br> <br>Today's date is <% response.write(Date()) %>
ASP を無効にする
このタスクでは ASP を無効にする必要があります。 ASP を無効にするのは、あくまで例示であり、この記事のタスクの目的のためです。
ASP を無効にするには
[インターネット インフォメーション サービス (IIS) マネージャー] を開きます。
[ISAPI および CGI の制限] をダブルクリックします。
[Active Server Pages] を選択します。 Actions ペインで Deny を選択して ASP を無効にします。
失敗した要求トレースを有効にします
失敗した要求トレースを有効にした後、ログ ファイルが存在する場所を構成する必要があります。 このタスクでは、既定の Web サイトに対して失敗した要求トレースを有効にし、ログ ファイルを配置する場所を指定します。 次に、エラー ログを生成するエラーを構成します。
手順 1: サイトの失敗した要求トレースを有効にし、ログ ファイル ディレクトリを構成する
管理者権限でコマンド プロンプトを開き、 %systemdrive%\windows\system32\inetsrv に移動します。
inetmgr
を実行して IIS マネージャーを開きます。Connections ウィンドウで、コンピューター名を展開し、Sites を展開し、既定の Web サイトを選択します。
Actions ペインの Configure で、Failed Request Tracing を選択します。
[Edit Web Site Failed Request Tracing Settings](Web サイトの失敗した要求トレース設定の編集) ダイアログ ボックスで、次の構成を行います。
- [ 有効 ] チェック ボックスをオンにします。
- 他の設定については、既定値をそのまま使用します。
[OK] を選択します。
失敗した要求トレースログが既定の Web サイトで有効になりました。 %windir%\system32\inetsrv\config\applicationHost.config ファイルを調べて、構成が次のようになっていることを確認します。
<system.applicationHost>
<sites>
<!-- site & app defaults -->
<site name="Default Web Site" id="1">
<!-- other site configuration -->
<traceFailedRequestsLogging enabled="true" />
</site>
</sites>
</system.applicationHost>
手順 2: エラー定義を構成する
この手順では、トレースする領域を含め、URL のエラー定義を構成します。 まだ有効になっていない拡張機能への要求について、IIS によって返される 404.2 のトラブルシューティングを行います。 これは、有効にする必要がある特定の拡張機能を決定するのに役立ちます。
管理者権限でコマンド プロンプトを開き、 %systemdrive%\windows\system32\inetsrv に移動します。
inetmgr
を実行して IIS マネージャーを開きます。Connections ウィンドウで、コンピューター名を展開し、Sites を展開し、既定の Web サイトを選択します。
[失敗した要求トレースの規則] をダブルクリックします。
完了 を選択します。
Actions ペインで、Add を選択します。
[失敗した要求トレース規則の追加] ウィザードの [トレースするコンテンツの指定] ページで、[すべてのコンテンツ (*)] を選択します。 [次へ] を選択します。
[トレース条件の定義] ページで、[Status code(s)] チェック ボックスをオンにし、トレースする状態コードとして「404.2」と入力します。
[次へ] を選択します。
トレース プロバイダーの選択 ページの Providersで、WWW サーバー チェック ボックスをオンにします。 [ Areas で、 Security チェック ボックスをオンにし、他のすべてのチェック ボックスをオフにします。
生成中の問題により、セキュリティ エラー トレース イベントがスローされます。 一般に、認証と承認 (ISAPI 制限リストの問題を含む) の問題は、トレース用の WWW Server - セキュリティ領域構成を使用して診断できます。 ただし、 FREB.xsl スタイル シートはエラーと警告を強調表示するのに役立ちます。既定の構成を使用して、すべての領域とプロバイダーのすべてのイベントをログに記録できます。 [詳細] の [詳細] を選択します。
完了 を選択します。 既定の Web サイトに関して、次の定義が表示されます。
この構成は、IIS マネージャーによって %windir%\system32\inetsrv\config\applicationHost.config
ファイルに <location>
タグを使用して書き込まれます。 この構成は次のようになります。
<location path="Default Web Site">
<system.webServer>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="WWW Server" areas="Security" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="404.2" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</location>
エラー要求ログ ファイルをテストして表示する
このタスクでは、失敗した要求を生成し、結果のトレース ログを表示します。 HTTP 応答コード 404.2 で失敗する http://localhost/*.asp
要求のトレース ログをキャプチャするように IIS を既に構成しました。 今度は、それが正しく動作することを確認します。
手順 1: エラーとエラー要求ログ ファイルを生成する
新しい Internet Explorer ウィンドウを開きます。
次のアドレスを入力します:
http://localhost/test.asp
。"HTTP エラー 404.2 - 見つかりません" エラーが表示されます。
手順 2: エラー要求ログ ファイルを表示する
失敗した要求を生成したら、管理者権限でコマンド プロンプトを開き、 %systemdrive%\inetpub\logs\FailedReqLogFiles\W3SVC1 に移動します。
このディレクトリから start を実行して Internet Explorer ウィンドウを起動します。
ここでいくつかの点に注意してください。IIS は、失敗した要求のログ ファイルを書き込むとき、失敗した要求ごとに 1 つのファイルを出力します。 freb.xsl スタイル シートも、ディレクトリごとに 1 つ書き込まれます。 これは、結果として得られるエラー要求ログ ファイル (このサンプルの fr000001.xml など) を表示するときに役立ちます。
404.2 エラーのログ ファイルを右クリックし、 開く>Internet Explorer を選択します。 失敗した要求トレース ファイルを初めて開く場合は、Internet Explorer のセキュリティ強化構成が既定で有効になっているため、信頼済みサイトの一覧に about:internet を追加する必要があります。 その場合は、次のように表示されます。
Internet Explorer ダイアログ ボックスで、Add... を選択して、信頼済みサイトの一覧に about:internet を追加します。 これで XSL が機能するようになります。 信頼済みサイトの一覧に about:internet を追加すると、次の内容が表示されます。
失敗した要求の概要が一番上に記録され、エラーと警告テーブルは、SeverityでWARNING、ERROR、またはCRITICAL ERRORを識別します。 この例では、 WARNING 重大度レベルは ISAPI の制限によるものです。 読み込もうとしたイメージは、 %windir%\system32\inetsrv\asp.dllでした。
テキスト エディターを使用して生の XML ファイルを直接開き、各イベントの内容を確認します。
まとめ
2 つのタスクを完了しました。失敗した要求トレースを構成して、IIS が 404.2 状態コードで返す要求のトレースをキャプチャし、IIS が要求のトレースをキャプチャしたことを確認しました。 また、要求に 404.2 リターン コードがないため、 freb.xml ログ ファイルに、行った要求に対する他の要求が含まれていないことも確認しました。 エラーのログ ファイルを参照した結果、その要求に対して拡張機能が無効になっていることがエラーの原因であると判明しました。 他の HTML 以外のページ (.gif ファイルや.jpg ファイルなど) を試して、ログ ファイルでこれらのトレースが追加されないことに注意してください。 また、これを 404 に変更したり、failureDefinitions に timeTaken フィールドを設定して要求に 30 秒以上かかる場合にエラーをキャプチャしたりすることも簡単にできます。
バックアップを復元する
この記事の作業を完了したら、構成のバックアップを復元しましょう。 管理者権限で次のコマンドを実行します。
%windir%\system32\inetsrv\appcmd restore backup cleanInstall