Logpush
Cloudflare Logpushは、Workers Trace Event Logsをsupported destinationに送信する機能をサポートしています。WorkerのTrace Events Logpushには、リクエストとレスポンスに関するメタデータ、非構造化のconsole.log()メッセージ、および未処理の例外が含まれます。この製品は、Workers Paidプランで利用可能です。価格情報については、Pricingを参照してください。
Workers Logpushには、2.2.0以上のWranglerバージョンが必要です。wrangler versionを実行してバージョンを確認してください。Wranglerを更新するには、Install/Update Wranglerを参照してください。
Logpushジョブを構成するには、Cloudflareアカウントの役割がLogpushを使用できることを確認してください。役割を確認するには:
- Cloudflareダッシュボード ↗にログインします。
- アカウントを選択し、Manage Account > Membersにスクロールします。
- アカウントの権限を確認します。Logpush構成アクセスを持つ役割は、Workersの権限とは異なります。スーパ管理者、管理者、およびLog Shareの役割はLogpushへの完全なアクセス権を持っています。
または、Logs Edit権限を持つアカウントレベルでスコープされた新しいAPIトークンを作成します。
CloudflareダッシュボードでLogpushジョブを作成するには:
- Cloudflareダッシュボード ↗にログインし、アカウントを選択します。
- Analytics & Logs > Logsを選択します。
- Add Logpush jobを選択します。
- データセットとしてWorkers trace eventsを選択 > Next。
- 必要に応じてデータフィールドをカスタマイズします。そうでない場合は、Nextを選択します。
- ダッシュボードの指示に従って、データの宛先の所有権を確認し、ジョブの作成を完了します。
以下の例は、WorkersログをR2に送信します。詳細な構成オプションについては、Enable destinationsおよびAPI configurationをLogsドキュメントで参照してください。
curl "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/logpush/jobs" \--header 'X-Auth-Key: <API_KEY>' \--header 'X-Auth-Email: <EMAIL>' \--header 'Content-Type: application/json' \--data '{ "name": "workers-logpush", "output_options": { "field_names": ["Event", "EventTimestampMs", "Outcome", "Exceptions", "Logs", "ScriptName"], }, "destination_conf": "r2://<BUCKET_PATH>/{DATE}?account-id=<ACCOUNT_ID>&access-key-id=<R2_ACCESS_KEY_ID>&secret-access-key=<R2_SECRET_ACCESS_KEY>", "dataset": "workers_trace_events", "enabled": true}' | jq .Logpushでは、filtersやsampling rateを構成して、設定した宛先に送信されるデータの量をより制御できます。たとえば、例外が発生しなかったリクエストのログのみを受信したい場合は、以下のfilter JSONプロパティをoutput_optionsの下に追加します:
"filter":"{\"where\": {\"key\":\"Outcome\",\"operator\":\"!eq\",\"value\":\"exception\"}}"
wrangler.tomlファイルに新しいプロパティlogpush = trueを追加することで、Workerでのロギングを有効にします。これは、トップレベルの構成またはenvironmentの下に追加できます。このプロパティを持つ新しいWorkersは、自動的にLogpushジョブに取り込まれます。
# トップレベルの構成
name = "my-worker"main = "src/index.js"compatibility_date = "2022-07-12"
workers_dev = falselogpush = trueroute = { pattern = "example.org/*", zone_name = "example.org" }マルチパートスクリプトアップロードAPI経由で構成:
curl --request PUT \"https://api.cloudflare.com/client/v4/accounts/{account_id}/workers/scripts/{script_name}" \--header "Authorization: Bearer <API_TOKEN>" \--form 'metadata={"main_module": "my-worker.js", "logpush": true}' \--form '"my-worker.js"=@./my-worker.js;type=application/javascript+module'logsおよびexceptionsフィールドには、フィールドが切り捨てられ始める前に合計16,384文字の制限があります。文字は、すべてのexception.names、exception.messages、次にlog.messagesの順にカウントされます。
この文字制限に達すると、すべてのフィールドが切り捨てられ、1つのメッセージの前に"<<<Logpush: *field* truncated>>>"が表示され、その後はログや例外が削除されます。
これを示すために、Logpushイベントが以下のJSONのようで、制限が50文字(実際の制限は16,384)だと仮定します。アルゴリズムは次のようになります:
exception.namesの文字をカウント:"SampleError"と"AuthError"で20文字。
exception.messageの文字をカウント:"something went wrong"が20文字で、残り10文字。"unable to process request authentication from client"の最初の10文字が取得され、"unable to <<<Logpush: exception messages truncated>>>"に切り捨てられます。
log.messageの文字をカウント:- すでに切り捨てが始まっているため、
"Hello "は"<<<Logpush: messages truncated>>>"に置き換えられ、"World!"は削除されます。
- すでに切り捨てが始まっているため、
{ "Exceptions": [ { "Name": "SampleError", "Message": "something went wrong", "TimestampMs": 0 }, { "Name": "AuthError", "Message": "unable to process request authentication from client", "TimestampMs": 1 }, ], "Logs": [ { "Level": "log", "Message": ["Hello "], "TimestampMs": 0 }, { "Level": "log", "Message": ["World!"], "TimestampMs": 0 } ]}{ "Exceptions": [ { "name": "SampleError", "message": "something went wrong", "TimestampMs": 0 }, { "name": "AuthError", "message": "unable to <<<Logpush: exception messages truncated>>>", "TimestampMs": 1 }, ], "Logs": [ { "Level": "log", "Message": ["<<<Logpush: messages truncated>>>"], "TimestampMs": 0 } ]}