Skip to content

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

オブザーバビリティ

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

Cloudflare Tunnel は、トンネルの健全性を監視し、問題を解決するためのログ、メトリクス、診断ツールを提供します。

トンネルの健全性

トンネルの接続状態は、Cloudflare ダッシュボードNetworking > Tunnels で確認するか、cloudflared tunnel list を実行して確認できます。

Tunnels を開く ↗
ステータス 意味 推奨される対応
Healthy トンネルは稼働中で、Cloudflare グローバルネットワークへの 4 本の接続経由でトラフィックを処理しています。 対応は不要です。トンネルは正常に動作しています。
Inactive トンネルは作成済み(API またはダッシュボード経由)ですが、接続を確立するために cloudflared コネクタが一度も実行されていません。 オリジンサーバーに cloudflared をインストールして実行し、トンネルを Cloudflare に接続します。インストールコマンドは、Cloudflare ダッシュボードの Networking > Tunnels で対象のトンネルを選び、Overview タブで Add a replica を選ぶと確認できます。API で設定する場合は、トンネルをインストールして実行する を参照してください。
Down 以前は接続されていましたが、cloudflared プロセスが停止したため、現在は切断されています。 1. サーバー上で cloudflared サービス またはプロセスが動いていることを確認します。
2. マシンの電源オフ、アプリケーションのクラッシュ、最近のネットワーク変更など、サーバー側の問題がないかを確認します。
Degraded cloudflared コネクタは動いており、トンネルはトラフィックを処理していますが、少なくとも 1 本の接続が失敗しています。トンネルの可用性 がさらに低下すると、トンネルがダウンしてトラフィックを処理できなくなるおそれがあります。 1. cloudflaredログ で接続失敗やエラーメッセージを確認します。
2. ローカルネットワークとファイアウォールのルールを調べ、Cloudflare Tunnel の IP とポート への接続がブロックされていないことを確認します。

通知

管理者は、トンネルの健全性やデプロイ状態が変わったときにアラートを受け取れます。通知は、メール、webhook、サードパーティサービスで配信できます。

トンネル通知を設定するには、通知を作成する を参照してください。

Tunnel Creation or Deletion Event

対象

アカウント内で Cloudflare Tunnel が作成または削除されたときに通知を受け取りたいお客様向けです。

その他のオプション / フィルタ

なし。

含まれるプラン

すべての Cloudflare Zero Trust プラン。

受け取ったときの対応

対応は不要です。

Tunnel Health Alert

対象

Cloudflare Tunnel の健全性ステータスの変化を知りたいお客様向けです。

その他のオプション / フィルタ

なし。

含まれるプラン

すべての Cloudflare Zero Trust プラン。

受け取ったときの対応

トンネルの健全性を継続的に監視し、cloudflared のレプリカまたはロードバランサー の導入を検討します。

補足

取り得るトンネルステータス(HealthyInactiveDownDegraded)は Tunnel status を参照してください。

ログ

トンネルログは、cloudflared と Cloudflare グローバルネットワーク間のすべてのアクティビティと、cloudflared とオリジンサーバー間のすべてのアクティビティを記録します。

サーバーサイドログ

オリジンサーバーにアクセスできる場合は、トンネル起動時に --loglevel フラグ でログを有効にできます。デフォルトでは、cloudflared はログを標準エラー(stderr)へ書き込み、サーバー上には保存しません。

各ログ行を JSON オブジェクトとして整形するには、run の前に --output json を追加します。

cloudflared tunnel --output json run <UUID>

この形式は、Kubernetes のデプロイや、JSON を取り込むログ収集システムで便利です。

日常的な永続ログには、--log-directory <PATH> を付けて トンネルを実行 します。このフラグは、指定したディレクトリの cloudflared.log へログを書き込み、ファイルが 1 MB に達するとローテーションし、バックアップを最大 5 つ保持します。経過日数によるログ削除は行いません。

cloudflared tunnel --loglevel info --log-directory <PATH> run <UUID>

短いトラブルシューティングや、別のツールがローテーションを管理している場合は、代わりに --logfile フラグ を使います。cloudflared--logfile で指定したファイルをローテーションしません。両方のフラグを設定した場合は、--logfile が優先されます。

リモートログストリーミング

実行中のトンネルから、サーバーへの SSH アクセスなしでリアルタイムログをストリーミングできます。

cloudflared デーモンは、アカウント内の任意のトンネルのログをローカルのコマンドラインへストリーミングできます。ローカルマシンとオリジンサーバーの両方に cloudflared をインストールする必要があります。

  1. ローカルマシンで、cloudflared を Cloudflare アカウントに認証します。

    cloudflared tunnel login
  2. 特定のトンネルに対して cloudflared tail を実行します。

    cloudflared tail <UUID>

    JSON メッセージをより構造化された形で見るには、出力を jq などのツールへパイプできます。

    cloudflared tail --output=json <UUID> | jq .
  1. 複数の レプリカ を実行している場合は、ログをストリーミングするレプリカを指定できます:
    cloudflared tail --connector-id <REPLICA ID> <UUID>
    レプリカ ID を確認するには、Networking > Tunnels を開き、トンネルを選択します。アクティブなレプリカはすべて、トンネル概要ページの Connectors リストに表示されます。レプリカ ID は Connector ID です。

ログのフィルターオプション

イベント種別(--event)、イベントレベル(--level)、またはサンプリングレート(-sampling)でログを絞り込むと、オリジンからストリーミングされるログ量を減らせます。オリジンへの負荷、とくに常時高負荷のオリジンへの影響を抑えられます。例:

cloudflared tail --level debug <UUID>
フラグ 説明 指定できる値 デフォルト値
--event イベント / リクエストの種別で絞り込みます。 cloudflared, http, tcp, udp すべてのイベント
--level このレベル以上のログを返します。サーバー側の --loglevel 設定とは独立して動作します。 debug, info, warn, error, fatal debug
--sampling 全ログのうち一部をサンプリングします。 0.0 から 1.0 の数値 1.0

ダッシュボードからトンネルログをストリーミングするには、次の手順を実行します。

  1. Cloudflare ダッシュボードで Networking > Tunnels を開き、対象のトンネルを選択します。

    Tunnels を開く ↗
  2. Live logs タブを開きます。

  3. Live を選択してストリーミングを開始します。

レプリカのログを表示する

同じトンネルに対して複数の cloudflared インスタンス(レプリカ とも呼ばれます)を動かしている場合、接続中のすべてのレプリカのログが自動でストリーミングされ、ホスト名ごとにグループ化されます。どのホストマシンが各ログエントリを出したかを識別しやすくなります。

特定のレプリカにストリームを絞り込むには、Filter アイコンを選択し、Replicas セクションを展開します。Log LevelEvent Type でも絞り込めます。

メトリクス

トンネルメトリクスは、Cloudflare Tunnel のスループットとリソース使用量の推移を示します。トンネルを起動すると、cloudflared は Prometheus メトリクスエンドポイント(Prometheus 形式でメトリクスを公開する HTTP サーバー)を立ち上げます。リモートマシン上の Prometheus ツールキットを使い、cloudflared サーバーからメトリクスデータをスクレイプできます。

デフォルトのメトリクスサーバーアドレス

コンテナ化していない環境では、cloudflared はメトリクスサーバーを 127.0.0.1:<PORT>/metrics で起動します。<PORT>20241 から 20245 の範囲で最初に使えるポートです。すべてのポートが使えない場合、cloudflared はランダムなポートにバインドします。コンテナ環境(Docker、Kubernetes)では、デフォルトのアドレスは 0.0.0.0:<PORT>/metrics です。

デフォルトのポートを確認するには、トンネル起動前後の トンネルログ を確認します。例:

2024-12-19T21:17:58Z INF Starting metrics server on 127.0.0.1:20241/metrics

カスタムアドレスを設定する

カスタムの IP アドレスとポートでメトリクスを公開するには、cloudflared ホストで次の手順を実行します。

  1. トンネルを実行 し、--metrics フラグを付けます。例:

    cloudflared tunnel --metrics 127.0.0.1:60123 run my-tunnel
  2. http://localhost:60123/metrics にアクセスし、メトリクスサーバーが動作していることを確認します。これは、localhost の IP(127.0.0.1 または 0.0.0.0)を設定した場合にだけ機能します。

これで、メトリクスを Prometheus と Grafana にエクスポートし、可視化とクエリができます。これらのツールの始め方は、Grafana チュートリアル を参照してください。

cloudflared のメトリクス

名前 説明 種類 ラベル
build_info ビルドとバージョンの情報です。 GAUGE goversionrevisiontypeversion
cloudflared_config_local_config_pushes Cloudflare へのローカル設定プッシュ回数です。 COUNTER
cloudflared_config_local_config_pushes_errors ローカル設定プッシュ中に発生したエラー回数です。 COUNTER
cloudflared_orchestration_config_version 設定のバージョンです。 GAUGE
cloudflared_tcp_active_sessions いずれかのオリジンへプロキシ中の TCP セッションの同時数です。 GAUGE
cloudflared_tcp_total_sessions いずれかのオリジンへプロキシした TCP セッションの合計数です。 COUNTER
cloudflared_tunnel_active_streams アクティブなストリームの合計数です。 GAUGE
cloudflared_tunnel_concurrent_requests_per_tunnel 各トンネル経由でプロキシしているリクエストの同時数です。 GAUGE
cloudflared_tunnel_ha_connections アクティブな HA 接続の数です。 GAUGE
cloudflared_tunnel_request_errors オリジンへのプロキシ中に発生したエラー回数です。 COUNTER
cloudflared_tunnel_server_locations 各トンネルの接続先です。1 は現在のロケーション、0 は以前のロケーションを表します。 GAUGE connection_idedge_location
cloudflared_tunnel_timer_retries 未確認のハートビート数です。 GAUGE
cloudflared_tunnel_total_requests すべてのトンネル経由でプロキシしたリクエスト数です。 COUNTER
cloudflared_tunnel_tunnel_authenticate_success トンネル認証が成功した回数です。 COUNTER
cloudflared_tunnel_tunnel_register_success トンネル登録が成功した回数です。 COUNTER rpcName
cloudflared_udp_active_sessions いずれかのオリジンへプロキシ中の UDP セッションの同時数です。 GAUGE
cloudflared_udp_total_sessions いずれかのオリジンへプロキシした UDP セッションの合計数です。 COUNTER
coredns_panics_total パニックの回数です。 COUNTER
quic_client_closed_connections 閉じた接続の数です。 COUNTER
quic_client_latest_rtt 接続で計測した最新のラウンドトリップ時間(RTT)です。 GAUGE conn_index
quic_client_lost_packets 接続から失われたパケット数です。 COUNTER conn_indexreason
quic_client_min_rtt 接続で計測した最小 RTT(ミリ秒)です。 GAUGE conn_index
quic_client_packet_too_big_dropped オリジンから受信したパケットのうち、Cloudflare へ送れず破棄した数です。 COUNTER
quic_client_smoothed_rtt 接続で算出した平滑化 RTT(ミリ秒)です。 GAUGE conn_index
quic_client_total_connections 開始した接続の数です。QUIC メトリクスでは、client は接続を開始した側を指します。 COUNTER

Prometheus のメトリクス

名前 説明 タイプ ラベル
promhttp_metric_handler_requests_in_flight 現在処理中のスクレイプ数です。 GAUGE
promhttp_metric_handler_requests_total HTTP ステータスコード別のスクレイプ総数です。 COUNTER code

Go ランタイムのメトリクス

名前 説明 種類 ラベル
go_gc_duration_seconds ガベージコレクションサイクルの一時停止時間のサマリーです。 SUMMARY
go_goroutines 現在存在する goroutine の数です。 GAUGE
go_info Go 環境に関する情報です。 GAUGE version
go_memstats_alloc_bytes 割り当て済みで、まだ使用中のバイト数です。 GAUGE
go_memstats_alloc_bytes_total 解放済みを含む、割り当てたバイト数の合計です。 COUNTER
go_memstats_buck_hash_sys_bytes プロファイリング用バケットハッシュテーブルが使うバイト数です。 GAUGE
go_memstats_frees_total 解放回数の合計です。 COUNTER
go_memstats_gc_sys_bytes ガベージコレクションのシステムメタデータが使うバイト数です。 GAUGE
go_memstats_heap_alloc_bytes 割り当て済みで、まだ使用中のヒープバイト数です。 GAUGE
go_memstats_heap_idle_bytes 使用待ちのヒープバイト数です。 GAUGE
go_memstats_heap_inuse_bytes 使用中のヒープバイト数です。 GAUGE
go_memstats_heap_objects 割り当て済みオブジェクトの数です。 GAUGE
go_memstats_heap_released_bytes OS へ解放したヒープバイト数です。 GAUGE
go_memstats_heap_sys_bytes システムから取得したヒープバイト数です。 GAUGE
go_memstats_last_gc_time_seconds 前回のガベージコレクションの Unix 時刻(1970 年からの秒数)です。 GAUGE
go_memstats_lookups_total ポインター参照回数の合計です。 COUNTER
go_memstats_mallocs_total malloc 回数の合計です。 COUNTER
go_memstats_mcache_inuse_bytes mcache 構造体が使用中のバイト数です。 GAUGE
go_memstats_mcache_sys_bytes システムから取得した mcache 構造体のバイト数です。 GAUGE
go_memstats_mspan_inuse_bytes mspan 構造体が使用中のバイト数です。 GAUGE
go_memstats_mspan_sys_bytes システムから取得した mspan 構造体のバイト数です。 GAUGE
go_memstats_next_gc_bytes 次のガベージコレクションが実行されるヒープバイト数です。 GAUGE
go_memstats_other_sys_bytes その他のシステム割り当てが使うバイト数です。 GAUGE
go_memstats_stack_inuse_bytes スタックアロケーターが使用中のバイト数です。 GAUGE

診断ログ

Cloudflare Tunnel は、ローカルマシンで実行中の単一の 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-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 で動作している場合は不要です。

役に立ちましたか?