ARR バージョン 2.0 以降のキャッシュ項目のトラブルシューティング
適用対象: インターネット インフォメーション サービス
概要
このチュートリアルでは、ARR を通過して次の層のサーバーに送信されるときに要求をトレースする方法を学習し、取得できる情報を調べて、要求が送信された場所と、要求が提供された場所を特定します。
このトラブルシューティング ツールで使用されるツール
- ARR ヘルパー
- 失敗した要求トレース (FREB)
- IIS 詳細ログ
- ネットワーク モニター
ファームのアーキテクチャを理解する
最初の手順は、次のような環境のアーキテクチャを理解することです。
- ARR ファーム トポロジ (サーバーの数、ルーティングの構成方法、他のデバイス)
- 適用されている URL 書き換えルール
このチュートリアルでは、次の構成を使用して要求をトレースできます。
ディスク キャッシュの構成
次のコード スニペットは、最大サイズが 100 GB のローカル ドライブが構成されていることを示しています。
<diskCache>
<driveLocation path="E:\temp$\arrcache" maxUsage="100" />
</diskCache>
グローバル キャッシュ制御規則
この規則は、キャッシュ制御ディレクティブが存在しない場合に 60 分間キャッシュとして定義されます。
<rule name="ARR_CacheControl_b5aec65d-6327-407f-a28c-b34e48c5cda2" enabled="true" patternSyntax="Wildcard">
<match url="*" />
<serverVariables>
<set name="ARR_CACHE_CONTROL_OVERRIDE" value="0,max-age=3600" />
</serverVariables>
</rule>
データ収集計画を作成する
このセクションでは、ARR を通過する際のキャッシュ ヒットとミスのフローについて説明し、要求の調査に使用できるツールまたはログを特定します。 次の手順では、参照として提供される構成と、各手順で使用されるツールを使用して、以前にキャッシュされていないコンテンツの要求フローの概要を示します。
要求されたコンテンツがローカルに見つかりません (メモリ内でも子ノード上のディスク上にも見つかりません)。
- FREB ログ
- IIS 組み込みログ
- ネットワーク モニター
要求は、次の層のキャッシュ ノード (親ノード) に転送されます。
- FREB ログ
- IIS 詳細ログ モジュール
- IIS 組み込みログ
- ネットワーク モニター
要求されたコンテンツは、次の層のキャッシュ ノード (メモリ内でもディスク上でも) で見つかりません。 キャッシュ階層に基づいて、ポイント 2 を必要な回数繰り返します。
要求は配信元サーバーに転送されます。
- FREB ログ
- IIS 組み込みログ
- ネットワーク モニター
データを収集する
要求されたコンテンツがローカルに見つかりません (メモリ内でもディスク上でも見つかりません)
ここでは、IIS ログまたは FREB ログのいずれかでキャッシュ ヒットまたはミスを識別できます。 FREB ログでは、要求がルーティングされた場所などの追加の詳細が提供されます。これは、複数のダウンレベル サーバーがある場合に重要です。
IIS ログ エントリ - cs-uri-query フィールドには、キャッシュヒットまたはミスと要求の GUID を識別する次のエントリが表示されます。これは、ダウン レベル サーバーの要求を識別するために使用できます。
X-ARR-CACHE-HIT=0
0 = Cache miss, 1 = Cache hit
X-ARR-LOG-ID=62a3161c-b4f5-408e-9ce7-55d25c018aea
Guid identifying this request. This can be used to track as the request is passed to Parent nodes.
FREB ログ エントリ - エントリ ARR_DISK_CACHE_GET_FAILED
によってキャッシュ ミスが見つかりました。
Type | 入力 | 詳細 |
---|---|---|
r | ARR_DISK_CACHE_GET_FAILED Warning | FilePath="\?\C:\ARRCache\localhost\iisstart.htm.full", ErrorCode="システムで指定されたファイルが見つかりません。 (0x80070002)", IsRangeEntry="false", RangeOffset="0", RangeSegmentSize="0" |
要求のルーティング先のサーバーを識別します。 サーバー W2K8WEBSERVER2
に送信されている要求を確認します。これは、データ レビューの次のレベルのサーバーになります。
Type | 入力 | 詳細 |
---|---|---|
i | ARR_SERVER_ROUTED | RoutingReason="LoadBalancing", Server="W2K8WEBSERVER2", State="Active", TotalRequests="8", FailedRequests="0", CurrentRequests="1", BytesSent="1127", BytesReceived="6441379", ResponseTime="31351" |
次のヘッダーが、転送のために要求に追加されます。 X-Forwarded-For
、X-ARR-ClientCert
、X-ARR-LOG-ID
などの既定の名前と異なる名前がある場合、名前はサーバー ファーム プロキシ設定でカスタマイズされています。
ヘッダー | 詳細 |
---|---|
GENERAL_SET_REQUEST_HEADER | HeaderName="Max-Forwards", HeaderValue="10", Replace="true" |
GENERAL_SET_REQUEST_HEADER | HeaderName="X-Forwarded-For", HeaderValue="127.0.0.1:62489", Replace="true" |
GENERAL_SET_REQUEST_HEADER | HeaderName="X-ARR-SSL", HeaderValue="", Replace="true" |
GENERAL_SET_REQUEST_HEADER | HeaderName="X-ARR-ClientCert", HeaderValue="", Replace="true" |
GENERAL_SET_REQUEST_HEADER | HeaderName="X-ARR-LOG-ID", HeaderValue="fe9d20da-a571-4451-8ef3-0e7faf1a463a", Replace="true" |
要求は、次の層のキャッシュ ノード (親ノード) に転送されます
前の手順では、このサーバーを W2K8WEBSERVER2
として識別しました。 この手順では、このサーバー上の次のデータを調べることができます。 使用できるデータ ポイントは複数あります。 X-ARR-LOG-ID
を使用すると、要求がこのサーバーに到達したかどうかを識別できます。
FREB ログ - 要求は、子ノードから送信された X-ARR-LOG-ID
によって識別できます。 fe9d20da-a571-4451-8ef3-0e7faf1a463a
は、前の手順で識別されました。
ヘッダー | 詳細 |
---|---|
GENERAL_REQUEST_HEADERS | Headers="Connection: Keep-Alive Accept: */* Host: localhost Max-Forwards: 10 X-Original-URL: /iisstart.htm X-Forwarded-For: 127.0.0.1:62489 X-ARR-LOG-ID: fe9d20da-a571-4451-8ef3-0e7faf1a463a |
IIS 詳細ログ モジュール - 高度なログ記録を使用して、ヘッダーのX-Forwarded-For
とX-ARR-LOG-ID
に基づいてカスタム ログ フィールドを追加し、フィルター処理を使用して、これらのヘッダーが存在する場合にのみログを記録できます。
#Software: IIS Advanced Logging Module
#Version: 1.0
#Start-Date: 2009-10-16 18:42:51.494
#Filter: ((ARRLogID isPresent ) || (xforward isPresent ))
#Fields: date time cs-uri-stem cs-uri-query s-contentpath sc-status s-computername cs(Referer) sc-win32-status sc-bytes cs-bytes X-ARR-LOG-ID X-Forwarded-For
2009-10-16 18:51:29.983 /iisstart.htm - "C:\inetpub\wwwroot\iisstart.htm" 200 "W2K8WEBSERVER2" - 0 1680 219 "fe9d20da-a571-4451-8ef3-0e7faf1a463a" "127.0.0.1:62489"
ネットワーク モニター - トレースを使用して X-ARR-LOG-ID
を識別し、特定の要求をトレースする場合は X-Forwarded-For
します。
ARR ヘルパー - このモジュールでは、C-IP
フィールドに X-Forwarded-For
ヘッダーを追加し、既定の IIS ログの cs-uri-query
フィールドに X-ARR-LOG-ID
ヘッダーを追加します。
Note
ArrHelper は現在、Microsoft ではサポートされていません。
複数のレベルのキャッシュに対して手順 1 と 2 を繰り返す
サーバーの親ノード W2K8WEBSERVER2
ARR とキャッシュ機能を使用して設定されている場合は、IISLOGS または FREB を調べて、キャッシュヒットまたはミスがあるかどうかを確認し、そのキャッシュのエントリの状態に応じて続行する場所を決定する必要があります。
要求は配信元サーバーに転送されます
この手順は通常の HTTPS 要求として扱われ、次のツールを使用して追跡できます。
- ネットワーク モニター - 配信元サーバー上のトレースをキャプチャして、要求の受信を確認します。
- IIS ログ - IIS ログで、トレースしているコンテンツの HTTP 応答コードを確認します。
- IIS FREB ログ - 要求がネットワーク トレースで見つかり、HTTP 応答コードが 200 でなかった場合は、FREB をもう一度使用して問題のトラブルシューティングを行う必要があります。
キャッシュエラーのトラブルシューティング
Cache-Control ヘッダーを確認する
クライアントから受信した Cache-Control ヘッダーを確認します。 これは、ヘッダーをオーバーライドするようにヘッダーを構成できるため、キャッシュコントロールルールのチェックと組み合わせて行うことができます。
ARR でキャッシュ制御ルールを確認する
ARR のキャッシュ制御規則を調べて、ARR キャッシュが有効になっているかどうかを確認します。
HTTP.SYS 設定を確認する
カーネル内の HTTP.sys によってコンテンツがキャッシュされない理由の詳細については、「HTTP.sysがコンテンツをキャッシュしない Instances」を参照してください。
ディスク キャッシュ エラー
ARR は、ディスク障害が発生したときにアプリケーション イベント ログにイベントを記録し、ディスクを異常としてマークします。
Log Name: Application
Source: Application Request Routing
Date: 11/2/2009 5:26:59 PM
Event ID: 1006
Task Category: None
Level: Warning
Keywords: Classic
User: N/A
Computer:
Description: Drive with path '\?\E:\temp$\arrcache\' is being marked unhealthy. The data contains the error code.
Event Xml: