如何通过Client SDK或API获取Google Cloud当前使用/计费报告/指标?
刚好我之前做过类似的需求,给你整理下用Google.Apis.Cloudbilling.v1在应用内查看Cloud Speech API费用的具体步骤,亲测能用:
实现应用内查看Cloud Speech API费用的步骤
1. 先搞定依赖和权限
- 确保你安装的
Google.Apis.Cloudbilling.v1NuGet包是最新稳定版,避免踩旧版本的坑 - 你的服务账号得有Billing Account Viewer(
roles/billing.viewer)权限,不然读不到账单数据。去IAM控制台找到你的服务账号,给它添上这个权限,关联到对应的账单账户就行
2. 核心代码实现
第一步:初始化Cloud Billing客户端
这部分很省心,因为你已经配置了GOOGLE_APPLICATION_CREDENTIALS,客户端会自动读取:
using Google.Apis.Cloudbilling.v1; using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.Cloudbilling.v1.Data; // 自动读取环境变量里的凭证,不用手动写路径 var credential = GoogleCredential.GetApplicationDefault() .CreateScoped(CloudbillingService.Scope.CloudPlatform); var billingService = new CloudbillingService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "你的应用名称" // 随便填个标识就行 });
第二步:获取项目关联的账单账户ID
要查费用得先知道项目绑定的账单账户,用这段代码就能拿到:
// 替换成你自己的Google Cloud项目ID string projectId = "your-project-id"; var billingInfoRequest = billingService.Projects.GetBillingInfo($"projects/{projectId}"); var billingInfo = billingInfoRequest.Execute(); // 拿到账单账户ID,格式是 billingAccounts/XXXXXX string billingAccountId = billingInfo.BillingAccountName;
第三步:查询Cloud Speech API的专属费用
这里可以指定时间范围,还能过滤只看Speech API的费用,避免拿到所有服务的数据:
var costsRequest = billingService.BillingAccounts.Costs.List(billingAccountId); // 关键过滤:只取Cloud Speech API的费用,服务代码是 speech.googleapis.com costsRequest.Filter = "service.id = 'speech.googleapis.com'"; // 比如查过去30天的费用,时间格式要符合ISO 8601 DateTime endTime = DateTime.UtcNow; DateTime startTime = endTime.AddDays(-30); costsRequest.TimePeriodStartTime = startTime.ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); costsRequest.TimePeriodEndTime = endTime.ToString("yyyy-MM-dd'T'HH:mm:ss'Z'"); // 执行请求拿到费用列表 var costList = costsRequest.Execute(); // 遍历输出或者处理数据 foreach (var cost in costList.Costs) { Console.WriteLine($"时间段: {cost.StartTime}"); Console.WriteLine($"服务名称: {cost.Service.DisplayName}"); Console.WriteLine($"产生费用: {cost.CostAmount.CurrencyCode} {cost.CostAmount.Value}"); Console.WriteLine($"使用量: {cost.UsageAmount.Value} {cost.UsageUnit}"); Console.WriteLine("---"); }
3. 几个要注意的坑
- 费用数据不是实时的,一般会有几个小时到24小时的延迟,刚调用的Speech服务可能不会马上出现在结果里
- 如果碰到403权限错误,先检查服务账号的Billing Account Viewer权限有没有加对,账单账户是不是项目绑定的那个
- 要是想更精细地过滤(比如按地区、具体收费项),可以在
Filter里加更多条件,比如sku.id = '对应的SKU ID',SKU ID可以去控制台账单详情里找
内容的提问来源于stack exchange,提问作者xoail
相关产品推荐
相关产品推荐

