コンテンツにスキップ

Logpush

Cloudflare Logpushは、Workers Trace Event Logssupported destinationに送信する機能をサポートしています。WorkerのTrace Events Logpushには、リクエストとレスポンスに関するメタデータ、非構造化のconsole.log()メッセージ、および未処理の例外が含まれます。この製品は、Workers Paidプランで利用可能です。価格情報については、Pricingを参照してください。

Logpushアクセスの確認

Workers Logpushには、2.2.0以上のWranglerバージョンが必要です。wrangler versionを実行してバージョンを確認してください。Wranglerを更新するには、Install/Update Wranglerを参照してください。

Logpushジョブを構成するには、Cloudflareアカウントの役割がLogpushを使用できることを確認してください。役割を確認するには:

  1. Cloudflareダッシュボードにログインします。
  2. アカウントを選択し、Manage Account > Membersにスクロールします。
  3. アカウントの権限を確認します。Logpush構成アクセスを持つ役割は、Workersの権限とは異なります。スーパ管理者、管理者、およびLog Shareの役割はLogpushへの完全なアクセス権を持っています。

または、Logs Edit権限を持つアカウントレベルでスコープされた新しいAPIトークンを作成します。

Logpushジョブの作成

Cloudflareダッシュボード経由

CloudflareダッシュボードでLogpushジョブを作成するには:

  1. Cloudflareダッシュボードにログインし、アカウントを選択します。
  2. Analytics & Logs > Logsを選択します。
  3. Add Logpush jobを選択します。
  4. データセットとしてWorkers trace eventsを選択 > Next
  5. 必要に応じてデータフィールドをカスタマイズします。そうでない場合は、Nextを選択します。
  6. ダッシュボードの指示に従って、データの宛先の所有権を確認し、ジョブの作成を完了します。

cURL経由

以下の例は、WorkersログをR2に送信します。詳細な構成オプションについては、Enable destinationsおよびAPI configurationをLogsドキュメントで参照してください。

Terminal window
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では、filterssampling rateを構成して、設定した宛先に送信されるデータの量をより制御できます。たとえば、例外が発生しなかったリクエストのログのみを受信したい場合は、以下のfilter JSONプロパティをoutput_optionsの下に追加します:

"filter":"{\"where\": {\"key\":\"Outcome\",\"operator\":\"!eq\",\"value\":\"exception\"}}"

Workerでのロギングの有効化

wrangler.tomlファイルに新しいプロパティlogpush = trueを追加することで、Workerでのロギングを有効にします。これは、トップレベルの構成またはenvironmentの下に追加できます。このプロパティを持つ新しいWorkersは、自動的にLogpushジョブに取り込まれます。

# トップレベルの構成
name = "my-worker"
main = "src/index.js"
compatibility_date = "2022-07-12"
workers_dev = false
logpush = true
route = { pattern = "example.org/*", zone_name = "example.org" }

マルチパートスクリプトアップロードAPI経由で構成:

Terminal window
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)だと仮定します。アルゴリズムは次のようになります:

  1. exception.namesの文字をカウント:
    1. "SampleError""AuthError"で20文字。
  2. exception.messageの文字をカウント:
    1. "something went wrong"が20文字で、残り10文字。
    2. "unable to process request authentication from client"の最初の10文字が取得され、"unable to <<<Logpush: exception messages truncated>>>"に切り捨てられます。
  3. log.messageの文字をカウント:
    1. すでに切り捨てが始まっているため、"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
}
]
}