tail() ハンドラーは、Tail Worker を書くときに実装するハンドラーです。Tail Worker はログをリアルタイムで処理し、ログサービスや分析サービスへ送れます。
tail() ハンドラーは、接続先のプロデューサー Worker が呼び出されるたびに 1 回実行されます。
Tail Worker の設定は、Tail Workers のドキュメント を参照してください。
export default {
async tail(events, env, ctx) {
fetch("<YOUR_ENDPOINT>", {
method: "POST",
body: JSON.stringify(events),
})
}
}from workers import WorkerEntrypoint, fetch
import json
class Default(WorkerEntrypoint):
async def tail(self, events, env, ctx):
await fetch("<YOUR_ENDPOINT>", method="POST", body=json.dumps(events))-
eventsarrayTailItemsの配列です。Worker を起動するイベントごとに 1 つのTailItemが収集されます。dynamic dispatch Worker に Tail Worker を入れた Workers for Platforms のお客様では、eventsに 2 つの要素が含まれます。1 つは dynamic dispatch Worker、もう 1 つは User Worker です。
-
envobject- ES modules 形式 の Worker に関連付けられたバインディングを含むオブジェクトです。KV 名前空間や Durable Objects などがあります。
-
ctxobject- ES modules 形式 の Worker に関連付けられたコンテキストを含むオブジェクトです。現在、このオブジェクトには
waitUntil関数だけが含まれます。
- ES modules 形式 の Worker に関連付けられたコンテキストを含むオブジェクトです。現在、このオブジェクトには
-
event.typestring- イベントの種類です。常に
"tail"を返します。
- イベントの種類です。常に
-
event.tracesarrayTailItemsの配列です。Worker を起動するイベントごとに 1 つのTailItemが収集されます。dynamic dispatch Worker に Tail Worker を入れた Workers for Platforms のお客様では、eventsに 2 つの要素が含まれます。1 つは dynamic dispatch Worker、もう 1 つは user Worker です。
-
event.waitUntil(promisePromise): voidwaitUntilを参照してください。fetch イベントハンドラーと異なり、tail ハンドラーは値を返さないため、Tail Worker が非同期処理を行う唯一の方法です。
-
scriptNamestring- プロデューサースクリプトの名前です。
-
eventobject- Worker を起動したイベントに関する情報を含みます。
- fetch イベントの場合:
FetchEventInfoオブジェクト - その他のイベント種類の場合: 現時点では
nullです。
- fetch イベントの場合:
- Worker を起動したイベントに関する情報を含みます。
-
eventTimestampnumber- エポック時間で計測されます。
-
logsarray- TailLogs の配列です。
-
exceptionsarrayTailExceptionsの配列です。Worker は複数の非同期タスクを登録できるため、1 回の Worker 呼び出しで未処理例外が複数出ることがあります。
-
outcomestring- Worker 呼び出しの結果です。次のいずれかです。
unknown: outcome ステータスが設定されませんでした。ok: Worker の呼び出しが成功しました。exception: 未処理例外がスローされました。次のような理由で起きることがあります。- キャッチされなかった JavaScript 例外。
- Response を返さない fetch ハンドラー。
- 内部エラー。
exceededCpu: Worker の呼び出しが CPU 制限を超えました。exceededMemory: Worker の呼び出しがメモリ制限を超えました。scriptNotFound: Worker スクリプトの取得に失敗した内部エラーです。canceled: 完了前に Worker の呼び出しがキャンセルされました。レスポンス送信前にクライアントが切断したことがよくあります。responseStreamDisconnected: deferred proxying 中にレスポンスストリームが切断されました。クライアントまたはサーバーが早く切断したときに起きます。
- Worker 呼び出しの結果です。次のいずれかです。
-
requestobject -
responseobject
-
cfobjectIncomingRequestCfPropertiesのデータを含みます。
-
headersobject- ヘッダー名と値のエントリです(デフォルトではマスキングされます)。ヘッダー名は小文字になり、重複するヘッダー名に紐づく値は Fetch 標準 ↗ と同様に
", "(カンマとスペース)で連結されます。
- ヘッダー名と値のエントリです(デフォルトではマスキングされます)。ヘッダー名は小文字になり、重複するヘッダー名に紐づく値は Fetch 標準 ↗ と同様に
-
methodstring- HTTP リクエストメソッドです。
-
urlstring- HTTP リクエスト URL です(デフォルトではマスキングされます)。
-
getUnredacted()object- マスキングされていないプロパティを持つ TailRequest オブジェクトを返します。
TailRequest の一部プロパティは、ユーザー認証情報や API トークンなどの機密情報を誤って記録しにくくするため、デフォルトでマスキングされます。マスキングはヒューリスティックな規則を使うため、誤検出や見逃しがあります。クライアントは getUnredacted() を呼び出してマスキングを回避できますが、マスキングの有無にかかわらず、保持する情報には常に注意してください。
- ヘッダーのマスキング: ヘッダー名(大文字小文字を区別しない)が
cookie/set-cookieであるか、部分文字列"auth"、"key"、"secret"、"token"、"jwt"を含む場合、ヘッダー値は文字列“REDACTED”になります。 - URL のマスキング: URL 内で貪欲に一致した ID 文字(a-z、A-Z、0-9、'+'、'-'、'_')の部分文字列が、次の hex または base-64 ID の条件を満たす場合、その部分文字列は文字列
“REDACTED”に置き換えられます。 - Hex ID: 16 進数字が 32 個以上あり、16 進数字と区切り文字('+'、'-'、'_')だけを含む
- Base-64 ID: 21 文字以上あり、大文字が 2 つ以上、小文字が 2 つ以上、数字が 2 つ以上含まれる
-
statusnumber- HTTP ステータスコードです。
console 関数に送られた情報を記録します。
-
timestampnumber- エポック時間で計測されます。
-
levelstring- 呼び出された console 関数を示す文字列です。次のいずれかです:
debug、info、log、warn、error。
- 呼び出された console 関数を示す文字列です。次のいずれかです:
-
messageobject- console 関数に渡されたパラメーターの配列です。
Worker 呼び出し中に発生した未処理例外を記録します。
-
timestampnumber- エポック時間で計測されます。
-
namestring- エラータイプです(例:
Error、TypeErrorなど)。
- エラータイプです(例:
-
messageobject- エラーの説明です(例:
"x" is not a function)。
- エラーの説明です(例:
- Tail Workers - Tail Worker を設定し、ほかの Worker の実行情報を受け取ります。