Tail Worker は、ほかの Worker(プロデューサー Worker と呼びます)の実行情報を受け取ります。HTTP ステータス、console.log() に渡したデータ、捕捉されていない例外などです。Tail Worker は、アラート、デバッグ、分析のためにログを処理できます。
Tail Workers は、Workers Paid および Enterprise プランのすべてのお客様が利用できます。課金はリクエスト数ではなく、CPU 時間 に基づきます。
Tail Worker は、アプリのロジックを含むプロデューサー Worker(Tail Worker が追跡する Worker)の呼び出し後に、自動で呼び出されます。プロデューサーの実行が終わったあとにイベントを捕捉します。リクエストライフサイクル全体のイベントが含まれます。Service Bindings や Dynamic Dispatch によるサブリクエストも対象です。フィルタ、データ形式の変更、任意の HTTP エンドポイントへの送信ができます。すばやくデバッグしたい場合は、Tail Worker でログを KV や任意のデータベースに送れます。
Tail Worker を設定する手順は次のとおりです。
- Tail Worker として使う Worker を作成 します。
- 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
}
]
}
]- プロデューサー Worker の Wrangler ファイルに、次を追加します。
{
"tail_consumers": [
{
"service": "<TAIL_WORKER_NAME>"
}
]
}[[tail_consumers]]
service = "<TAIL_WORKER_NAME>"個別のログイベントではなく集計分析が必要な場合は、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 でソースマップを有効にし、スタックトレースを生成する方法を説明します。