Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

トンネル診断ログ

最終更新 Markdown で表示Agent セットアップ

Cloudflare Tunnel は、cloudflared の問題を切り分けるための診断ログを生成します。診断レポートは、ローカルマシンで実行中の cloudflared インスタンス 1 つからデータを収集します。

診断ログを取得する

診断ログの取得手順は、cloudflared のデプロイ環境によって異なります。

前提条件

  • ホストに cloudflared バージョン 2024.12.2 以降がインストールされていること

ホスト環境

これらの手順は、ホストマシン上で直接実行しているリモート管理トンネルとローカル管理トンネルに適用されます。

  1. (Linux のみ)ログにネットワーク診断を含めるには、cloudflared ユーザーが root 権限なしで RAW ソケットと PACKET ソケットを作成できるようにします。

    sudo setcap cap_net_raw+ep /usr/bin/traceroute && sudo setcap cap_net_raw+ep /usr/bin/traceroute

    cap_net_raw を設定しない場合、traceroute のデータは利用できません。

  2. 診断ログを取得します。

    cloudflared tunnel diag

    同じホストで複数の cloudflared インスタンスが動いている場合は、診断したいインスタンスの メトリクスサーバーの IP とポート を指定します。例:

    cloudflared tunnel diag --metrics 127.0.0.1:20241

このコマンドは各診断タスクのステータスを出力し、作業ディレクトリに cloudflared-diag-YYYY-MM-DDThh-mm-ss.zip ファイルを作成します。

Docker

cloudflared は、診断データを トンネルメトリクスサーバー から読み取ります。診断ログを取得するには、メトリクスサーバーを Docker コンテナから公開し、ホストマシンから到達できる必要があります。

  1. Docker で実行中の cloudflared インスタンスの メトリクスサーバーのポート を確認します。

  2. コンテナをポート転送ありでデプロイします。診断機能はローカルポート 20241 を使って Docker インスタンスから情報を取得するため、手順 1 で確認したコンテナポートへ 20241 を転送します。

    docker run -d -p 20241:<metrics_port> docker.io/cloudflare/cloudflared tunnel ...
  3. Docker ホスト環境からメトリクスサーバーのアドレスに到達できることを確認します。

    curl localhost:20241/diag/tunnel

    このコマンドは次のような JSON を返します。

    {
      "tunnelID": "ef96b330-a7f5-4bce-a00e-827ce5be077f",
      "connectorID": "d236670a-9f74-422f-adf1-030f5c5f0523",
      "connections": [
        { "isConnected": true, "protocol": 1, "edgeAddress": "198.41.192.167"},
        {"isConnected": true, "protocol": 1, "edgeAddress": "198.41.200.113", "index": 1},
        {"isConnected": true, "protocol": 1, "edgeAddress": "198.41.192.47", "index": 2},
        {"isConnected": true, "protocol": 1, "edgeAddress": "198.41.200.73", "index": 3}
      ],
      "icmp_sources": ["192.168.1.243", "fe80::c59:bd4a:e815:ed6"]
    }
  4. Docker コンテナ ID を指定して診断を実行します。

    cloudflared tunnel diag --diag-container-id=<containerID>

    コンテナ ID の代わりにコンテナ名を指定することもできます。

    cloudflared tunnel diag --diag-container-id=<containerName>

    コンテナ ID を指定して診断コマンドを実行すると、cloudflared はログやコンテナの詳細など、Docker 環境から情報を収集できます。

このコマンドは各診断タスクのステータスを出力し、作業ディレクトリに cloudflared-diag-YYYY-MM-DDThh-mm-ss.zip ファイルを作成します。

Kubernetes

診断機能は、ポート 20241 から 20245 を使って トンネルメトリクスサーバー からデータを取得します。ローカルの cloudflared インスタンスがこれらのポートのいずれかでメトリクスサーバーに接続できるよう、ポート転送が必要です。

  1. トンネルの メトリクスサーバーのポート を確認します。

  2. ポート転送を有効にします。

    kubectl port-forward <pod> <diagnostic_port>:<metrics_port>
    • <pod>: トンネルが動いている Pod の名前
    • <diagnostic_port> は、20241 から 20245 の範囲内の任意のローカルポートです。
    • <metrics_port> は、診断対象の cloudflared インスタンスの Kubernetes Pod ポートです(手順 1 で確認します)。

    たとえば、メトリクスサーバーのアドレスを 0.0.0.0:12345 に設定している場合:

    kubectl port-forward cloudflared-6d4897585b-r8kfz 20244:12345

    ローカルポート 20244 への接続は、トンネルが動いている Pod のポート 12345 へ転送されます。

  3. 診断を実行します。

    cloudflared tunnel diag --diag-pod-id=<podID>

    Pod で複数のアプリケーション/サービスが動いており、cloudflared が Pod 内の先頭でない場合は、コンテナ ID または名前を指定する必要があります。

    cloudflared tunnel diag --diag-pod-id=<podID> --diag-container-id=<containerName>

このコマンドは各診断タスクのステータスを出力し、作業ディレクトリに cloudflared-diag-YYYY-MM-DDThh-mm-ss.zip ファイルを作成します。

cloudflared-diag ファイル

cloudflared-diag-YYYY-MM-DDThh-mm-ss.zip アーカイブには、次のファイルが含まれます。各ファイルのデータは、診断対象の cloudflared インスタンス(diagnosee)か、診断を開始したインスタンス(diagnoser)のどちらかに対応します。たとえば、トンネルが Docker コンテナで動作している場合、diagnosee は Docker インスタンス、diagnoser はホストインスタンスです。

ファイル名 説明 インスタンス
cli-configuration.json トンネル起動時に使った トンネル実行パラメーター diagnosee
cloudflared_logs.txt トンネルログファイル1 diagnosee
configuration.json トンネル構成パラメーター diagnosee
goroutine.pprof pprof が提供する goroutine プロファイル diagnosee
heap.pprof pprof が提供するヒーププロファイル diagnosee
metrics.txt 診断時点の トンネルメトリクス のスナップショット diagnosee
network.txt IPv4 と IPv6 を使った、Cloudflare グローバルネットワークへの JSON traceroute diagnoser
raw-network.txt IPv4 と IPv6 を使った、Cloudflare グローバルネットワークへの生の traceroute diagnoser
systeminformation.json OS 情報とリソース使用状況 diagnosee
task-result.json 各診断タスクの結果 diagnoser
tunnelstate.json 診断時点のトンネル接続 diagnosee

Footnotes

  1. ログファイルが空の場合は、トンネル起動時に --logleveldebug に設定 する必要があることがあります。--loglevel パラメーターが必要になるのは、CLI で cloudflared tunnel run コマンドを使ってトンネルを実行した場合だけです。Linux / macOS のサービスとして動作している場合や、Docker / Kubernetes で動作している場合は不要です。

役に立ちましたか?