この資料では、HTTP (Hypertext Transfer Protocol) API のエラー ログ機能について説明します。
HTTP ベースのアプリケーションで発生する一部のエラーは、アプリケーションに戻されて処理される代わりに HTTP API によって自動的に処理されます。この動作が実行されるのは、このようなエラーが頻繁に発生したときにこの動作がないと、イベント ログまたはアプリケーション ハンドラーの許容量を超える可能性があるためです。
以下のトピックでは、HTTP API のエラー ログのさまざまな状況について説明します。
- HTTP API エラー ログの構成
HTTP API でログに記録するエラー、ログ ファイルの許可される最大サイズ、およびログ ファイルの場所は、レジストリの設定を使用して制御します。 - HTTP API エラー ログの形式
HTTP API によって作成されるログ ファイルは、W3C (World Wide Web Consortium) のログ ファイル規則に準拠しています。標準のツールを使用してこれらのログ ファイルを解析できます。ただし、W3C ログ ファイルとは異なり、HTTP API ログ ファイルは列名を含んでいません。 - HTTP API でログに記録されるエラーの種類
HTTP API はさまざまな一般的なエラーをログに記録します。
HTTP API エラー ログの構成
HTTP API エラー ログを自動で構成するには、「
Fix it で解決する」セクションに進んでください。自分で HTTP API エラー ログを構成するには、「
自分で解決する」セクションに進んでください。
Fix it で解決する
この問題を自動的に解決するには、[この問題を解決する] ボタンまたはリンクをクリックします。[ファイルのダウンロード] ダイアログ ボックスで [実行] をクリックし、Fix it ウィザードの手順に従います。
注意事項- このウィザードは英語版のみである場合があります。しかし、自動的な解決は英語版以外の Windows でも機能します。
- 問題のあるコンピューターとは別のコンピューターを操作している場合、Fix it ソリューションをフラッシュ ドライブまたは CD に保存することで、問題のあるコンピューターで実行することができます。
自分で解決する
HTTP API エラー ログは、
HTTP \Parameters キーの下にある 3 つのレジストリ値で制御されます。これらのキーは、次のレジストリ キーに存在します。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
注: 構成値の場所と形式は、新しいバージョンの Microsoft Windows オペレーティング システムでは変更されることがあります。
レジストリ値を変更したり、ログ ファイルやログ ファイルが含まれるフォルダーを表示または変更したりするには、Administrator またはローカル システムの資格情報が必要です。
レジストリ値内の構成情報は、HTTP API ドライバーが起動されるときに読み込まれます。そのため、設定を変更した場合は、ドライバーを停止してから再起動し、新しい値を読み込む必要があります。この操作を行うには、次のコンソール コマンドを入力します。
net stop http
net start http
ログ ファイルの名前を指定するには、次の名前付け規則を使用します。
httperr + シーケンス番号 + .log
例: httperr4.log
ログ ファイルは、
ErrorLogFileTruncateSize レジストリ値で指定された最大サイズに達すると再び最初から記録されます。この値を 1 MB より小さくすることはできません。
エラー ログの構成が無効な場合または HTTP API がログ ファイルに記録しているときに何らかのエラーが発生した場合、HTTP API は、イベント ログを使用してエラー ログが実行されていないことを管理者に通知します。
次の表では、レジストリ構成値について説明します。
元に戻す全体を表示する
| レジストリの値 | 説明 |
| EnableErrorLogging | エラー ログを有効にする場合は、この DWORD を TRUE に設定し、無効にする場合は FALSE に設定します。既定値は TRUE です。 |
| ErrorLogFileTruncateSize | この DWORD でエラー ログ ファイルの最大サイズをバイト単位で指定します。既定値は 1 MB (0x100000) です。
注: 既定値より小さい値を指定することはできません。 |
| ErrorLoggingDir | この文字列で、HTTP API によるログ ファイルの保存先フォルダーを指定します。
指定したフォルダー内に、HTTP API によってサブフォルダー HTTPERR が作成され、そのサブフォルダー内にログ ファイルが保存されます。このサブフォルダーとログ ファイルには同じアクセス許可が設定されます。Administrator アカウントとローカル システム アカウントにはフル コントロールのアクセス権が付与されます。その他のユーザーはアクセスできません。
レジストリでフォルダーが指定されていない場合は、次の既定のフォルダーが使用されます。 %SystemRoot%\System32\LogFiles
注: ErrorLoggingDir 文字列の値には完全修飾ローカル パスを指定する必要があります。ただし、%SystemRoot% を含めることができます。ネットワーク ドライブまたはネットワーク共有を使用することはできません。 |
HTTP API エラー ログの形式
一般的に、HTTP API エラー ログ ファイルに列見出しが含まれないことを除いて、HTTP API エラー ログ ファイルの形式は W3C エラー ログと同じです。HTTP API エラー ログでは各行に 1 つのエラーが記録されます。各フィールドは特定の順序で表示されます。前のフィールドと次のフィールドは 1 つのスペース文字 (0x0020) で区切られます。各フィールド内ではスペース文字、タブ、および印刷できない制御文字の代わりに、+ 記号 (0x002B) が使用されます。
次の表に、エラー ログ レコード内のフィールドおよびフィールドの順序を示します。
元に戻す全体を表示する
| フィールド | 説明 |
| 日付 | 日付フィールドは W3C の形式に従っています。このフィールドは、世界協定時刻 (UTC) を基にしています。日付フィールドには、YYYY-MM-DD の形式で常に 10 個の文字が表示されます。たとえば、2003 年 5 月 1 日は 2003-05-01 で表されます。 |
| 時間 | 時間フィールドは W3C の形式に従っています。このフィールドは UTC を基にしています。時間フィールドには、MM:HH:SS の形式で常に 8 個の文字が表示されます。たとえば、午後 5 時 30 分 (UTC) は 17:30:00 で表されます。 |
| クライアント IP アドレス | 影響を受けているクライアントの IP アドレス。このフィールドの値は IPv4 アドレスまたは IPv6 アドレスです。クライアントの IP アドレスが IPv6 アドレスである場合、アドレスに ScopeId フィールドも含まれます。 |
| クライアント ポート | 影響を受けているクライアントのポート番号。 |
| サーバー IP アドレス | 影響を受けているサーバーの IP アドレス。このフィールドの値は IPv4 アドレスまたは IPv6 アドレスです。サーバーの IP アドレスが IPv6 アドレスである場合、アドレスに ScopeId フィールドも含まれます。 |
| サーバー ポート | 影響を受けているサーバーのポート番号。 |
| プロトコル バージョン | 使用されているプロトコルのバージョン。
接続がプロトコル バージョンを識別できるように解析された場合、空のフィールドのプレースホルダーとしてハイフン (0x002D) が使用されます。
解析されるメジャー バージョン番号またはマイナー バージョン番号が 10 以上の場合、バージョンは HTTP/?.? として記録されます。 |
| Verb | 解析される最後の要求によって渡される verb 状態。不明な verb も含まれます。255 バイトを超える verb は 255 バイトになるように切り捨てられます。verb が使用できない場合は、空のフィールドのプレースホルダーとしてハイフン (0x002D) が使用されます。 |
| CookedURL およびクエリ | URL およびその URL に関連付けられているすべてのクエリが、疑問符 (0x3F) で区切られて 1 つのフィールドとしてログに記録されます。このフィールドの長さは 4096 バイトに制限され、それを超える部分は切り捨てられます。
URL が解析された ("cooked" と呼ばれます) 場合、URL はローカル コード ページ変換で記録され、Unicode フィールドとして処理されます。
ログが記録されるタイミングで URL が解析 ("cooked") されていない場合、Unicode 変換ではなく、そのままコピーされます。
HTTP API がこの URL を解析できない場合は、空のフィールドのプレースホルダーとしてハイフン (0x002D) が使用されます。 |
| プロトコルのステータス | プロトコルのステータスは 999 を超えることはありません。
要求に対する応答のプロトコルのステータスが使用可能な場合は、このフィールドに記録されます。
プロトコルのステータスが使用できない場合は、空のフィールドのプレースホルダーとしてハイフン (0x002D) が使用されます。 |
| SiteId (サイト ID) | このバージョンの HTTP API では使用されません。このフィールドにはプレースホルダーとしてハイフン (0x002D) が常に表示されます。 |
| 理由フレーズ | このフィールドには、ログに記録されているエラーの種類を識別する文字列が含まれます。このフィールドが空白のままになることはありません。 |
| キュー名 | 要求のキュー名。
|
次に、HTTP API エラー ログのサンプル行を示します。
2002-07-05 18:45:09 172.31.77.6 2094 172.31.77.6 80 HTTP/1.1 GET /qos/1kbfile.txt 503 ? ConnLimit 2002-07-05 19:51:59 127.0.0.1 2780 127.0.0.1 80 HTTP/1.1 GET /ThisIsMyUrl.htm 400 ? Hostname 2002-07-05 19:53:00 127.0.0.1 2894 127.0.0.1 80 HTTP/2.0 GET / 505 - Version_N/S 2002-07-05 20:06:01 172.31.77.6 64388 127.0.0.1 80 - - - - - Timer_MinBytesPerSecond
HTTP API でログに記録されるエラーの種類
HTTP API ログには、正しく処理されなかった、クライアントへのエラー応答、接続タイムアウト、孤立した要求、および切断された接続が記録されます。
次に、HTTP API ログに記録されるエラーの種類の一覧を示します。
- クライアントへの応答HTTP API は、たとえば、最後に受信した要求内の解析エラーが原因になっている 400 エラーなどのエラー応答をクライアントに送信します。HTTP API は、エラー応答を送信した後に接続を終了します。
- 接続タイムアウトHTTP API の設定により、接続がタイムアウトになりました。接続がタイムアウトになったときに要求が保留中になっている場合は、その要求を使用して接続の詳細情報をエラー ログに記録します。
- 孤立した要求ユーザーモードの処理が予期せずに終了したときに、その処理に配信される要求がキュー内に残っています。HTTP API は、孤立した要求をエラー ログに記録します。
各エラー行の最後のフィールドとして常に表示される
Reason Phrase 文字列によって特定のエラーの種類が示されます。次の表に、HTTP API の理由フレーズを示します。
元に戻す全体を表示する
| 理由フレーズ | 説明
|
| AppOffline | サービス使用不能エラー (HTTP エラー 503) が発生しました。アプリケーション エラーが原因でアプリケーションがオフラインになったためにサービスを使用できません。 |
| AppPoolTimer | サービス使用不能エラー (HTTP エラー 503) が発生しました。アプリケーション プール プロセスがビジー状態で要求を処理できないために、サービスを使用できません。 |
| AppShutdown | サービス使用不能エラー (HTTP エラー 503) が発生しました。管理者ポリシーに対する応答でアプリケーションが自動的にシャットダウンされたためにサービスを使用できません。 |
| BadRequest | 要求を処理しているときに解析エラーが発生しました。 |
| Client_Reset | 要求をワーカー プロセスに割り当てる前に、クライアントとサーバーの間の接続が閉じられました。この動作の最も一般的な原因は、クライアントがサーバーへの接続を完了前に閉じることです |
| Connection_Abandoned_By_AppPool | アプリケーション プールのワーカー プロセスが、予期せず終了したか、プロセスのハンドルを閉じることによって保留中の要求を孤立させました。 |
| Connection_Abandoned_By_ReqQueue | アプリケーション プールのワーカー プロセスが、予期せず終了したか、プロセスのハンドルを閉じることによって保留中の要求を孤立させました。Windows Vista および Windows Server 2008 に固有です。 |
| Connection_Dropped | サーバーが最後の応答パケットを送信する前に、クライアントとサーバーの間の接続が閉じられました。この動作の最も一般的な原因は、クライアントがサーバーへの接続を完了前に閉じることです |
| Connection_Dropped_List_Full | 切断されたクライアントとサーバーの間の接続の一覧がいっぱいになっています。Windows Vista および Windows Server 2008 に固有です。 |
| ConnLimit | サービス使用不能エラー (HTTP エラー 503) が発生しました。サイト レベルの接続の制限に到達したか制限を超えたためにサービスを使用できません。 |
| Connections_Refused | カーネルの NonPagedPool メモリが 20 MB 未満に減少し、http.sys が新しい接続を受け付けなくなりました。 |
| Disabled | サービス使用不能エラー (HTTP エラー 503) が発生しました。管理者がアプリケーションをオフラインにしたためにサービスを使用できません。 |
| EntityTooLarge | エンティティが許可されている最大サイズを超えています。 |
| FieldLength | フィールド長の制限を超えています。 |
| Forbidden | 解析中に禁止されている要素またはシーケンスが検出されました。 |
| Header | ヘッダー内で解析エラーが発生しました。 |
| Hostname | ホスト名を処理しているときに解析エラーが発生しました。 |
| Internal | 内部サーバー エラー (HTTP エラー 500) が発生しました。 |
| Invalid_CR/LF | 無効なキャリッジ リターンまたはライン フィードが発生しました。 |
| LengthRequired | 必要な長さの値がありません。 |
| N/A | サービス使用不能エラー (HTTP エラー 503) が発生しました。内部エラー (メモリ割り当てエラーなど) が発生したためにサービスを使用できません。 |
| N/I | 不明な転送エンコードのために未実装エラー (HTTP エラー 501) またはサービス使用不能エラー (HTTP エラー 503) が発生しました。 |
| Number | 数字を処理しているときに解析エラーが発生しました。 |
| Precondition | 必要な前提条件がありません。 |
| QueueFull | サービス使用不能エラー (HTTP エラー 503) が発生しました。アプリケーション要求キューがいっぱいになっているためにサービスを使用できません。 |
| RequestLength | 要求の長さの制限を超えています。 |
| Timer_AppPool | アプリケーション プール キュー内で、要求が、サーバー アプリケーションによってキューから取り出されて処理されるの待機している時間が長すぎたために接続が期限切れになりました。このタイムアウトまでの時間は ConnectionTimeout です。この値は、既定では 2 分間に設定されています。 |
| Timer_ConnectionIdle | 接続が期限切れになり、アイドル状態のままになっています。ConnectionTimeout の既定の時間は 2 分間です。 |
| Timer_EntityBody | 要求のエンティティ本体が到着する前に接続が期限切れになりました。要求にエンティティ本体があることが明らかになると、HTTP API が Timer_EntityBody タイマーをオンにします。最初は、このタイマーの制限は ConnectionTimeout の値 (通常は 2 分間) に設定されます。この要求で別のデータの指定を受け取るたびに、HTTP API がタイマーをリセットし、さらに接続を 2 分間 (または ConnectionTimeout で指定された時間) 延長します。 |
| Timer_HeaderWait | 要求のヘッダーの解析にかかった時間が既定の制限時間である 2 分間を超えたために接続が期限切れになりました。 |
| Timer_MinBytesPerSecond | クライアントが適切な速度で応答を受信しなかったために接続が期限切れになりました。応答の送信速度が既定の 240 バイト/秒より遅くなっていました。これは、MinFileBytesPerSec メタベース プロパティで制御できます。 |
| Timer_ReqQueue | アプリケーション プール キュー内で、要求が、サーバー アプリケーションによってキューから取り出されるのを待機している時間が長すぎたために接続が期限切れになりました。このタイムアウトまでの時間は ConnectionTimeout です。この値は、既定では 2 分間に設定されています。Windows Vista および Windows Server 2008 に固有です。 |
| Timer_Response | 予約済み。現在使用されていません。 |
| URL | URL を処理しているときに解析エラーが発生しました。 |
| URL_Length | URL が許可されている最大サイズを超えています。 |
| Verb | verb を処理しているときに解析エラーが発生しました。 |
| Version_N/S | 未サポート バージョン エラー (HTTP エラー 505) が発生しました。 |
IIS HTTP エラー ログ収集のログ フィールドの追加の詳細については、以下のサポート技術情報番号をクリックしてください。
832975?
(http://support.microsoft.com/kb/832975/ja/
)
IIS 6.0 および IIS 7.0 で Httperr#.log ファイルのログ記録に使用できる追加のプロパティ