概要
この連携では、ミドルウェアとして動作する Cloudflare Worker を使用してリクエストのメタデータを収集し、Agent Analytics API に送信します。Worker は、実際のリクエスト処理に影響を与えることなく、IP アドレス、ユーザーエージェント、リファラーなどの重要なリクエスト情報を取得します。前提条件
- Workers にアクセスできる Cloudflare アカウント
- 開発マシンにインストールされた Node.js
- ドメインの Cloudflare 設定へのアクセス権
- Agent Analytics 用の Profound Log Ingestion Token
Shopify ストアフロントを運用している場合は、その前段に Worker を配置しないでください。代わりに、ログをアウトオブバンドで収集する Shopify ガイドのログドレインオプションのいずれかを使用してください。

実装ガイド
1
開発環境をセットアップする
新しい Worker プロジェクトを作成し、依存関係をインストールします。npm が起動すると、開始点を選択するよう求められます。開始カテゴリとして “Hello World” を選択します。
“Hello World” Worker テンプレートを選択します。
言語として “TypeScript” を選択します。
CLI が 
ここでアプリケーションをデプロイします。アプリケーションは Cloudflare の開発用ドメインにデプロイされるため、本番環境には影響しません。
Cloudflare CLI からログインと、アプリケーションをデプロイするアカウントの選択を求められます。ドメインが関連付けられているアカウントを選択してください。Cloudflare によって自動的にブラウザウィンドウが開き、“Hello World” が表示されます。アプリケーションのデプロイが完了したら、プロジェクトディレクトリに移動できます。
新しい Worker プロジェクトを作成する
まず、Cloudflare Worker CLI を使用して新しい Worker プロジェクトを作成します。この例では、Cloudflare Worker CLI のバージョン2.37.4 を使用しています。最新バージョンを使用しても構いませんが、手順に若干の違いがある場合があります。


log-collector という名前の新しいプロジェクトを作成し、必要な依存関係をインストールします。バージョン管理として Git を選択します。

2
Worker を設定する
wrangler.json ファイルを編集して、環境変数 PROFOUND_API_URL とルートバインディングを設定します。wrangler.json
src/index.ts にコピーします。src/index.ts
Worker は 2 種類の失敗をログに記録します。
Log ingestion rejected the request: <status> <body> は、Profound がリクエストを受信したものの拒否したことを意味します。これは通常、認証またはペイロードの問題であり、ステータスとボディからどちらかを特定できます。Failed to send logs: <name>: <message> は、リクエストが完了しなかったことを意味します。TimeoutError は 5 秒のタイムアウトです。それ以外の名前は、接続または設定の問題を示しています。どちらのメッセージも Worker のログに出力され、Workers & Pages > 対象の Worker > Logs で確認できます。bytes は、レスポンスボディではなく content-length レスポンスヘッダーから算出されます。ボディを読み取る(たとえば response.clone() と blob() を使用する)と、Cloudflare はペイロード全体を Worker の isolate 内にバッファリングする必要があり、サイズの大きいレスポンスやストリーミングレスポンスでは 5xx で失敗します。この Worker はレスポンスボディを読み取ることも変更することもありません。オリジンのレスポンスをそのままストリーミングしますが、リクエストパス上には存在するため、オリジンの fetch の失敗は Worker がない場合と同様に表面化します。そのため、bytes はヘッダーと content-length の合計であり、レスポンスが実際にボディを送信する場合(HEAD、204、304 以外)にのみカウントされます。3
4
実装をテストする
Worker が正しく機能していることを確認します。Profound で Agent Analytics に移動し、Logs パネルにログが表示されることを確認します。AI ログフィルターはデフォルトで有効になっています。Logs パネル上部のフィルターを使用して無効にしてください。ログが表示されれば、設定は完了です。Analytics ダッシュボードにデータが表示されるはずです。
トラブルシューティング
-
ログが表示されない場合は、環境変数
PROFOUND_API_URLとシークレットPROFOUND_LOG_INGESTION_TOKENが正しく設定されていることを確認してください -
Worker のログに
Log ingestion rejected the request: 401または403が表示される場合: シークレットPROFOUND_LOG_INGESTION_TOKENが存在しない、スペルが間違っている、またはこのサイト用に発行されたトークンではありません。npx wrangler secret put PROFOUND_LOG_INGESTION_TOKENで再設定してください -
Failed to send logs: TimeoutError: ログリクエストが 5 秒のタイムアウトを超えました。タイムアウトによってログ送信の呼び出しが訪問者に影響しないようになっているため、少数の発生は想定内であり、影響を受けるのは該当するログ行のみです。継続的に発生する場合は、Worker のログにあるrequestIdの値をいくつか添えて Profound サポートにご報告ください -
その他のエラー名で
Failed to send logs:が表示される場合:PROFOUND_API_URLを上記の設定手順の値と照合してください。URL が自社の Cloudflare ゾーン上のホスト名に解決されると、Worker が自分自身を呼び出すことになり、すべてのリクエストで失敗します - Cloudflare Workers > Analytics で実行エラーがないか確認してください
- ルートパターンがドメインの設定と一致していることを確認してください
- Cloudflare ダッシュボードのメトリクスを確認して、Worker がリクエストを受信していることを確認してください
-
Worker のデプロイ後に断続的な 5xx が発生する場合: Metrics > Errors > Invocation Statuses で
Exceeded Memory(Error 1102)またはScript threw exception(Error 1101)を確認してください。どちらもオリジンではなく Worker 自体が失敗していることを意味します。上記のコード(clone()なし、ボディの読み取りなし)を実行していること、およびログ送信の呼び出しが.catch()付きでctx.waitUntil()にラップされていることを確認してください -
Worker のデプロイ後に Google Ads / Merchant Center で「リンク先が機能していません」や「画像にアクセスできません」などの不承認が発生する場合: これらは、
AdsBot-Googleまたは Merchant Center のフェッチャーが上記の Worker エラーのいずれかを受け取ったことが原因です。Worker のエラーを修正してから、再審査をリクエストしてください -
Worker が原因かどうかを完全に切り分けるには、ルートバインディングを削除し(
npx wrangler triggers deleteを実行するか、ダッシュボードでルートを削除)、エラーが止まることを確認してください
その他のリソース
- Cloudflare Workers のドキュメント
- Wrangler CLI のドキュメント
- API に関するご質問は support@tryprofound.com までお問い合わせください
セキュリティに関する考慮事項
- 本番環境では、Log Ingestion Token をシークレットとして保存してください
- Log Ingestion Token は定期的にローテーションしてください
- Worker の使用状況とログに異常なパターンがないか監視してください
