Cloudflare R2:通过 API 获取使用指标

问题描述 投票:0回答:1

我找不到如何通过 cloudflare 的 API 将使用指标获取到我的 R2 存储桶。 我想获取桶的大小以及A类和B类操作的数量。

谢谢!

api cloudflare metrics bucket cloudflare-r2
1个回答
0
投票

您可以使用它们的

https://api.cloudflare.com/client/v4/graphql
端点来执行这两个查询。无论如何,这就是他们的前端所做的。我正在使用
graphql-request
包在 Nodejs 中编写此内容,但我确实看到如果您也愿意,也可以使用 cURL 来完成此操作。

我主要关注他们的文档这里

这是一个执行这两个请求的 JavaScript 文件。如果你想过滤到某个存储桶,你可以将bucketName属性添加到过滤器中。但是,请记住,出于计费目的的操作请求是帐户范围内的,而不是每个存储桶的。

import 'dotenv/config'
import { request, gql } from 'graphql-request'

const date = new Date()
date.setDate(1) // set to first of the month

const res = await request('https://api.cloudflare.com/client/v4/graphql', gql`
{
  viewer {
    accounts(filter: { accountTag: $accountTag }) {
      r2OperationsAdaptiveGroups(
        filter: { datetime_geq: $datetime }
        limit: 9999
      ) {
        dimensions {
          actionType
        }
        sum {
          requests
        }
      }
    }
  }
}
`, {
  accountTag: process.env.CLOUDFLARE_ACCOUNT,
  datetime: date.toISOString(),
}, {
  'X-AUTH-EMAIL': process.env.CLOUDFLARE_EMAIL,
  'X-AUTH-KEY': process.env.CLOUDFLARE_API_TOKEN,
})

const classA = ["ListBuckets", "PutBucket", "ListObjects", "PutObject", "CopyObject", "CompleteMultipartUpload", "CreateMultipartUpload", "ListMultipartUploads", "UploadPart", "UploadPartCopy", "ListParts", "PutBucketEncryption", "PutBucketCors", "PutBucketLifecycleConfiguration"]
const classB = ["HeadBucket", "HeadObject", "GetObject", "UsageSummary", "GetBucketEncryption", "GetBucketLocation", "GetBucketCors", "GetBucketLifecycleConfiguration"]

let [classATotal, classBTotal] = [0, 0]

res.viewer.accounts[0].r2OperationsAdaptiveGroups.forEach(item => {
  if (classA.includes(item.dimensions.actionType)) {
    classATotal += item.sum.requests
  } else if (classB.includes(item.dimensions.actionType)) {
    classBTotal += item.sum.requests
  }
})

console.log("class A operations:", classATotal)
console.log("class B operations:", classBTotal)

const storage = await request('https://api.cloudflare.com/client/v4/graphql', gql`
{
  viewer {
    accounts(filter: { accountTag: $accountTag }) {
      r2StorageAdaptiveGroups(
        limit: 9999
        filter: { datetime_geq: $datetime }
      ) {
        max {
          payloadSize
        }
      }
    }
  }
}
`, {
  accountTag: process.env.CLOUDFLARE_ACCOUNT,
  datetime: date.toISOString(),
}, {
  'X-AUTH-EMAIL': process.env.CLOUDFLARE_EMAIL,
  'X-AUTH-KEY': process.env.CLOUDFLARE_API_TOKEN,
})

console.log("bytes", storage.viewer.accounts[0].r2StorageAdaptiveGroups[0].max.payloadSize)

这假设您有一个 .env 文件,其中填写了这三个值

CLOUDFLARE_ACCOUNT=
CLOUDFLARE_API_TOKEN=
CLOUDFLARE_EMAIL=

使用他们的docs作为指导生成令牌。

如何获取您的帐户ID

© www.soinside.com 2019 - 2024. All rights reserved.