Cloudflare Builder Day 2024で追加されたWorkers Logsを試してみる
はじめに
こんにちは、あさひです!
Cloudflare の Birthday Week イベントで Builder Day 2024 が 2024/09/26 に行われていました。
今回はその中で発表された Workers Logs を試してみたいと思います。以下は Cloudflare の紹介ブログです。
本記事は Workers Logs の機能を試すことをメインとするので、Cloudflare アカウントの作成や Workers の詳細などについては扱いません。
Cloudflare Workers Logs とは
Workers Logs を使用すると、Cloudflare Workers から出力されるログデータを自動的に収集、保存、フィルタリング、分析できます。データは Cloudflare アカウントに書き込まれ、各 Workers のダッシュボードでクエリできます。新しく作成された Workers はすべて、デフォルトで
observability
設定が有効になっています。
Workers のログに関しては、今までは Baselime を統合して管理する方法はありましたが、Cloudflare のダッシュボードと機能だけで永続的なログを保存できる仕組みはありませんでした。Workers Logs はその課題を解決する機能です。
制限
オープンベータ中は、1 アカウントあたり 1 日 50 億件までという制限があります。制限を超えると、その日の残りの時間は後述のhead_sampling_rate = 1
のサンプリングが適用されます。
またログの制限は 128KB でこれを超えるログは切り捨てられてログの$cloudflare.truncated
フィールドがtrue
で記録されます。
項目 | 制限 |
---|---|
最大ログ保存期間 | 7 日間 |
1 アカウントあたりの 1 日最大ログ数 | 50 億件 |
最大ログサイズ | 128 KB |
価格
価格を以下にまとめておきます。
プラン | 書き込み可能なログ行数 | 保存期間 | 追加コスト |
---|---|---|---|
Workers Free | 20 万行 / 日 | 7 日間 | 追加の料金なし |
Workers Paid | 2,000 万行 / 月まで含まれる | 7 日間 | 追加の 100 万行ごとに+$0.60 |
Cloudflare Workers の準備
プロジェクトの初期化とデプロイ
まずはプロジェクトを作成します。
npm create cloudflare@latest -- workers-logs --framework=hono
上記コマンドを実行すると、いくつか質問されますが、すべてエンターで進めて問題ありません。
(私は Hono が好きなので framework
には Hono を指定して作成します)
以下のコマンドで初回のデプロイを行っておきます。
npm run deploy
Logs の設定
実は最新の C3 コマンド(create cloudflare cli)でセットアップをした場合、wrangler.toml
に以下の設定が追加されているはずです。なのでここまで同じように進めている方は特に何もすることはありません。
別の方法でプロジェクトを作成し、wrangler.toml
に記述がない場合は追加して再度デプロイしてください。
[observability]
enabled = true
ログのサンプリング
あとはオプショナルなものですが、以下のようにhead_sampling_rate
を追加するとログに記録されるリクエストの割合を制御できます。
特に何も書かなければデフォルトは1
になっています。 0 から 1 まで、0.01 単位で設定できます。
1 が 100%、0.01 が 1% です。もしhead_sampling_rate = 0.01
のように設定すると 100 リクエストに 1 つのログが記録されます。
[observability]
enabled = true
+ head_sampling_rate = 1
Logs の動作確認
動作確認
上記のコードがデプロイされているので以下のcurl
コマンドで動作確認を行います。サブドメインをexample
にしていますが各々の設定に書き換えて試してください。Hello Hono!
とレスポンスが確認できればうまく動いています。
ログを後ほど確認しますので何度かアクセスしておきます。
curl https://workers-logs.example.workers.dev
ログの確認
ダッシュボードで確認したいログをクリックすると以下の json 形式のログを確認できます。
{
"message": "GET https://workers-logs.example.workers.dev/",
"level": "info",
"$cloudflare": {
"diagnosticsChannelEvents": [],
"truncated": false,
"event": {
"request": {
"url": "https://workers-logs.example.workers.dev/",
"method": "GET",
"headers": {
"accept": "*/*",
"accept-encoding": "gzip, br",
"cf-connecting-ip": "XXXXXX",
"cf-ipcountry": "JP",
"cf-ray": "XXXXXX",
"cf-visitor": "{\"scheme\":\"https\"}",
"connection": "Keep-Alive",
"host": "workers-logs.example.workers.dev",
"user-agent": "curl/8.1.2",
"x-forwarded-proto": "https",
"x-real-ip": "XXXXXX"
},
"cf": {
"longitude": "XXXXXX",
"httpProtocol": "HTTP/2",
"tlsCipher": "AEAD-CHACHA20-POLY1305-SHA256",
"continent": "AS",
"country": "JP",
"verifiedBotCategory": "",
"tlsClientAuth": {
"certIssuerDNLegacy": "",
"certIssuerSKI": "",
"certSubjectDNRFC2253": "",
"certSubjectDNLegacy": "",
"certFingerprintSHA256": "",
"certNotBefore": "",
"certSKI": "",
"certSerial": "",
"certIssuerDN": "",
"certVerified": "NONE",
"certNotAfter": "",
"certSubjectDN": "",
"certPresented": "0",
"certRevoked": "0",
"certIssuerSerial": "",
"certIssuerDNRFC2253": "",
"certFingerprintSHA1": ""
},
"tlsExportedAuthenticator": {
"clientFinished": "XXXXXX",
"clientHandshake": "XXXXXX",
"serverHandshake": "XXXXXX",
"serverFinished": "XXXXXX"
},
"tlsVersion": "TLSv1.3",
"city": "XXXXXX",
"timezone": "Asia/Tokyo",
"colo": "KIX",
"tlsClientHelloLength": "333",
"postalCode": "XXXXXX",
"region": "XXXXXX",
"latitude": "XXXXXX",
"requestPriority": "weight=16;exclusive=0;group=0;group-weight=0",
"regionCode": "XXXXXX",
"asOrganization": "XXXXXX",
"tlsClientExtensionsSha1": "XXXXXX",
"tlsClientRandom": "XXXXXX",
"clientTcpRtt": 11,
"asn": 4713,
"edgeRequestKeepAliveStatus": 1
},
"path": "/"
},
"rayId": "XXXXXX",
"response": {
"status": 200
}
},
"scriptName": "workers-logs",
"outcome": "ok",
"eventType": "fetch",
"scriptVersion": {
"id": "XXXXXX"
},
"$metadata": {
"requestId": "XXXXXX",
"id": "XXXXXX",
"type": "cf-worker-event"
}
}
}
ライブ機能
上記のダッシュボードだとログの保存に時間がかかるためリクエストを送ってからログが表示されるまでに 2〜3 分ほどかかってしまいます。
右上の「▶️ ライブ」のボタンを押すと以下のような画面になるのでここからリアルタイムにログを確認することも可能です。
まとめ
今回は Workers Logs を試してみました。
この機能があれば、皆さんが望んでいたログの永続化が簡単にできそうで、非常に良かったです。
ただ現状は、ログの保存期間が 7 日間で延長できなかったり、エラーなどの際にアラートで通知する機能がないので、Logs 機能自体は待望だったものの、今後のアップデートに期待したいなと感じました 🤔(Cloudflare の Discord では、すでに保存期間の延長やアラート機能も予定していると言及されています。)
ぜひ、皆さんもすでに運用している Workers で試してみてください 🙌
参考資料
Discussion