Durable Objects は、Durable Object の名前空間レベルおよびリクエストレベルのメトリクスについて、アナリティクスを公開します。
Cloudflare ダッシュボード ↗ のチャートに表示されるメトリクスは、Cloudflare の GraphQL Analytics API から照会されます。メトリクスには GraphQL からプログラムでアクセス するか、HTTP クライアントからアクセスできます。
Durable Objects の名前空間ごとのアナリティクスは、Cloudflare ダッシュボードで確認できます。名前空間の現在および過去のメトリクスを見るには、次の手順を実行します。
-
Cloudflare ダッシュボードで、Durable Objects ページを開きます。
Durable Objects を開く ↗ -
アカウントレベルの Durable Objects 使用量を確認します。
-
既存の Durable Object 名前空間を選びます。
-
Metrics タブを選びます。
必要に応じて、照会する期間を選べます。初期値は直近 24 時間です。
ID または name を入力して一致するものを選ぶと、チャートを 1 つの Durable Object に絞り込めます。フィルターを消すと、名前空間レベルのメトリクスに戻ります。
Metrics タブの Memory usage チャートは、Durable Object がアクティブなあいだ定期的にサンプリングした V8 isolate のメモリ使用量を、P50、P90、P99、P999 のパーセンタイルに分けて表示します。各 isolate には 128 MB のメモリ上限 があります。
このメモリには、クラスのプロパティ、キャッシュ、アクティブな WebSocket 接続など、オブジェクトが蓄積するインメモリ状態が入ります。この状態はリクエストをまたいで保持され、オブジェクトが ハイバネーションまたはエビクション されるまで残ります。エビクション、ハイバネーション、クラッシュをまたいでは保持されないため、重要なデータは ストレージ に保存してください。
チャートの内容は、フィルターの有無で変わります。
- フィルターなし(名前空間ビュー): パーセンタイルは、名前空間内のすべての Durable Object の定期メモリサンプルから計算され、名前空間全体の isolate メモリの分布を示します。
- ID または name でフィルターした場合: パーセンタイルは、その 1 つの Durable Object について報告された定期サンプルだけから計算されます。各サンプルは、それをホストしている isolate 全体のメモリです。同じ isolate を共有する他の Durable Object が含まれることがあるため、そのオブジェクト単体のメモリではありません。
メモリ使用量は durableObjectsPeriodicGroups GraphQL データセットを使っており、memoryUsageBytes メトリクスを公開しています。パーセンタイル値は quantiles.memoryUsageBytesP50 から quantiles.memoryUsageBytesP999 まで、バイト単位で取得できます。
メモリ使用量が時間とともに増えている場合は、メモリリークの可能性があります。ローカルで DevTools のメモリプロファイリング を使い、ヒープスナップショットを取得して、メモリ消費が大きいオブジェクトを特定してください。
Durable Object のログは、Cloudflare ダッシュボードで確認できます。ログは、スクリプト名と Durable Object のクラス名で集計されます。
Durable Object のログを使い始めるには、次の手順を実行します。
-
Durable Object クラスを定義している Worker の Wrangler 設定ファイルで、Durable Object のログを有効にします。
{ "observability": { "enabled": true } }[observability] enabled = true -
更新したバインディングを含む、最新バージョンの Worker をデプロイします。
-
Durable Objects ページを開きます。
Durable Objects を開く ↗ -
既存の Durable Object 名前空間を選びます。
-
Logs タブを選びます。
Durable Object のメトリクスは GraphQL で提供されます。
Durable Object のメトリクスを含むデータセットは次のとおりです。
durableObjectsInvocationsAdaptiveGroupsdurableObjectsPeriodicGroupsdurableObjectsStorageGroupsdurableObjectsSubrequestsAdaptiveGroups
各データセットが公開するフィールドは、GraphQL Introspection で確認できます。
WebSockets を使う Durable Objects では、WebSocket に複数の種類のリクエストがあるため、複数の GraphQL データセットにリクエストメトリクスが出ます。
- WebSocket 接続そのもののメトリクスは、接続が閉じたあとに
durableObjectsInvocationsAdaptiveGroupsに現れます。WebSocket 接続は長寿命なため、Durable Object が終了するまで接続が終わらないことがよくあります。 - WebSocket 接続上の送受信メッセージのメトリクスは、
durableObjectsPeriodicGroupsで確認できます。WebSocket 接続が WebSocket Hibernation を使う場合、受信 WebSocket メッセージは代わりにdurableObjectsInvocationsAdaptiveGroupsに現れます。
viewer {
/*
Replace with your account tag, the 32 hex character id visible at the beginning of any url
when logged in to dash.cloudflare.com or under "Account ID" on the sidebar of the Workers & Pages Overview
*/
accounts(filter: {accountTag: "your account tag here"}) {
// Replace dates with a recent date
durableObjectsInvocationsAdaptiveGroups(filter: {date_gt: "2023-05-23"}, limit: 1000) {
sum {
// Any other fields found through introspection can be added here
requests
responseBodySize
}
}
durableObjectsPeriodicGroups(filter: {date_gt: "2023-05-23"}, limit: 1000) {
sum {
cpuTime
}
}
durableObjectsStorageGroups(filter: {date_gt: "2023-05-23"}, limit: 1000) {
max {
storedBytes
}
}
}
}認証と、Workers データセットの照会方法については、Querying Workers Metrics with GraphQL チュートリアルを参照してください。
- Cloudflare の GraphQL Analytics API を照会する Grafana ダッシュボードの設定手順は、Grafana Dashboard starter for Durable Object metrics ↗ を参照してください。
Durable Object のリクエストログには、インスタンス ID が $workers.durableObjectId に含まれます。このフィールドで絞り込むと、デバッグ対象のインスタンスを特定できます。