Skip to content

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

Tail Workers

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

Tail Worker は、ほかの Worker(プロデューサー Worker と呼びます)の実行情報を受け取ります。HTTP ステータス、console.log() に渡したデータ、捕捉されていない例外などです。Tail Worker は、アラート、デバッグ、分析のためにログを処理できます。

Tail Workers は、Workers Paid および Enterprise プランのすべてのお客様が利用できます。課金はリクエスト数ではなく、CPU 時間 に基づきます。

Tail Worker の図

Tail Worker は、アプリのロジックを含むプロデューサー Worker(Tail Worker が追跡する Worker)の呼び出し後に、自動で呼び出されます。プロデューサーの実行が終わったあとにイベントを捕捉します。リクエストライフサイクル全体のイベントが含まれます。Service BindingsDynamic Dispatch によるサブリクエストも対象です。フィルタ、データ形式の変更、任意の HTTP エンドポイントへの送信ができます。すばやくデバッグしたい場合は、Tail Worker でログを KV や任意のデータベースに送れます。

Tail Workers を設定する

Tail Worker を設定する手順は次のとおりです。

  1. Tail Worker として使う Worker を作成 します。
  2. Worker に tail() ハンドラーを追加します。tail() ハンドラーは、接続先のプロデューサー Worker が呼び出されるたびに実行されます。次の Worker コードは、データを HTTP エンドポイントに送る Tail Worker です。
export default {
	async tail(events) {
		fetch("https://example.com/endpoint", {
			method: "POST",
			body: JSON.stringify(events),
		});
	},
};

events オブジェクトの例は次のとおりです。

[
	{
		"scriptName": "Example script",
		"outcome": "exception",
		"eventTimestamp": 1587058642005,
		"event": {
			"request": {
				"url": "https://example.com/some/requested/url",
				"method": "GET",
				"headers": {
					"cf-ray": "57d55f210d7b95f3",
					"x-custom-header-name": "my-header-value"
				},
				"cf": {
					"colo": "SJC"
				}
			}
		},
		"logs": [
			{
				"message": ["string passed to console.log()"],
				"level": "log",
				"timestamp": 1587058642005
			}
		],
		"exceptions": [
			{
				"name": "Error",
				"message": "Threw a sample exception",
				"timestamp": 1587058642005
			}
		],
		"diagnosticsChannelEvents": [
			{
				"channel": "foo",
				"message": "The diagnostic channel message",
				"timestamp": 1587058642005
			}
		]
	}
]
  1. プロデューサー Worker の Wrangler ファイルに、次を追加します。
{
	"tail_consumers": [
		{
			"service": "<TAIL_WORKER_NAME>"
		}
	]
}
[[tail_consumers]]
service = "<TAIL_WORKER_NAME>"

Analytics Engine で集計指標を使う

個別のログイベントではなく集計分析が必要な場合は、Tail Worker から Workers Analytics Engine へ書き込む方法を検討してください。Analytics Engine は、SQL で照会できる高カーディナリティの時系列データ向けに最適化されています。

たとえば Tail Worker で、エンドポイントごとのエラー数、顧客ごとの応答時間、利用状況指標を集計し、照会と可視化のために Analytics Engine へ書き込めます。

export default {
	async tail(events, env) {
		for (const event of events) {
			env.ANALYTICS.writeDataPoint({
				blobs: [event.scriptName, event.outcome],
				doubles: [1],
				indexes: [event.event?.request?.cf?.colo ?? "unknown"],
			});
		}
	},
};

データの書き込みと照会の詳細は、Analytics Engine のドキュメント を参照してください。

関連リソース

  • tail() ハンドラー API ドキュメント — Worker に tail() ハンドラーを設定する方法を説明します。
  • Analytics Engine — 高カーディナリティの時系列照会向けに、Worker からカスタム分析を書き込みます。
  • エラーと例外 — よくある Workers のエラーを確認します。
  • ローカル開発 — Worker をローカルで開発およびテストします。
  • ソースマップとスタックトレース — Workers でソースマップを有効にし、スタックトレースを生成する方法を説明します。

役に立ちましたか?