HTTP API でのエラー ログ

この記事では、HyperText Transfer Protocol (HTTP) アプリケーション プログラミング インターフェイス (API) のエラー ログ機能について説明します。

元の製品バージョン:  WindowsServer 2008 R2、Windows Server 2008、Windows Server 2012 R2、Windows Server 2012、Windows 10、Windows 8.1
元の KB 番号:   820729

概要

HTTP ベースのアプリケーションで発生する一部のエラーは、処理のためにアプリケーションに返されるのではなく、HTTP API によって自動的に処理されます。 この動作は、このようなエラーの頻度がイベント ログまたはアプリケーション ハンドラーにあふれ出る可能性がある場合に発生します。

次のトピックでは、HTTP API エラー ログのさまざまな側面について説明します。

  • HTTP API エラー ログの構成
    レジストリ設定では、HTTP API ログ エラー、ログ ファイルの最大許容サイズ、ログ ファイルの場所を制御します。

  • HTTP API エラー ログの形式
    HTTP API は、ワールドワイド Web コンソーシアム (W3C) ログ ファイルの規則に従うログ ファイルを作成します。 標準ツールを使用して、これらのログ ファイルを解析できます。 ただし、W3C ログ ファイルとは異なり、HTTP API ログ ファイルには列名は含みません。

  • HTTP API がログに記録するエラーの種類
    HTTP API は、多くの一般的なエラーをログに記録します。

次のメソッドは、HTTP API エラー ログの解決方法について説明します。

HTTP API エラー ログの構成

HTTP \Parameters キーの下の 3 つのレジストリ値は、HTTP API エラー ログを制御します。 これらのキーはレジストリ キーに格納 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters されます。

注意

構成値の場所と形式は、新しいバージョンのオペレーティング システムWindows場合があります。

レジストリ値を変更したり、ログ ファイルとログ ファイルを含むフォルダーを表示または変更するには、Administrator/Local System 資格情報が必要です。

レジストリ値の構成情報は、HTTP API ドライバーの起動時に読み取まれます。 したがって、設定を変更する場合は、停止してから、ドライバーを再起動して新しい値を読み取る必要があります。 これを行うには、次のコンソール コマンドを入力します。

net stop http
net start http

ログ ファイルの名前を指定するには、次の名前付け規則を使用します。
httperr + シーケンス番号 + .log
例: httperr4.log

ログ ファイルは、ErrorLogFileTruncateSize レジストリ値が指定する最大サイズに達すると循環されます。 この値は、1 メガバイト (MB) 未満に設定できます。

エラー ログの構成が有効でない場合、または HTTP API がログ ファイルに書き込み中に何らかのエラーが発生した場合、HTTP API はイベント ログを使用して、エラー ログが発生しないという通知を管理者に通知します。

次の表に、レジストリの構成値を示します。

レジストリ値 説明
EnableErrorLogging エラー ログを有効にするには TRUE に、無効にするには FALSE に設定できる DWORD。 既定値は TRUE です。
ErrorLogFileTruncateSize エラー ログ ファイルの最大サイズをバイト単位で指定する DWORD。 既定値は 1 MB (0x100000)。

指定した値を既定値より小さく設定できない。
ErrorLoggingDir HTTP API がログ ファイルを格納するフォルダーを指定する文字列。

HTTP API は、指定したフォルダーにサブフォルダー HTTPERR を作成し、ログ ファイルをサブフォルダーに格納します。 このサブフォルダーとログ ファイルは、同じアクセス許可設定を受け取る。 管理者アカウントとローカル システム アカウントにはフル アクセス権があります。 他のユーザーはアクセス権を持てない。

次の例は、レジストリでフォルダーが指定されていない場合の既定のフォルダーです。
%SystemRoot%\System32\LogFiles

ErrorLoggingDir 文字列値は、完全修飾ローカル パスである必要があります。 ただし、含まれる場合があります %SystemRoot% 。 ネットワーク ドライブまたはネットワーク共有を使用できません。

HTTP API エラー ログの形式

一般に、HTTP API エラー ログ ファイルの形式は W3C エラー ログと同じですが、HTTP API エラー ログ ファイルには列見出しが含まれます。 HTTP API エラー ログの各行に 1 つのエラーが記録されます。 フィールドは特定の順序で表示されます。 1 つのスペース文字 (0x0020) は、各フィールドを前のフィールドから分離します。 各フィールドで、プラス記号 (0x002B) は、スペース文字、タブ、および印刷不可能なコントロール文字を置き換える。

次の表は、エラー ログ レコード内のフィールドとフィールドの順序を示しています。

フィールド 説明
日付 [日付] フィールドは W3C 形式に従います。 このフィールドは、協定世界時 (UTC) に基づいて設定されます。 [日付] フィールドは、常に YYYYY-MM-DD の形式で 10 文字です。 たとえば、2003 年 5 月 1 日は 2003-05-01 と表されます。
Time [時間] フィールドは 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/?.?.
動詞 動詞は、解析された最後の要求がパスを示します。 不明な動詞が含まれますが、255 バイトを超える動詞は、この長さに切り捨てられます。 動詞が使用できない場合は、空のフィールド0x002Dとしてハイフン (0x002D) が使用されます。
CookedURL + クエリ URL と、URL に関連付けられているクエリは、疑問符 (0x3F) で区切られた 1 つのフィールドとして0x3F。 このフィールドは、長さ制限 4,096 バイトで切り捨てられます。

この URL が解析された ("cooked") 場合、ローカル コード ページ変換でログに記録され、Unicode フィールドとして扱います。

ログ記録時にこの URL が解析されていない場合 ("クックされた") 場合は、Unicode 変換なしで正確にコピーされます。

HTTP API でこの URL を解析できない場合は、空のフィールドのプレースホルダーとしてハイフン (0x002D) が使用されます。
プロトコルの状態 プロトコルの状態を 999 より大きくする必要があります。

要求に対する応答のプロトコル状態が使用可能な場合は、このフィールドにログインします。

プロトコルの状態が使用できない場合は、空のフィールド0x002Dとしてハイフン (0x002D) が使用されます。
SiteId このバージョンの 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 アプリケーション プールからのワーカー プロセスが予期せず終了するか、ハンドルを閉じて保留中の要求を孤立しました。 Vista 以降Windowsバージョン、およびサーバー 2008 Windows以降のバージョンに固有です。
Connection_Dropped サーバーが最終的な応答パケットを送信する前に、クライアントとサーバー間の接続が閉じられました。 この動作の最も一般的な原因は、クライアントがサーバーへの接続を途中で閉じる点です。
Connection_Dropped_List_Full クライアントとサーバー間のドロップされた接続の一覧が完全です。 Vista 以降Windowsバージョン、およびサーバー 2008 Windows以降のバージョンに固有です。
ConnLimit サービスが利用できないエラーが発生しました (HTTP エラー 503)。 サイト レベルの接続制限に達した、または超過したため、サービスを利用できません。
Connections_Refused カーネル NonPagedPool メモリが 20 MB を下回り、http.sys接続の受信が停止しました
無効 サービスが利用できないエラーが発生しました (HTTP エラー 503)。 管理者がアプリケーションをオフラインにしたため、サービスを利用できません。
EntityTooLarge エンティティが許可されている最大サイズを超えました。
FieldLength フィールドの長さの制限を超えました。
禁止されています 解析中に禁止された要素またはシーケンスが満たされた。
ヘッダー ヘッダーで解析エラーが発生しました。
ホスト名 ホスト名の処理中に解析エラーが発生しました。
内部 内部サーバー エラーが発生しました (HTTP エラー 500)。
Invalid_CR/LF 不正な復帰または改行が発生しました。
LengthRequired 必要な長さの値が見つからない。
該当なし サービスが利用できないエラーが発生しました (HTTP エラー 503)。 内部エラー (メモリ割り当てエラーや URL 予約一覧の競合など) が発生したため、サービスを利用できません。
N/I 実装されていないエラーが発生しました (HTTP エラー 501)、またはサービスが利用できないエラーが発生しました (HTTP エラー 503) 原因不明の転送エンコード。
番号 数値の処理中に解析エラーが発生しました。
事前条件 必須の事前条件が見つからない。
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 分に設定されます。 Vista 以降Windowsバージョン、およびサーバー 2008 Windows以降のバージョンに固有です。
Timer_Response 予約済み。 現在は使用されません。
Timer_SslRenegotiation
クライアントとサーバーの間Secure Sockets Layer (SSL) 再ネゴシエーションに 2 分の既定のタイム アウトよりも時間がかかったため、接続の有効期限が切れています。
URL URL の処理中に解析エラーが発生しました。
URL_Length URL が許可されている最大サイズを超えました。
動詞 動詞の処理中に解析エラーが発生しました。
Version_N/S バージョンがサポートされていないエラーが発生しました (HTTP エラー 505)。