建立報表

App Optimize API 可產生報表,協助您分析費用和資源用量資料。如要取得這項資訊,請先傳送 API 要求來建立報表。您可以在這項要求中定義資料範圍、資料的匯總或分組方式,以及要套用的篩選器。

報表製作完成後,您就可以查看資料。

如要瞭解可用的範圍、維度、指標和篩選器,以及這些設定的有效組合,請參閱「關於報表」。

事前準備

  • 本指南中的範例需要 Google Cloud 含有有效資源的專案,才能進行分析。App Optimize API 需要帳單和用量資料才能產生有意義的結果;針對新專案或空白專案執行的報表會是空白。

    在本指南中,標示為 PROJECT_ID 的專案提供資料範圍,並代管報表資源。

    App Optimize API 支援在一個專案中建立報表,分析來自其他專案或單一專案或資料夾層級界線中應用程式的資料。如要產生 App Hub 應用程式的報表 (可由多個專案組成),您必須在應用程式的所有相關聯專案中,具備必要的監控和帳單權限,才能建立報表。

  • 請確認您已啟用 App Optimize API,以便透過專案建立及管理報表資源。

gcloud

在 Google Cloud 控制台中啟用 Cloud Shell。

啟用 Cloud Shell

Google Cloud 主控台底部會開啟一個 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。

如要瞭解如何設定正式環境的驗證機制,請參閱 Google Cloud 驗證說明文件中的「 為在 Google Cloud上執行的程式碼設定應用程式預設憑證 」。

Python

  1. 安裝 App Optimize API 適用的 Python 用戶端程式庫
  2. 如要在本機開發環境中使用本頁的 Python 範例,請安裝並初始化 gcloud CLI,然後使用您的使用者憑證設定應用程式預設憑證。

    1. 安裝 Google Cloud CLI。

    2. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    3. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

      gcloud auth application-default login

      如果您使用 Cloud Shell,則不需要執行這項操作。

      如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

    如要瞭解如何設定正式環境的驗證機制,請參閱 Google Cloud 驗證說明文件中的「 為在 Google Cloud上執行的程式碼設定應用程式預設憑證 」。

REST

如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

    安裝 Google Cloud CLI。

    若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

如要瞭解如何設定正式環境的驗證機制,請參閱 Google Cloud 驗證說明文件中的「 為在 Google Cloud上執行的程式碼設定應用程式預設憑證 」。

必要的角色

如要取得使用本指南建立報表所需的權限,請要求系統管理員在含有有效資源的專案中,授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

如要進一步瞭解 App Optimize API 要求的權限和角色,請參閱「使用 IAM 控管存取」。

建立報表

下列步驟說明如何啟動報表建立程序。這個範例會建立報表,協助您瞭解所選專案過去一週的費用和平均 CPU 使用率。這份報表會依各個資源細分這項資訊,包括資源類型、所屬產品和位置。 Google Cloud

如要建立報表資源,請按照偏好方法的說明操作:

gcloud

使用下列 gcloud beta app-optimize reports create 指令建立報表。

gcloud beta app-optimize reports create REPORT_ID \
  --project=PROJECT_ID \
  --location=global \
  --dimensions=location,product_display_name,project,resource,resource_type \
  --metrics=cost,cpu_mean_utilization \
  --report-filter='hour >= now - duration("168h")' \
  --scopes=project=projects/PROJECT_ID

更改下列內容:

  • REPORT_ID:新報表的專屬 ID,例如 my-resource-cost-report-1
  • PROJECT_ID:您的 Google Cloud 專案 ID。

建立報表的指令會自動等待作業完成。

Python

下列 Python 程式碼會使用 AppOptimizeClient.create_report() 建立報表。

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"

# Create the App Optimize client
client = appoptimize_v1beta.AppOptimizeClient()

# Initialize the report request
report = appoptimize_v1beta.Report(
    dimensions=['location', 'product_display_name', 'project', 'resource', 'resource_type'],
    metrics=['cost', 'cpu_mean_utilization'],
    filter='hour >= now - duration("168h")',
    scopes=[
        appoptimize_v1beta.Scope(project=f"projects/{project_id}"),
    ],
)
request = appoptimize_v1beta.CreateReportRequest(
    parent=f"projects/{project_id}/locations/global",
    report=report,
    report_id=report_id,
)

# Send the request and wait for completion
operation = client.create_report(request=request)
print("Waiting for operation to complete...")
response = operation.result()
print(response)

更改下列內容:

  • PROJECT_ID:您的 Google Cloud 專案 ID。
  • REPORT_ID:新報表的專屬 ID,例如 my-first-report

用戶端程式庫中的 operation.result() 方法會自動等待作業完成。不需要手動輪詢迴圈。

REST

將 HTTP POST 要求傳送至 REST API 的 projects.locations.reports資源路徑

  1. 如要傳送要求,請使用下列 curl 指令:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{
        "scopes": [
          {
            "project": "projects/PROJECT_ID"
          }
        ],
        "dimensions": [
          "location",
          "product_display_name",
          "project",
          "resource",
          "resource_type"
        ],
        "metrics": [
          "cost",
          "cpu_mean_utilization"
        ],
        "filter": "hour >= now - duration(\"168h\")"
      }' \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports?report_id=REPORT_ID"
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • REPORT_ID:新報表的專屬 ID,例如 my-resource-cost-report-1

    API 會傳回長時間執行的作業 (LRO) 物件。請注意回應中的 name 欄位,您將使用該欄位檢查作業狀態:

    {
      "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.OperationMetadata"
      },
      "done": false
    }
    

    在回應中,done 欄位為 false,表示報表產生作業正在進行中。

  2. 如要檢查報表是否已準備就緒,請將 GET HTTP 要求傳送至上一步傳回的作業 name

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/operations/OPERATION_ID"
    

    PROJECT_IDOPERATION_ID 替換為 LRO 回應中的值。

    檢查回應,判斷作業狀態:

    • 如果報表仍在產生中,回應會與初始 LRO 回應類似,但 done 會設為 false。您應稍待片刻 (例如 5 到 15 秒),然後重複這個步驟,再次輪詢。
    • 報告產生完成後,回應會包含 "done": true,並在 response 欄位中納入報告資源:

        {
          "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID",
          "metadata": {
            "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.OperationMetadata"
          },
          "done": true,
          "response": {
            "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.Report",
            "name": "projects/PROJECT_ID/locations/global/reports/REPORT_ID",
            "dimensions": [
              "location",
              "product_display_name",
              "project",
              "resource",
              "resource_type"
            ],
            "scopes": [
              {
                "project": "projects/PROJECT_ID"
              }
            ],
            "filter": "hour >= now - duration(\"168h\")",
            "expireTime": "2026-02-05T18:50:25.273833857Z",
            "metrics": [
              "cost",
              "cpu_mean_utilization"
            ]
          }
        }
        ```
      
    • 如果 LRO 發生錯誤,回應會包含 error 欄位,而非 response 欄位,並提供失敗的詳細資料。

作業順利完成後,您就可以讀取報表資料

並行處理額度

建立報表時,App Optimize API 會從 Cloud Billing 取得費用資料,並從 Cloud Monitoring 取得報表中每個 target_project 的用量資料。

  • 如果報表範圍僅限單一專案,該專案就是目標專案。
  • 如果是 App Hub 應用程式,凡是含有應用程式中服務或工作負載的專案,都是目標專案。

App Optimize API 會強制執行名為「Concurrent CreateReport operations」(並行 CreateReport 作業) 的並行配額,每個目標專案最多可並行要求 10 個報表資料。建立報表時,App Optimize API 會計算報表中的目標專案數量,並鎖定所需配額單位數量,直到建立報表的 LRO 完成為止。

由於系統層級的測量時間,幾分鐘內完成的報表可能不會計入並行限制。

如要查看目前的 API 活動及管理這些限制,請前往 Google Cloud 控制台的「配額與系統限制」頁面。

如果您打算同時建立多份報表,請考量團隊執行報表的時間,以及 App Hub 應用程式的結構:

  • 如果多個團隊執行的報表包含相同的目標專案,您可以為每個團隊錯開報表建立的開始時間。
  • 應用程式可以包含多個專案的資源,而單一專案的資源也可能供多個應用程式使用。如果同時為這類應用程式建立報表,系統會向目標專案發出多個要求。

舉例來說,假設某個團隊開發一套學習創意藝術的應用程式,並提供標準版和進階版。下表第一欄列出應用程式,在剩餘的資料欄中,勾號圖示 () 表示專案包含所列應用程式的服務或工作負載。

應用程式 common-project dance-project draw-project animate-project music-project
dance-app
draw-app
music-app
animate-app
choreograph-app
storyteller-app
dance-premium-app
draw-premium-app
music-premium-app
animate-premium-app
choreograph-premium-app
storyteller-premium-app

如果您同時為所有列出的應用程式建立費用和用量資料報表,App Optimize API 會在某些專案中,使用超過一個並行限制單位。具體來說,共用專案 common-project 會收到 12 項費用和用量資料要求。由於這個數字超過並行限制,因此有 2 個資料要求會失敗。

為避免這個問題,團隊可以先執行應用程式標準版本的報表,再執行進階版本的報表。

後續步驟