yseto.github.io/blog

Cloudflare R2 を監視する

Tue Aug 29 00:00:00 2023

最近、Cloudflareの勢いを感じているので、アカウントを作りCloudflare R2を試してみた。

Cloudflare R2は、色々なクラウドベンダーが実装しているようなオブジェクトストレージの一種で、Amazon Simple Storage Service (Amazon S3)互換のリクエストで操作ができる。Amazon S3は、あまりにも有名だし、他社の似た製品などと比較しても記事の趣旨から外れるので、割愛する。

オブジェクトストレージとしての操作方法はわかったので、実際に使用している容量であるとか、APIコール数(Cloudflare R2は、APIの種類やコール数で課金額が変わる)などをある程度見えるようにしておきたい。

Cloudflare GraphQL API からトラフィック量を過去1年に遡って集計する - Qiitaにあるような記事を参照したところ、Cloudflareの動作状態は、Cloudflare GraphQL APIから取得することができそうであることがわかった。

そして、Cloudflare R2の状態を同様に、GraphQLを使ってGrafanaのダッシュボードに表示させる記事 Cloudflare R2 の GraphQL Analytics を Grafana で可視化する - Qiita を見つけた。参考にさせてもらう。記事で紹介されているクエリの実物やスクリーンショット、GitHubレポジトリにあるGrafanaのダッシュボードをインポートするファイルなどから、どういうクエリの構造になっているか、どういうものが指標として表示できると嬉しいかなどを調べた。

ということで、Mackerel で使う想定で実装したのが、yseto/mackerel-plugin-cloudflare-r2 - GitHubになる。 APIのコール数や、ストレージに保存されているオブジェクト数であるとか、トラフィックの様子がそれなりに見えるようになった。この mackerel-plugin-cloudflare-r2 は、Mackerelのコマンドラインツール、mkrというもので、簡単にインストールができるようにしてある。

メトリックが取得できてる様子
メトリックが取得できてる様子

実装時に気づいたこととして、反映のスピードが緩やかなデータがあったり、現在時刻のデータがすぐに取得できる訳ではないので、オフセットを持たせて状態を取得する必要があったりするなど、若干の工夫が必要だった。それ以外には、特段困ることなく、手元でデバッグした限りだとほぼリアルタイムにAPIコール数などが取得できたので、一定の効果はありそう。

これはまだ作ったばかりで、手始めに状態を把握できる程度のものであり、成熟している状態ではない。したがって、実際のAPIコール数、それに伴う課金額などは、Cloudflareからの明細(この記事を書いている当人は、まだ使いだしたばかりなので、具体的な明細を目にしたことがない)などで確認する必要はあると思われる。

Rate Limitについても一応確認した。Limits · Cloudflare Analytics docsによると、

The default quota is 300 GraphQL queries over 5-minute window. It allows a user to run at least 1 query every second or do a burst of 300 queries and then wait 5 minutes before issuing another query.
とあったので、このプラグインを実行しただけでは、Rate Limitに達することもないはず。

まとめ