读取报告的数据

在 App Optimize API 创建报告后,您需要提取报告的费用和利用率数据。此操作会以列和行的形式下载相应信息,并根据您在请求报告时指定的维度和指标进行结构化处理。

此 API 请求不同于获取报告的元数据,后者仅返回报告的配置设置。

准备工作

gcloud

在 Google Cloud 控制台中,激活 Cloud Shell。

激活 Cloud Shell

Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

如需了解如何为生产环境设置身份验证,请参阅 Google Cloud 身份验证文档中的 为在 Google Cloud上运行的代码设置应用默认凭据 。

Python

  1. 安装适用于 App Optimize API 的 Python 客户端库。
  2. 如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。

    2. 如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。

    3. 如果您使用的是本地 shell,请为您的用户账号创建本地身份验证凭证:

      gcloud auth application-default login

      如果您使用的是 Cloud Shell,则无需执行此操作。

      如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI。

    如需了解详情,请参阅身份验证文档中的 为本地开发环境设置 ADC。 Google Cloud

    如需了解如何为生产环境设置身份验证,请参阅 Google Cloud 身份验证文档中的 为在 Google Cloud上运行的代码设置应用默认凭据 。

REST

如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。

    安装 Google Cloud CLI。

    如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。

如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。

如需了解如何为生产环境设置身份验证,请参阅 Google Cloud 身份验证文档中的 为在 Google Cloud上运行的代码设置应用默认凭据 。

所需的角色

如需获得读取报告数据所需的权限,请让管理员向您授予拥有报告资源的项目的 App Optimize Viewer (roles/appoptimize.viewer) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

读取报告数据

如需读取已完成的报告中的数据,请按照您偏好的方法对应的说明操作:

gcloud

使用 gcloud beta app-optimize reports read 命令可提取报告的数据。

gcloud beta app-optimize reports read REPORT_ID \
  --project=PROJECT_ID \
  --location=global

替换以下内容:

  • PROJECT_ID:您要读取的报告资源所属的 Google Cloud 项目的 ID。
  • REPORT_ID:要读取的报告的 ID。此 ID 是在创建报告时指定的,可以通过列出报告来获取。

gcloud 命令会自动处理分页,并返回所有请求的资源。

如需了解 cost 字段中的值,请参阅解读费用指标。 如需详细了解相关数据并了解其限制,请参阅了解数据。

Python

以下 Python 代码使用 AppOptimizeClient.read_report() 读取报告的数据。

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"

# Create the App Optimize client and read a report's data
client = appoptimize_v1beta.AppOptimizeClient()
request = appoptimize_v1beta.ReadReportRequest(
    name=f"projects/{project_id}/locations/global/reports/{report_id}"
)
result = client.read_report(request=request)

# Display the report data
print(result)

替换以下内容:

  • PROJECT_ID:您要读取的报告资源所属的 Google Cloud 项目的 ID。
  • REPORT_ID:要读取的报告的 ID。此 ID 是在创建报告时指定的,可以通过列出报告来获取。

客户端库会自动处理分页,并从迭代器中生成结果。

如需了解 cost 字段中的值,请参阅解读费用指标。 如需详细了解相关数据并了解其限制,请参阅了解数据。

REST

向 REST API 的 :read 自定义方法发送 HTTP POST 请求。

  1. 使用以下 curl 命令发送相应请求,以读取报告数据的第一页:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{"pageSize": PAGE_SIZE}' \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID:read"
    

    替换以下内容:

    • PROJECT_ID:您要读取的报告资源所属的 Google Cloud 项目的 ID。
    • REPORT_ID:要读取的报告的 ID。此 ID 是在创建报告时指定的,可以通过列出报告来获取。
    • PAGE_SIZE:每页返回的行数上限。即使您指定了更大的值,服务器每页最多也只会返回 1,000 行。响应的大小也受 10 MB 的限制,因此为了不超过该限制,返回的行数可能会更少。 如果省略 pageSize,则使用默认大小。
  2. 如果请求成功,API 会返回一个 JSON 响应,其中包含报告架构和行。以下是成功响应的示例:

    {
      "rows": [
        [
          "//apphub.googleapis.com/projects/123456789/locations/us-central1/applications/my-app-1",
          {
            "currency_code": "USD",
            "units": "106",
            "nanos": 321590000
          }
        ],
        [
          "//apphub.googleapis.com/projects/123456789/locations/us-central1/applications/my-app-2",
          {
            "currency_code": "USD",
            "units": "797",
            "nanos": 641691000
          }
        ]
      ],
      "columns": [
        {
          "name": "application",
          "type": "STRING"
        },
        {
          "name": "cost",
          "type": "RECORD",
          "columns": [
            {
              "name": "currency_code",
              "type": "STRING"
            },
            {
              "name": "units",
              "type": "INT64"
            },
            {
              "name": "nanos",
              "type": "INT64"
            }
          ]
        }
      ],
      "nextPageToken": "AABBCCddeeffGGHHiiJJkkLL"
    }
    

    如需了解 cost 字段中的值,请参阅解读费用指标。 如需详细了解相关数据并了解其限制,请参阅了解数据。

  3. 如果响应包含 nextPageToken 字段,则报告包含额外的行。如需检索下一页结果,请再次发出 POST 请求,并在 JSON 正文的 pageToken 字段中添加此令牌:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{"pageToken": "NEXT_PAGE_TOKEN", "pageSize": PAGE_SIZE}' \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID:read"
    

    替换以下内容:

    • NEXT_PAGE_TOKEN:上一个响应中收到的 nextPageToken 的值。
    • PAGE_SIZE:每页返回的行数上限。虽然您可以在网页请求之间更改此值,但服务器端限制仍然适用。

    重复此过程,直到响应不再包含 nextPageToken,表明您已检索到所有报告数据。

后续步骤