問題を診断し、Cloudflare サポートへ十分な詳細を提供する には、できるだけ多くの情報を集めることが重要です。この記事では、Cloudflare サポートがよく依頼するトラブルシューティング情報の集め方を説明します。
問題の種類に応じて、どのトラブルシューティング方法を使うかを、この表で確認します。
| 問題の種類 | 推奨ツール | 使うタイミング |
|---|---|---|
| ページが正しく表示されない | HAR ファイル | 表示の不具合、壊れた要素、ページ読み込みの遅さ |
| JavaScript エラー | コンソールログ | CORS エラー、スクリプトの失敗、ブラウザー側のエラー |
| プロトコルエラー(QUIC / HTTP2) | NetLog ダンプ | ERR_QUIC_PROTOCOL_ERROR、ERR_HTTP2_PROTOCOL_ERROR |
| 応答が遅い | curl(パフォーマンス) | レイテンシ、TLS ハンドシェイク時間の計測 |
| HTTP エラー(5xx、4xx) | curl(HTTP エラー) | エラーが Cloudflare 起因かオリジン起因かの切り分け |
| キャッシュの問題 | curl(キャッシュ) | キャッシュミス、古いコンテンツ、キャッシュヘッダー |
| SSL/TLS 証明書の問題 | curl(SSL/TLS) | 証明書エラー、TLS バージョンの問題 |
| 接続タイムアウト / 切断 | Traceroute / MTR | ネットワークパスの問題、ホップ間のレイテンシ |
| パケットロス、接続リセット | パケットキャプチャ | レイヤー 3/4 の問題、SSL ハンドシェイクの失敗 |
| 配信拠点の特定 | Cloudflare データセンター | リクエストを処理している Cloudflare PoP の確認 |
これらのツールは、Web ブラウザーから直接情報を取得します。ページの読み込みと描画の問題を診断するときに使います。
HTTP Archive(HAR)は、リクエストとレスポンスのヘッダー、本文、ページ読み込み時間を含む、Web ブラウザーの全リクエストを記録します。シークレットモードまたはプライベートブラウジングのウィンドウを使います。
ブラウザーによっては、拡張機能が必要だったり、HAR を生成できなかったりします。ブラウザー拡張機能をインストールするときは、拡張機能提供者の手順に従います。
-
シークレットモードで表示しているページ上で右クリックし、Inspect Element を選びます。
-
Chrome DevTools がブラウザーの下部または左側に表示されます。Network タブをクリックします。
-
Preserve log にチェックを入れます。Cloudflare Cache の問題を報告する場合は、Disable cache にもチェックを入れます。
-
記録を開始します。
- 問題が起きる URL を開きます。問題を再現したら、DevTools 上部の "Export HAR" を選びます。
- HAR ファイルをサポートチケットに添付します。
-
プライベートウィンドウで、アプリケーションメニューから Tools > Web Developer > Network を選ぶか、Ctrl+Shift+I(Windows/Linux)または Cmd+Option+I(OS X)を押します。
-
問題が起きる URL を開きます。
-
問題を再現したあと、右クリックして Save All As HAR を選びます。
-
プライベートウィンドウで Developer tools を開き(ショートカットは
F12)、Network タブを選びます。 -
問題が起きる URL を開きます。
-
問題を再現したあと、Export as HAR をクリックし、続けて Save As... を選びます。
-
Safari のプライベートウィンドウ上部に Develop メニューが表示されていることを確認します。表示されない場合は、Safari > Preferences > Advanced を開き、Show Develop Menu in menu bar を選びます。
-
Develop > Show Web Inspector を開きます。
-
問題が起きる URL を開きます。
-
Web Inspector 内のリソースを Ctrl クリックし、Export HAR をクリックします。
Android の場合:
-
モバイル端末で USB デバッグモードを有効にします。
-
chrome://inspect/#devicesを開きます。 -
デバッグモードが有効なら、次の例のように “Remote Target” の下に端末が表示されます。
-
URL を入力し、Open と inspect を選んで Chrome の DevTools を開きます。
-
DevTools ウィンドウで Network タブを選びます。
-
Preserve log にチェックを入れます。Cloudflare Cache の問題を報告する場合は、Disable cache にもチェックを入れます。
-
record をクリックします。
- 問題が起きる URL を開きます。問題を再現したら、Network タブ内のいずれかの項目を右クリックし、Save all as HAR with Content を選びます。
- 影響を受けている Samsung 端末の画面録画とあわせて、HAR ファイルをサポートチケットに添付します。Samsung 端末での画面録画手順は、Samsung のドキュメント ↗ を参照してください。
iPhone の場合:
iOS 端末で HAR ファイルを生成する方法は、Okta ↗ または Apple ↗ のサポート記事を参照してください。影響を受けている iOS 端末の画面録画とあわせて、HAR ファイルをサポートチケットに添付します。Apple 端末には、いまは 画面録画機能が内蔵 ↗ されています。
ブラウザーがリクエストを発行しない、またはキャンセルする状況(例: CORS ↗)では、根本原因を特定するために、HAR ファイルに加えて JS コンソールログの出力が必要です。
- DevTools バーから Console タブを開きます。
- Console Settings を開き、Preserve Log を選びます。
- コンソールを開いたまま、問題を再現する手順を実行します。
- Console タブ内のいずれかの項目を右クリックし、Save as でログファイルを保存します。
- ログファイルをサポートチケットに添付します。
- Web Developer Tools バーから Console タブを開きます。
- Console Settings を開き、Persist Log と Show Timestamps を選びます。
- コンソールを開いたまま、問題を再現する手順を実行します。
- 右クリックし、メッセージを Select All したあと、Export Visible Messages to File を選びます。
- ログファイルをサポートチケットに添付します。
- Developer Tools バーから Console タブを開きます。
- Console Settings を開き、Preserve Log を選びます。
- コンソールを開いたまま、問題を再現する手順を実行します。
- Console タブ内のいずれかの項目を右クリックし、Save as でログファイルを保存します。
- ログファイルをサポートチケットに添付します。
- Web Inspector バーから Console タブを開きます。
- Preserve Log のチェックを入れます。
- コンソールを開いたまま、問題を再現する手順を実行します。
- メッセージをすべて選び、右クリックして Save Selected でログファイルに保存します。
- ログファイルをサポートチケットに添付します。
プロトコル関連の問題(ERR_QUIC_PROTOCOL_ERROR、ERR_HTTP2_PROTOCOL_ERROR など)をさらに切り分けるため、サポートチームから NetLog ダンプ ↗ の提供を依頼することがあります。
- 新しいタブを開き、使っているブラウザーに応じて次のいずれかを入力します。
chrome://net-exportedge://net-exportopera://net-export
- Start Logging To Disk ボタンをクリックします。
- 別のタブでネットワークの問題を再現します。
(
chrome://net-export/、edge://net-export/、opera://net-exportのタブは開いたままにします。閉じると記録が自動で止まります) - Stop Logging ボタンをクリックします。
- ログファイルをサポートチケットに添付します。
これらのツールはターミナルまたはコマンドプロンプトから実行します。ブラウザーの負荷なしに、接続、パフォーマンス、サーバー応答を確認するときに使います。
データセンターの地図 ↗ は、ステータスページの拠点一覧 ↗ に大陸別に並んでいます。
データセンター名の 3 文字コードは、最寄りの主要な国際空港の IATA コード ↗ です。
ブラウザーのリクエストを処理している Cloudflare データセンターは、次の URL で確認します。
http://``_www.example.com_``/cdn-cgi/trace.
www.example.com を自分のドメインとホスト名に置き換えます。出力の colo フィールドを確認します。
curl ↗ は HTTP/HTTPS リクエストを送るコマンドラインツールで、次の切り分けに役立ちます。
- HTTP/HTTPS のパフォーマンス
- HTTP エラーレスポンス
- HTTP ヘッダー
- API
- サーバー / プロキシ応答の比較
- SSL 証明書
標準の HTTP GET リクエストをサイトへ送るには、次のコマンドを実行します(www.example.com を自分のホスト名に置き換えます)。
curl -svo /dev/null http://www.example.com/この curl の例は、HTTP レスポンスとリクエストヘッダーの詳細を返し、ページ本文は破棄します。curl の出力で、HTTP 応答と、Cloudflare がそのサイトのトラフィックを現在プロキシしているかを確認できます。
HTTP エラー、パフォーマンス、キャッシュ、SSL/TLS 証明書の切り分けのヒントは、次の各節を参照してください。
Cloudflare からの応答で HTTP エラーを切り分けるときは、オリジン Web サーバーへ直接リクエストを送り、オリジンが原因かどうかを確認します。HTTP エラーを切り分けるには、オリジン Web サーバーの IP アドレスへ直接 curl を実行します(Cloudflare のプロキシを迂回します)。
curl -svo /dev/null http://example.com --connect-to ::203.0.113.34curl は、-w または --write-out オプション ↗ で HTTP/HTTPS リクエストのレイテンシや性能低下を測れます。次の例は、TLS ハンドシェイク、DNS ルックアップ、リダイレクト、転送などの所要時間を計測します。
curl -svo /dev/null https://example.com/ -w "\nContent Type: %{content_type} \
\nHTTP Code: %{http_code} \
\nHTTP Connect:%{http_connect} \
\nNumber Connects: %{num_connects} \
\nNumber Redirects: %{num_redirects} \
\nRedirect URL: %{redirect_url} \
\nSize Download: %{size_download} \
\nSize Upload: %{size_upload} \
\nSSL Verify: %{ssl_verify_result} \
\nTime Handshake: %{time_appconnect} \
\nTime Connect: %{time_connect} \
\nName Lookup Time: %{time_namelookup} \
\nTime Pretransfer: %{time_pretransfer} \
\nTime Redirect: %{time_redirect} \
\nTime Start Transfer: %{time_starttransfer} \
\nTime Total: %{time_total} \
\nEffective URL: %{url_effective}\n" 2>&1このタイミング出力の説明 ↗ は Cloudflare ブログにあります。
curl は、キャッシュに影響する HTTP レスポンスヘッダーの確認に使えます。Cloudflare のキャッシュを切り分けるときは、特に次の HTTP ヘッダーを確認します。
- CF-Cache-Status
- Cache-Control/Pragma
- Expires
- Last-Modified
- s-maxage
次の curl コマンドは、HTTPS リクエスト時に Cloudflare が提示する SSL 証明書を表示します(www.example.com を自分のホスト名に置き換えます)。
curl -svo /dev/null https://www.example.com/ 2>&1 | egrep -v "^{.*$|^}.*$|^* http.*$"オリジン証明書を表示するには(インストールされている場合)、次の 203.0.113.34 をオリジン Web サーバーの実際の IP アドレスに、www.example.com を自分のドメインとホスト名に置き換えます。
curl -svo /dev/null https://www.example.com --connect-to ::203.0.113.34 2>&1 | egrep -v "^{.*$|^}.*$|^* http.*$"ブラウザー対応を切り分けるときや、対応している TLS バージョンを確認するときは、curl に --tlsv1.X ↗ と --tls-max ↗ を付けて、特定の TLS バージョンをテストできます。
--tlsv1.0 --tls-max 1.0--tlsv1.1 --tls-max 1.1--tlsv1.2 --tls-max 1.2--tlsv1.3 --tls-max 1.3
詳細は Cloudflare の一時停止 を参照してください。
これらのツールは、所在地から Cloudflare またはオリジンサーバーまでの経路の問題、パケットロス、接続失敗など、ネットワークレベルの問題を診断します。
Traceroute は、ネットワーク上のパケット経路のレイテンシを測る診断ツールです。ほとんどのオペレーティングシステムが traceroute コマンドに対応しています。Cloudflare がプロキシしているサイトで接続の問題が起き、Cloudflare サポートに支援を依頼する ときは、traceroute の出力を必ず提供します。
オペレーティングシステムごとの traceroute の手順は次のとおりです。次の例の www.example.com は、自分のドメインとホスト名に置き換えます。
-
Start メニューを開きます。
-
Run をクリックします。
-
コマンドラインインターフェイスを開くには、cmd と入力して OK をクリックします。
-
コマンドラインプロンプトで、次を入力します。
IPv4 の場合 -
tracert www.example.comIPv6 の場合 -
tracert -6 www.example.com-
Enter を押します。
-
結果をコピーしてファイルに保存するか、別のプログラムに貼り付けできます。
-
ターミナルウィンドウを開きます。
-
コマンドラインプロンプトで、次を入力します。
IPv4 の場合 -
traceroute www.example.comIPv6 の場合 -
traceroute -6 www.example.com- 結果をコピーしてファイルに保存するか、別のプログラムに貼り付けできます。
- Network Utility アプリケーションを開きます。
- Traceroute タブをクリックします。
- 該当する入力欄に ドメイン または IP アドレス を入力し、Trace を押します。
- 結果をコピーしてファイルに保存するか、別のプログラムに貼り付けできます。
Mac OS のターミナルを使う場合は、上の Linux 向け traceroute 手順でも実行できます。
CF-RAY ヘッダーは、ウェブサイトへのリクエストを Cloudflare ネットワーク上で追跡します。問題を切り分けるときは、Web リクエストの CF-RAY を Cloudflare サポートへ提供します。使っている Web サーバーに応じた次のスニペットでオリジン Web サーバーの設定を編集すると、ログに CF-RAY を追加できます。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %{CF-Ray}i" cf_customlog_format cf_custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$http_cf_ray';My Traceroute(MTR)は、traceroute と ping を組み合わせてネットワークパスの健全性を測るツール ↗です。ネットワークの接続と速度を調べる、よく使う方法のひとつです。パス上のホップに加えて、宛先までの経路のレイテンシとパケットロスを継続的に更新して表示します。パス上でいま何が起きているかをリアルタイムに見られるため、ネットワーク問題の切り分けに役立ちます。
MTR は traceroute と同様の方法でネットワークパスを発見し、そのあと定期的にパケットを送って情報を集め続け、ネットワークの健全性と速度の最新の見取り図を提供します。
traceroute と同様に、MTR は送信パケットに ICMP または UDP を使え、戻りパケット(Type 11: Time Exceeded)には ICMP を使います。
UNIX 系マシンで MTR を使う
一般的には、次のように MTR を使います。
mtr -rw <dest_hostname> e.g.: mtr -rw one.one.one.oneまたは宛先 IP で:
mtr -rw <dest_IP> e.g.: mtr -rw 1.1.1.1TCP ポートを指定する場合
mtr -P <tcp port> -T <destination ip>MTR の分析については、次のドキュメントを参照してください。How to read MTR ↗
レイヤー 3/4 で起きる問題は、リクエストが Cloudflare のログシステムに届く前に発生するため、HTTP ログには出ません。そのため、接続リセット、パケットロス、SSL ハンドシェイクの失敗は、パケットレベルで深く調べないと切り分けが難しいことがあります。
Cloudflare が生成する一部の HTTP エラー(520、524、525 など)は、レイヤー 3/4 の問題を示しており、さらに調べるためにパケットキャプチャが必要になることがあります。
パケットキャプチャの実行方法
パケットキャプチャには Wireshark ↗ を推奨します。tcpdump コマンドラインの使い方は、この記事 ↗ を参照してください。
- あとで表示フィルターを多用しなくて済むよう、バックグラウンドでデータを送る可能性のあるプログラムやブラウザーのタブをすべて閉じます。
- Wireshark のキャプチャフィルターを作成します(詳細は この記事 ↗ を参照してください)。
- 適切なインターフェイスを選びます(例: Wi-Fi: en0)。どのインターフェイスを使うか分からない場合は、Wireshark が各インターフェイスの I/O グラフを表示するので、それを手がかりにします。
- 左上の青いサメのひれアイコンをクリックして、パケットキャプチャを開始します。
- キャプチャを実行したまま、問題を再現します。
- 左上の赤い四角アイコンをクリックして、パケットキャプチャを停止します。
.pcapファイルとして保存し、サポートチケットに添付します。