获取客户针对 Azure 的使用率记录

适用于:合作伙伴中心 | Microsoft Cloud for US Government 合作伙伴中心

可以使用 Azure 利用率 API 获取指定时间段内客户 Azure 订阅的利用率记录。

先决条件

  • 合作伙伴中心身份验证中所述的凭据。 此方案支持使用独立应用和 App+User 凭据进行身份验证。

  • 客户 ID (customer-tenant-id)。 如果不知道客户的 ID,可以通过选择“客户”工作区,然后从客户列表中选择客户,然后选择“帐户”,在合作伙伴中心查找该 ID。 在客户的“帐户”页上,在“客户帐户信息”部分查找 Microsoft ID Microsoft ID 与客户 ID (customer-tenant-id) 相同。

  • 订阅标识符。

此 API 为任意时间跨度返回每日和每小时未分级的消耗量。 但是, Azure 计划不支持此 API。 如果有 Azure 计划,请参阅文章 “获取发票未计费的消耗线项目 ”和 “获取发票计费的消耗行项 ”。 这些文章介绍如何在每个资源的每个计量的每日级别获得分级消耗量。 此速率消耗相当于 Azure 利用率 API 提供的每日粒度数据。 需要使用发票标识符来检索计费使用情况数据。 或者,可以使用当前和以前的时间段来获得未计费的使用情况估算。 Azure 计划订阅资源目前不支持每小时粒度数据和任意日期范围筛选器。

Azure 使用率 API

此 Azure 利用率 API 提供对一段时间内利用率记录的访问,该记录表示在计费系统中报告利用率的时间。 它提供对用于创建和计算对帐文件的相同利用率数据的访问权限。 但是,它不知道计费系统对帐文件逻辑。 不应期望对帐文件摘要结果与从此 API 检索到的结果完全匹配在同一时间段内。

例如,计费系统采用相同的利用率数据,并应用延迟规则来确定对帐文件中考虑的内容。 当计费周期关闭时,在计费周期结束的一天结束之前,所有使用情况都包含在对帐文件中。 计费周期结束后 24 小时内报告的任何延迟使用情况将在下一个对帐文件中考虑。 有关合作伙伴计费方式的延迟规则,请参阅 获取 Azure 订阅的消耗数据。

此 REST API 已分页。 如果响应有效负载大于单个页面,则必须按照下一个链接获取下一页利用率记录。

方案:合作伙伴 A 已将 Azure 旧版订阅的计费所有权(145P)转移到合作伙伴 B

如果合作伙伴将 Azure 旧版订阅的计费所有权转让给另一个合作伙伴,当新的合作伙伴调用已转移订阅的利用率 API 时,他们必须使用商业订阅 ID(这显示在合作伙伴中心帐户中),而不是 Azure 权利 ID。 仅当合作伙伴 B 代表客户Azure 门户管理员时,才会显示 Azure 权利 ID。

若要成功调用已转移订阅的利用率 API,新合作伙伴需要使用商务订阅 ID。

C#

若要获取 Azure 使用率记录,请执行以下命令:

  1. 获取客户 ID 和订阅 ID。

  2. 调用 IAzureUtilizationCollection.Query 方法可返回包含利用率记录的 ResourceCollection

  3. 获取 Azure 利用率记录枚举器以遍历利用率页。 此步骤是必需的,因为资源集合已分页。

  • 示例控制台测试应用
  • 项目:合作伙伴中心 SDK 示例
  • :GetAzureSubscriptionUtilization.cs
// IAggregatePartner partnerOperations;
// string customerId;
// string subscriptionId;

IPartner partner = PartnerService.Instance.CreatePartnerOperations(credentials);

// Retrieve the utilization records for the last year in pages of 100 records.
var utilizationRecords = partner.Customers[customerId].Subscriptions[subscriptionId].Utilization.Azure.Query(
    DateTimeOffset.Now.AddYears(-1),
    DateTimeOffset.Now,
    size: 100);

// Create an Azure utilization enumerator which will aid us in traversing the utilization pages.
var utilizationRecordEnumerator = partner.Enumerators.Utilization.Azure.Create(utilizationRecords);

while (utilizationRecordEnumerator.HasValue)
{
    //
    // Insert code here to work with this page.
    //

    // Get the next page.
    utilizationRecordEnumerator.Next();
}

Java

合作伙伴中心 Java SDK 可用于管理合作伙伴中心资源。 它是由合作伙伴社区维护的开源项目,不受 Microsoft 正式支持。 如果遇到问题,可以从社区获取帮助在 GitHub 上创建问题

若要获取 Azure 利用率记录,首先需要客户标识符和订阅标识符。 然后调用 IAzureUtilizationCollection.query 函数,以便返回包含使用率记录的 ResourceCollection。 因为资源集合将分页,所以你必须获取 Azure 使用率记录枚举器来遍历使用率页面。

// IAggregatePartner partnerOperations;
// String customerId;
// String subscriptionId;

ResourceCollection<AzureUtilizationRecord> utilizationRecords = partnerOperations.getCustomers()
  .byId(customerId).getSubscriptions().byId(subscriptionId)
  .getUtilization().getAzure().query(
      new DateTime().minusYears(1),
      new DateTime(),
      AzureUtilizationGranularity.Daily,
      true,
      100);

// Create an Azure utilization enumerator which will aid us in traversing the utilization pages
IResourceCollectionEnumerator<ResourceCollection<AzureUtilizationRecord>> utilizationRecordEnumerator =
    partnerOperations.getEnumerators().getUtilization().getAzure().create(utilizationRecords);

while (utilizationRecordEnumerator.hasValue())
{
    //
    // Insert code here to work with this page.
    //

    // get the next page
    utilizationRecordEnumerator.next();
}

PowerShell

合作伙伴中心 PowerShell 模块可用于管理合作伙伴中心资源。 它是由合作伙伴社区维护的开源项目,不受 Microsoft 正式支持。 如果遇到问题,可以从社区获取帮助在 GitHub 上创建问题

若要获取 Azure 利用率记录,首先需要客户标识符和订阅标识符。 然后调用 Get-PartnerCustomerSubscriptionUtilization 此命令将返回可用于指定时间段的所有记录。

# $customerId
# $subscriptionId

Get-PartnerCustomerSubscriptionUtilization -CustomerId $customerId -SubscriptionId $subscriptionId -StartDate (Get-Date).AddDays(-2).ToUniversalTime() -Granularity Hourly -ShowDetails

REST 请求

请求语法

方法 请求 URI
GET {baseURL}/v1/customers/{customer-tenant-id}/subscriptions/{subscription-id}/utilizations/azure?start_time={start-time}&end_time={end-time}&granularity={granularity}&show_details={True}

URI 参数

使用以下路径和查询参数获取利用率记录。

名称 类型​​ 必需 说明
customer-tenant-id string 一个 GUID 格式的字符串,用于标识客户。
subscription-id string 一个 GUID 格式的字符串,用于标识订阅。
start_time 采用 UTC 日期/时间偏移格式的字符串 表示计费系统中报告利用率的时间范围的开始时间。
end_time 采用 UTC 日期/时间偏移格式的字符串 表示计费系统中报告利用率的时间范围的结束时间。
粒度 string 定义使用情况聚合的粒度。 可用选项包括: daily (默认值)和 hourly
show_details boolean 指定是否获取实例级使用情况详细信息。 默认为 true
size 数字 指定单个 API 调用返回的聚合的数量。 默认值为 1000。 最大值为 1000。

请求标头

有关详细信息,请参阅合作伙伴中心 REST 标头

请求正文

请求示例

以下示例请求生成的结果类似于对帐文件在 7/2 - 8/1 期间显示的结果。 这些结果可能不完全匹配(有关详细信息,请参阅 Azure 利用率 API 部分)。

此示例请求在 7/2(UTC)和 8/2(UTC)之间返回计费系统中报告的利用率数据(UTC)。

GET https://api.partnercenter.microsoft.com/v1/customers/E499C962-9218-4DBA-8B83-8ADC94F47B9F/subscriptions/FC8F8908-F918-4406-AF13-D5BC0FE41865/utilizations/azure?start_time=2017-07-02T00:00:00-08:00&end_time=2017-08-02T00:00:00-08:00 HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: e6a3b6b2-230a-4813-999d-57f883b60d38
MS-CorrelationId: a687bc47-8d08-4b78-aff6-5a59aa2055c2
X-Locale: en-US
Host: api.partnercenter.microsoft.com

REST 响应

如果成功,此方法在响应正文中返回 Azure 使用率记录资源的集合。 如果 Azure 利用率数据尚未在依赖系统中准备就绪,此方法将返回 HTTP 状态代码 204,其中包含 Retry-After 标头。

响应的成功和错误代码

每个响应都带有一个 HTTP 状态代码,用于指示成功或失败以及其他调试信息。 使用网络跟踪工具读取 HTTP 状态代码、 错误代码类型和其他参数。

响应示例

HTTP/1.1 200 OK
Content-Length: 2630
Content-Type: application/json; charset=utf-8
MS-CorrelationId: a687bc47-8d08-4b78-aff6-5a59aa2055c2
MS-RequestId: e6a3b6b2-230a-4813-999d-57f883b60d38
MS-CV: PjuGoYrw806o6A3Y.0
MS-ServerId: 030020525
Date: Fri, 04 Aug 2017 23:48:28 GMT

{
  "totalCount": 2,
  "items": [
    {
      "usageStartTime": "2017-06-07T17:00:00-07:00",
      "usageEndTime": "2017-06-08T17:00:00-07:00",
      "resource": {
        "id": "8767aeb3-6909-4db2-9927-3f51e9a9085e",
        "name": "Storage Admin",
        "category": "Storage",
        "subcategory": "Block Blob",
        "region": "Azure Stack"
      },
      "quantity": 0.217790327034891,
      "unit": "1 GB/Hr",
      "infoFields": {},
      "instanceData": {
        "resourceUri": "/subscriptions/ab7e2384-eeee-489a-a14f-1eb41ddd261d/resourcegroups/system.local/providers/Microsoft.Storage/storageaccounts/srphealthaccount",
        "location": "azurestack",
        "partNumber": "",
        "orderNumber": "",
        "additionalInfo": {
          "azureStack.MeterId": "09F8879E-87E9-4305-A572-4B7BE209F857",
          "azureStack.SubscriptionId": "dbd1aa30-e40d-4436-b465-3a8bc11df027",
          "azureStack.Location": "local",
          "azureStack.EventDateTime": "06/05/2017 06:00:00"
        }
      },
      "attributes": {
        "objectType": "AzureUtilizationRecord"
      }
    },
    {
      "usageStartTime": "2017-06-07T17:00:00-07:00",
      "usageEndTime": "2017-06-08T17:00:00-07:00",
      "resource": {
        "id": "8767aeb3-6909-4db2-9927-3f51e9a9085e",
        "name": "Storage Admin",
        "category": "Storage",
        "subcategory": "Block Blob",
        "region": "Azure Stack"
      },
      "quantity": 0.217790327034891,
      "unit": "1 GB/Hr",
      "infoFields": {},
      "instanceData": {
        "resourceUri": "/subscriptions/ab7e2384-eeee-489a-a14f-1eb41ddd261d/resourcegroups/system.local/providers/Microsoft.Storage/storageaccounts/srphealthaccount",
        "location": "azurestack",
        "partNumber": "",
        "orderNumber": "",
        "additionalInfo": {
          "azureStack.MeterId": "09F8879E-87E9-4305-A572-4B7BE209F857",
          "azureStack.SubscriptionId": "dbd1aa30-e40d-4436-b465-3a8bc11df027",
          "azureStack.Location": "local",
          "azureStack.EventDateTime": "06/05/2017 06:00:00"
        },
        "attributes": {
          "objectType": "AzureUtilizationRecord"
        }
      },

      "links": {
        "self": {
          "uri": "customers/E499C962-9218-4DBA-8B83-8ADC94F47B9F/subscriptions/FC8F8908-F918-4406-AF13-D5BC0FE41865/utilizations/azure?start_time=2017-06-10T00:00:00Z&end_time=2017-07-09T00:00:00Z&granularity=Daily&show_details=True&size=1000",
          "method": "GET",
          "headers": []
        }
      },
      "attributes": {
        "objectType": "Collection"
      }
    }
  ]
}