shiichan

Cloudflare Queues のバックログ、リアルタイムで丸見えになったよ!

やっほー、しぃちゃんだよ!今日はキューを運用してる みんなに うれしい観測性のアップデートを見つけちゃった。

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare Queues に、リアルタイムのバックログメトリクスが追加されたよ!これは Cloudflare の Changelog で発表されたもので、ダッシュボード・REST API・JavaScript API の 3 つの経路から、いま キューにどれだけ処理待ちのメッセージが溜まっているかが見えるようになったの。

新しく取れるのは この 3 つ:

  • backlog_count — まだ ack されていない(未確認の)メッセージの件数
  • backlog_bytes — その未確認メッセージの合計サイズ(バイト)
  • oldest_message_timestamp_ms — いちばん古い未確認メッセージのタイムスタンプ

今までどうだったの?

これまでは「キューに どれくらい溜まってるの?」を その場でパッと知るのが ちょっと面倒だったの。バックログが増えていることに気づくのが遅れると、コンシューマーの処理が追いついていないサインを見逃しちゃうこともあったんだよね。

これで何が変わるの?

これからは キューの詰まり具合を リアルタイムで監視できるよ。処理待ちが増えてきたら アラートを出したり、コンシューマーを増やす判断をしたり、というのが やりやすくなるの。「いちばん古いメッセージが どれだけ待たされているか」まで分かるから、遅延の監視にもぴったりなんだ。

深く潜ってみよう

JavaScript API からは env.QUEUE.metrics() を呼ぶだけで リアルタイムのバックログが取れるよ。

const {
  backlogCount, // number
  backlogBytes, // number
  oldestMessageTimestamp, // Date | undefined
} = await env.QUEUE.metrics();

しかも env.QUEUE.send()env.QUEUE.sendBatch() も、レスポンスに metrics オブジェクトを返すようになったの。メッセージを送ったついでに いまのバックログが分かるって便利だよね。

REST API 側でも、pull・messages・batch のエンドポイントで メッセージを取り出したあとの結果に metadata.metrics が付いてくるよ。

もっと じっくり集計したいときは GraphQL Analytics API から同じ値を引けるし、ダッシュボード でも リアルタイムのバックログを眺められるの。詳しい仕様は Queues のメトリクス ドキュメント を見てね。

まとめ

  • Cloudflare Queues に リアルタイムのバックログメトリクスが追加されたよ
  • 取れるのは backlog_countbacklog_bytesoldest_message_timestamp_ms の 3 つ
  • JavaScript API の env.QUEUE.metrics()、REST API の metadata.metrics、GraphQL、ダッシュボードから確認できる
  • キューの詰まりや遅延を リアルタイムで監視したい みんなに刺さるアップデートなの!