Cloudflare WorkersのRPCトレースで遅延箇所を特定する

Cloudflare WorkersのRPCトレースで、遅い顧客リクエストを別のWorkerやDurable Objectまで追跡。担当サービスとメソッドを見つける手順、サンプリング率、保持期間、2026年10月1日以降のスパン単位の料金まで、チェックアウトの例で実践的に解説します。

公開日

Cloudflare WorkersのRPCトレースで遅延箇所を特定する

2026年9月17日、Cloudflareは、遅い顧客リクエストの原因を切り分けやすくしました。Cloudflare Workersのトレーシングが呼び出し元で途切れず、JavaScript RPC呼び出しの先にある別のWorkerやDurable Objectまで追跡できるようになったためです。手動でスパンを追加したりスタック全体を疑ったりする前に、どのサービスのどのメソッドがリクエストを滞らせたのかを確認できます。

Cloudflare Workersの分散トレーシングで埋まった「空白区間」

RPCは、言葉の印象ほど複雑ではありません。Cloudflare Workersにおけるリモートプロシージャコールとは、あるWorkerがバインディングを介し、別のWorkerやDurable Objectで公開されているJavaScriptメソッドを呼び出す仕組みです。コード上はローカルメソッドの呼び出しに見えても、実際の処理は別の場所で走ります。

トレースは、1件のリクエストを時系列で表したものです。その中で計測される個々の処理単位をスパンと呼びます。今回のリリース以前は、呼び出し元がJavaScript RPCの境界を越えたところで、この時系列が途切れていました。Worker Aが呼び出したことは分かっても、その呼び出しとWorker BやDurable Objectで動く処理をきれいに結び付けられなかったのです。

Cloudflareが9月17日に公開したアップデートは、この空白を埋めます。同じトレース上で、呼び出し元側のセッション、各メソッド呼び出し、呼び出し先の実行、ネストした呼び出し、さらに別のWorkerへのコールバックまで確認できるようになりました。トレーシングを有効にすれば、これらのスパンはCloudflareが自動で記録します。このプラットフォーム側の計測に、オブザーバビリティSDKの追加やアプリケーションコードの変更は必要ありません。

セッションスパンは、呼び出し元側のRPCセッションをまとめるコンテナです。同じセッションを再利用する呼び出しは、その配下に並びます。個々の呼び出しスパンにはメソッド名やプロパティパスが記録され、呼び出し先には独立した実行スパンが作られます。実行がWorker間を移動したときやDurable Objectに入ったときは、色の変化で区別できます。

これまで空白だった境界が、どの処理を誰が担っているかを示すマップに変わります。

1件のチェックアウトを端から端まで追う

POST /checkoutへの顧客リクエストを例にします。

リクエストは、まずチェックアウト用のWorkerに到達します。このWorkerが在庫管理用Workerのinventory.reserve()を呼び出し、続いて注文管理用Durable Objectのorder.commit()を呼び出します。顧客から見えるのは遅いチェックアウト1件だけですが、アプリケーション内には待ち時間が発生し得る場所が3か所あります。

従来は、チェックアウトのトレースがRPC呼び出しで途切れることがありました。その先を復元するには、各サービスのログや照合用の識別子、あるいはカスタムスパンが必要でした。

今は、リクエスト全体を1本のトレースとして維持できます。RPCセッションを展開し、reserveとcommitのメソッドスパンを探し、後続の実行を確認しながら、どこに実時間が偏っているかを比較できます。ルートスパンにはCloudflare Ray ID、Worker名、エントリーポイント、結果、CPU時間、実時間も記録できるため、インシデント対応者が対象のリクエストを絞り込む手掛かりになります。

チェックアウトのリクエストがWorker、在庫管理用Worker、注文管理用Durable Objectを横断し、遅い区間が強調されたアーキテクチャ模型
1件の顧客リクエストを、サービスごとに分断された時系列ではなく、つながった経路として確認できます。

この新しい表示だけで、メソッドが遅い理由まで証明できるわけではありません。分かるのは、次に調べるべき場所です。待ち時間の大半を在庫管理側の実行が占めるなら、そのストレージや上流の依存先を確認します。Durable Object呼び出しのスパンが長いなら、そのオブジェクトのハンドラーとストレージ処理を調べます。どちらのRPCが始まるより前に呼び出し元が遅いなら、後続サービスを最初に疑うべきではありません。

この機能が役立つチーム

バックエンドを分割して運用する個人創業者

チェックアウト、在庫、注文状態を別々のWorkerで運用している創業者なら、遅い購入処理を1件再現し、Cloudflare上の経路全体を追えます。調査対象を絞れるのが大きな利点です。すべてのサービスを洗い直すのではなく、遅延を抱えるWorkerまたはDurable Objectに集中できます。

ステートフルなプロダクトを率いるバックエンド責任者

コラボレーションアプリでは、ルーム内の操作をエッジWorkerからルーム用Durable Objectへ渡すことがあります。バックエンド責任者は、呼び出し元で費やした時間とステートフルなオブジェクト内で費やした時間を分け、境界を担当するチームにトレースを引き渡せます。

社内Workerサービスを支えるプラットフォームエンジニア

プラットフォームチームでは、複数のWorkerがサービスバインディングでつながり、返されたスタブやコールバックによって、ログだけでは復元しにくい経路ができることがあります。セッションスパンとメソッドスパンを見れば、どの呼び出しがセッションを再利用したか、各区間をどのWorkerが実行したか、ネストした呼び出しがどこで経路に入ったかを把握できます。

問い合わせを検証可能な証拠に変えるサポート責任者

サポート担当者は、インシデントの詳細が新しいうちに、同じ経路を再現するようエンジニアリングへ依頼できます。得られたトレースには、「チェックアウトが遅く感じた」という報告だけでなく、サービス名とメソッドの境界が残ります。最終的な修正にログ、プロファイラー、データベースのクエリプランが必要だとしても、この情報は有用です。

月曜に試す最小テスト

最初の導入で有効なのは、本番の全Workerへ一斉展開することではなく、1本のリクエスト経路を試すことです。

  1. 顧客から見える経路を選ぶ

    Worker間、またはWorkerからDurable ObjectへのRPC境界をすでに越えており、遅い状態を繰り返し再現できるリクエストを選びます。ルート、想定される後続メソッドの呼び出し、再現する時刻を書き留めてください。

  2. Wranglerでトレースを有効にする

    対象経路を処理するWorkerのWrangler設定に、Cloudflareのドキュメントにある設定を追加します。

    Jsonc
    {
      "$schema": "./node_modules/wrangler/config-schema.json",
      "observability": {
        "traces": {
          "enabled": true
        }
      }
    }

    通常のリリース手順で、この設定をデプロイします。このスイッチでCloudflareの自動スパンが有効になります。Worker内にSDKを組み込む必要はありません。

  3. 遅いリクエストを1件再現する

    管理された条件で、同じリクエストを1回実行します。サポートやログの運用ですでに取得しているなら、ルート、タイムスタンプ、Cloudflare Ray IDを控えてください。別の値を設定しない場合、デフォルトのトレースサンプリング率は1、つまり受信リクエストの100%がトレース対象になるため、管理された環境のほうが明瞭な結果を得られます。

  4. 外側から内側へトレースを読む

    CloudflareでWorkers & Pagesを開き、Workerを選択してObservabilityへ進みます。再現したリクエストを探してトレースを展開してください。ルートリクエストから始め、RPCセッション、呼び出し元のメソッドスパン、呼び出し先の実行、ネストしたDurable Object呼び出しの順に追います。スパンの幅と実時間のフィールドを使い、次に調査すべき境界を特定します。

  5. 展開前に料金への影響を測る

    再現したトレースが生成したスパン数を記録します。次に、月間トレースイベント数をサンプリング対象リクエスト数 × サンプリング対象トレース当たりの平均スパン数で見積もります。同じオブザーバビリティ枠を使う既存のログイベントも加えてください。ここで実測したスパン数が、本番環境のサンプリング方針を決める材料になります。

課金単位はリクエストではなくスパン

Workersのトレーシングは、初期ベータ期間中は無料です。2026年10月1日からは仕組みが変わり、各スパンが1件のオブザーバビリティイベントとして数えられ、Workers Logsと同じ利用枠と料金体系を共有します。

プラン含まれるオブザーバビリティイベント保持期間超過料金
Workers Free1日当たり200,000件3日公開された超過料金なし
Workers Paid1か月当たり20百万件7日追加の1百万イベント当たり$0.60

Enterpriseチームは契約内容を確認する必要があります。それ以外の利用者も、課金単位には注意が必要です。1件の顧客リクエストから、ルートスパン、RPCセッションスパン、メソッド呼び出しスパン、呼び出し先の実行、ネストしたバインディングスパンが生成される可能性があります。リクエスト数だけでは、トレースの料金は分かりません。

Cloudflareのトレーシングドキュメントによると、デフォルトのhead_sampling_rateは1、つまり100%です。高トラフィック環境の例では0.05が使われ、受信リクエスト100件のうち5件をトレースします。これは制御方法の例であり、どの環境にも当てはまる正解ではありません。

ヘッドサンプリングでは、トレードオフが明確です。比率を下げればイベント量は減りますが、対象にするかどうかはリクエストの開始時に決まります。まれに発生する遅いリクエストが選ばれない可能性もあります。管理された再現テストや適切に隔離した環境では全件をサンプリングし、その後、実際のトラフィックと1トレース当たりの実測スパン数を基に本番環境の比率を決めてください。

保持期間は、インシデント対応の進め方にも影響します。Freeプランのトレースは3日、Paidプランでは7日で消えます。その期間を過ぎてから顧客報告が届くと、必要なトレースがすでに失われているかもしれません。運用上の原則は単純です。証拠が残っているうちに再現して確認するか、運用に必要な保持期間を備えたシステムへトレースをエクスポートします。

現時点で知っておくべき制約

Workersのトレーシングは、まだオープンベータです。スパン名や属性名は変更される可能性があり、一部の属性はまだ不完全だとCloudflareは説明しています。

I/Oを伴わない一部のスパンでは、実際には処理に時間がかかっていても0 msと表示されることがあります。Workers RuntimeはI/Oイベントが発生するまで時間を更新しないため、ゼロ表示だからといって、そのJavaScript処理に時間がかからなかったとは断定できません。

Cloudflareの外に出ると、自動的なトレースの接続も途切れます。Workersのトレースをエクスポートする際、Cloudflareはまだ外部サービスへトレースIDを伝播しません。決済事業者や外部ホスティングのデータベースを呼び出しても、事業者側のトレースがWorkersの時系列へ自動的につながることはありません。

また、今回のリリースは対象が限定されています。JavaScript RPCの境界を持たない単一のWorkerでは、サービス横断の新しい表示は得られません。一般的なWorkersトレーシングはfetch、バインディング、ハンドラーの確認に引き続き役立ちますが、9月17日の変更が最も効くのは、すでに複数のWorkerやDurable Objectへ分割されたアプリケーションです。

今やるべきこと

顧客リクエストがサービスバインディングやDurable Objectを横断し、遅い区間を探すために複数のログをつなぎ合わせているなら、今週中に試す価値があります。サポートやインシデント対応で最もコストの高い経路から始めてください。

アプリケーションがまだ単一のWorkerで動いている場合や、疑わしい遅延が外部事業者の中だけにある場合は、導入を待って構いません。このリリースでは、Cloudflareの外までつながったトレースは作れません。

すでにトレーシングを有効にしているなら、カスタム計測を加える前に、新しいRPCスパンを確認してください。自動トレースによって、自分たちが管理するメソッド内に意味のある空白が見つかった場合にだけ、カスタムスパンを追加します。

月曜に実行する作業は小さくまとめられます。実際の1経路でobservability.traces.enabledを有効にし、遅いリクエストを再現して、RPCセッションとメソッドスパンを確認します。そのうえで展開範囲を広げる前に、サンプリング率、1トレース当たりの平均スパン数、保持期間、想定される利用枠の消費量を書き留めてください。

プラットフォームの変更によって作業や料金が変わるとき、要点を1本の明快な運用メモで受け取りたい方は、ニュースレターにご登録ください。

公開日
カテゴリー
Explained
AIエージェントの費用を比較:月額料金のしくみと計算例

AIエージェントの費用を比較:月額料金のしくみと計算例

AIエージェントの費用は、サービスの月額料金だけでは決まりません。月1,000通の問い合わせメールを例に、Marblism、n8nとClaude、自社APIの予算を比較。課金単位、トークン数、年払いの初回請求、人による確認や保守まで、運用に必要な支出と採用できる返信あたりの費用をどう見積もるかを解説します。2026年10月7日Explained
AI 文字起こしの料金は据え置き:Grok Voice Transcribe 2.0移行ガイド

AI 文字起こしの料金は据え置き:Grok Voice Transcribe 2.0移行ガイド

Grok Voice Transcribe 2.0のAI 文字起こし料金は、バッチが音声1時間あたり$0.10、ストリーミングが$0.20のままです。デフォルトモデル変更で起こり得る出力差、移行前に確認すべき総コスト、1.0と2.0を同条件で検証して本番モデルを固定する手順を、運用担当者向けに整理します。2026年9月20日Explained
HAR ファイルで原因を追う:Cloudflare Browser Runの失敗調査

HAR ファイルで原因を追う:Cloudflare Browser Runの失敗調査

Cloudflare Browser RunのSession RecordingにInspectパネルが加わり、完了後のログ、通信、最終DOMを確認できるようになりました。HAR ファイルで失敗原因を絞り込み、不要な再実行を減らす手順、料金への影響、録画では見えない領域まで、実務向けに分かりやすく解説します。2026年9月19日Explained
v0でnpm プライベートパッケージを活用する:社内コンポーネント再利用の実践ガイド

v0でnpm プライベートパッケージを活用する:社内コンポーネント再利用の実践ガイド

v0が共有環境変数経由でnpm プライベートパッケージに対応。NPM_TOKENとNPM_RCの選び方、認証情報をモデルやSandboxに渡さない仕組み、社内コンポーネントを試作から本番へ引き継ぐ設定手順、料金と実務上の注意点を整理し、差し替え工数を減らせるか判断する方法を解説します。2026年9月19日Explained
Claude Code 料金を見直す:auto modeの分類器課金が消える条件

Claude Code 料金を見直す:auto modeの分類器課金が消える条件

Claude Code 2.1.278では、auto modeの安全判定をサーバー側で処理できるセッションの分類器リクエスト課金がなくなります。API、Enterprise、クラウド、ゲートウェイ環境で適用条件を見極め、/statusで実際の課金経路を確認し、予算へ正しく反映する方法を解説します。2026年9月19日Explained
Vercel ビルド高速化:Turboを1回だけ使う方法と料金

Vercel ビルド高速化:Turboを1回だけ使う方法と料金

VercelのPro/Enterpriseで、プロジェクト設定を変えずに1回のデプロイだけTurboを指定する方法を解説します。GitHubのコミットマーカー、Vercel CLI、デプロイAPIという3つの経路と、1分あたり$0.105からの料金、権限不足時のフォールバック、通常ビルドとの比較手順まで整理しました。2026年9月18日Explained
ChatGPT Word連携の実力:できること・料金・導入手順

ChatGPT Word連携の実力:できること・料金・導入手順

ChatGPT Word連携を使えば、Wordのサイドバーで下書き、要約、選択範囲の修正、見出し調整まで完結します。利用条件、共有される使用量、料金の考え方、データ境界、導入手順を、提案書やSOPの具体例とともに解説。コピペ往復を減らしつつ、事実や約束を守るレビュー方法も紹介します。2026年9月18日Explained
Google Antigravity移行ガイド:10月5日までのローカルジョブ対応

Google Antigravity移行ガイド:10月5日までのローカルジョブ対応

Google Antigravityの5月版エージェントは2026年10月5日に停止予定です。出力のみのジョブはID変更で済みますが、ローカルツールやfunction_callを扱う環境には、新しいツール名、PascalCase引数、行範囲編集に対応するアダプター改修が必要です。安全な移行手順を解説します。2026年9月18日Explained
ニュースレター

毎週日曜、一通の手紙。動くシステムの話。感想戦ではなく。

週刊。スパムなし。いつでも解除できます。