Skip to content

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

Workers Logs

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

Workers Logs は、Cloudflare Workers から出るログデータを自動で収集、保存、絞り込み、分析できます。データは Cloudflare アカウントに書き込まれ、各 Worker のダッシュボードで照会できます。新しく作った Worker は、デフォルトで observability 設定が有効です。

ログには 呼び出しログカスタムログ、エラー、捕捉されていない例外が含まれます。

Workers Logs ダッシュボードの例

サードパーティへログを送る場合は、OpenTelemetry export(推奨)、Workers Logpush、または Tail Workers を使います。

Workers Logs を有効にする

Worker が Workers Logs にログを書くには、observability 設定を追加する必要があります。Worker の Wrangler ファイルに次の設定を追加し、Worker を再デプロイします。

{
  "observability": {
    "enabled": true,
    "head_sampling_rate": 1 // optional. default = 1.
  }
}
[observability]
enabled = true
head_sampling_rate = 1

ヘッドベースサンプリング で、ログを取る Workers リクエストの割合を設定できます。

環境ごとの有効化

Environments を使うと、同じ Worker アプリケーションを異なる設定でデプロイできます。たとえば、staging と production で別の head_sampling_rate を設定できます。staging という環境の observability を設定する手順です。1. [env.staging] の下に次の設定を追加します。

{
  "env": {
    "staging": {
      "observability": {
        "enabled": true,
        "head_sampling_rate": 1 // optional
      }
    }
  }
}
[env.staging.observability]
enabled = true
head_sampling_rate = 1
  1. npx wrangler deploy -e staging で Worker をデプロイします
  2. 各環境で手順 1 と 2 を繰り返します。

ダッシュボードでログを見る

Cloudflare ダッシュボードから Worker のログにアクセスします。

  1. Cloudflare ダッシュボードで、Workers & Pages ページを開きます。

    Workers & Pages を開く ↗
  2. OverviewWorker を選びます。

  3. Observability を選びます。

ベストプラクティス

構造化 JSON オブジェクトでログを出す

Workers Logs を最大限に使うには、JSON 形式でログを出すことを推奨します。Workers Logs はフィールドを自動抽出し、データベースへ適切にインデックスします。この構造化ログの利点は、カーディナリティに上限のないフィールドでも、任意の軸でデータを切り分けられることです。次のシナリオを考えます。

シナリオ ログ出力のコード イベントログ(一部)
1 console.log("user_id: " + 123) {message: "user_id: 123"}
2 console.log({user_id: 123}) {user_id: 123}
3 console.log({user_id: 123, user_email: "[email protected]"}) {user_id: 123, user_email: "[email protected]"}

違いは、より速い照会のためにログをどうインデックスするかです。シナリオ 1 では user_id がメッセージ内に埋め込まれています。特定の user_id に関するログを探すには、テキスト一致が必要です。シナリオ 2 と 3 では、キー user_iduser_email でログを絞り込めます。

機能

呼び出しログ

Workers の呼び出しごとに、Request、Response、関連メタデータなどを含む呼び出しログが 1 件返ります。この呼び出しログは、フィールド $cloudflare.$metadata.type = "cf-worker-event" で識別できます。各呼び出しログは、呼び出しの文脈で Cloudflare が使える情報で補完されます。

Workers Logs の UI では、ログはローカライズされたタイムスタンプとメッセージで表示されます。メッセージは呼び出しハンドラーによって決まります。たとえば Fetch リクエストはリクエストメソッドと URL を説明するメッセージになり、cron イベントは cron として並びます。呼び出しハンドラーと呼び出しメッセージの対応は次のとおりです。

呼び出しログは、wrangler で invocation_logs = false を追加すると無効にできます。

{
	"observability": {
		"logs": {
			"invocation_logs": false
		}
	}
}
[observability.logs]
invocation_logs = false
呼び出しハンドラー 呼び出しメッセージ
Alarm <Scheduled Time>
Email <Email Recipient>
Fetch <Method> <URL>
Queue <Queue Name>
Cron <UNIX-cron schedule>
Tail tail
RPC <RPC method>
WebSocket <WebSocket Event Type>

カスタムログ

デフォルトでは、Worker はリクエスト、レスポンス、関連メタデータを含む 呼び出しログ を出します。

コードの任意の場所にカスタムログも追加できます。Worker 内の console.log は Workers Logs に表示されます。次の例は、Worker のリクエストハンドラー内のカスタム console.log です。

export default {
	async fetch(request) {
		const { cf } = request;
		const { city, country } = cf;

		console.log(`Request came from city: ${city} in country: ${country}`);

		return new Response("Hello worker!", {
			headers: { "content-type": "text/plain" },
		});
	},
};
addEventListener("fetch", (event) => {
	event.respondWith(handleRequest(event.request));
});

/**
 * Respond with hello worker text
 * @param {Request} request
 */
async function handleRequest(request) {
	const { cf } = request;
	const { city, country } = cf;

	console.log(`Request came from city: ${city} in country: ${country}`);

	return new Response("Hello worker!", {
		headers: { "content-type": "text/plain" },
	});
}

上記のコードをデプロイしたあと、ダッシュボード または リアルタイムログ で Worker のログを確認します。

ヘッドベースサンプリング

ヘッドベースサンプリングでは、Cloudflare Worker への受信リクエストのうち、ログを取る割合を指定できます。特にトラフィックが多いアプリケーションでは、ログ量とコストを抑えつつ、アプリケーションの性能に関する有用な洞察を得られます。ヘッドベースサンプリング率を設定すると、ログを取るリクエストの割合を制御できます。そのリクエスト文脈内のログはすべて収集されます。

ヘッドベースサンプリングを有効にするには、observability 設定内で head_sampling_rate を設定します。有効範囲は 0 から 1 です。0 は 100 件中 0 件をログに取り、1 はすべてのリクエストをログに取ります。head_sampling_rate を省略すると、デフォルト値は 1(100%)です。次の例では head_sampling_rate を 0.01 にしており、100 件に 1 件のリクエストがログに残ります。

{
	"observability": {
		"enabled": true,
		"head_sampling_rate": 0.01 // 1% sampling rate
	}
}
[observability]
enabled = true
head_sampling_rate = 0.01

制限

説明 上限
ログの最大保持期間 7 日
アカウントあたり 1 日の最大ログ数1 50 億
ログの最大サイズ2 256 KB

1 アカウントあたり 1 日の上限は 50 億件です。上限を超えると、その日の残りは 1% のヘッドベースサンプリングが適用されます。

2 1 件のログの最大サイズは 256 KB です。これを超えるログは 切り詰められ、ログの $cloudflare.truncated フィールドが true になります。

料金

Workers Logs は、Free プランと Paid プランの両方の Workers プラン に含まれます。

書き込みログイベント 保持期間
Workers Free 1 日あたり 200,000 件 3 日
Workers Paid 1 か月あたり 2,000 万件を含む
追加 100 万件あたり +$0.60
7 日

例 1

ある Worker が月に 1,500 万リクエストを処理します。各リクエストは呼び出しログ 1 件と console.log 1 件を出します。head_sampling_rate は 1 です。

月額コスト 計算式
Logs $6.00 ((15,000,000 requests per month * 2 logs per request * 100% sample) - 20,000,000 included logs) / 1,000,000 * $0.60
合計 $6.00

例 2

ある Worker が月に 10 億リクエストを処理します。各リクエストは呼び出しログ 1 件と console.log 1 件を出します。head_sampling_rate は 0.1 です。

月額コスト 計算式
Logs $108.00 ((1,000,000,000 requests per month * 2 logs per request * 10% sample) - 20,000,000 included logs) / 1,000,000 * $0.60
合計 $108.00

役に立ちましたか?