Membuat dan membaca laporan

Pelajari cara membuat laporan App Optimize API tentang pengeluaran Anda Google Cloud, memantau pembuatan laporan, dan membaca data yang dihasilkan saat laporan siap. Dalam panduan memulai cepat ini, Anda dapat menggunakan REST API atau library klien Python.

Sebelum memulai

  • Contoh dalam panduan ini memerlukan Google Cloud project dengan active resource aktif untuk dianalisis. App Optimize API memerlukan data penagihan dan penggunaan untuk menghasilkan hasil yang bermakna; laporan yang dijalankan terhadap project baru atau kosong akan kosong.

    Dalam panduan ini, project yang diidentifikasi sebagai PROJECT_ID menyediakan cakupan data dan menghosting resource laporan.

    App Optimize API mendukung pembuatan laporan dalam satu project yang menganalisis data dari project lain atau dari aplikasi dalam batas project tunggal atau tingkat folder. Untuk membuat laporan di aplikasi App Hub, yang dapat terdiri dari beberapa project, Anda harus memiliki izin pemantauan dan penagihan yang diperlukan di semua project terkait aplikasi untuk membuat laporan.

  • Pastikan App Optimize API diaktifkan untuk project yang akan Anda gunakan untuk membuat dan mengelola resource laporan.

gcloud

  • Instal Google Cloud CLI.

  • Konfigurasi gcloud CLI agar menggunakan identitas gabungan Anda.

    Untuk mengetahui informasi selengkapnya, lihat Login ke gcloud CLI dengan identitas gabungan Anda.

  • Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  • Setelah menginisialisasi gcloud CLI, update gcloud CLI dan instal komponen yang diperlukan:

    gcloud components update
    gcloud components install beta
  • Untuk mengetahui informasi tentang cara menyiapkan autentikasi bagi lingkungan produksi, lihat Menyiapkan Kredensial Default Aplikasi untuk kode yang berjalan di Google Cloud dalam Google Cloud dokumentasi autentikasi.

    Python

    1. Instal library klien Python untuk App Optimize API.
    2. Untuk menggunakan contoh Python di halaman ini dalam lingkungan pengembangan lokal, instal dan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Instal Google Cloud CLI.

      2. Konfigurasi gcloud CLI agar menggunakan identitas gabungan Anda.

        Untuk mengetahui informasi selengkapnya, lihat Login ke gcloud CLI dengan identitas gabungan Anda.

      3. Buat kredensial autentikasi lokal untuk akun pengguna Anda:

        gcloud auth application-default login

        Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, pastikan Anda telah login ke gcloud CLI dengan identitas gabungan Anda.

      Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi. Google Cloud

      Untuk mengetahui informasi tentang cara menyiapkan autentikasi bagi lingkungan produksi, lihat Menyiapkan Kredensial Default Aplikasi untuk kode yang berjalan di Google Cloud dalam Google Cloud dokumentasi autentikasi.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

      Instal Google Cloud CLI, lalu login ke gcloud CLI dengan identitas gabungan Anda.

    Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi. Google Cloud

    Untuk mengetahui informasi tentang cara menyiapkan autentikasi bagi lingkungan produksi, lihat Menyiapkan Kredensial Default Aplikasi untuk kode yang berjalan di Google Cloud dalam Google Cloud dokumentasi autentikasi.

    Peran yang diperlukan

    Untuk mendapatkan izin yang diperlukan untuk membuat dan membaca laporan menggunakan panduan memulai cepat ini, minta administrator untuk memberi Anda peran IAM berikut di project Anda dengan resource aktif:

    • Admin App Optimize (roles/appoptimize.admin)
    • Viewer (roles/viewer) (atau peran lain yang memberikan billing.resourceCosts.get)

    Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

    Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

    Untuk mengetahui informasi selengkapnya tentang izin dan peran yang diperlukan untuk App Optimize API, lihat Kontrol akses dengan IAM.

    Membuat laporan

    Contoh ini membuat laporan total pengeluaran dalam yang Anda pilih PROJECT_ID. Laporan ini menguraikan biaya berdasarkan setiap Google Cloud produk yang digunakan, seperti Compute Engine dan Cloud Storage, serta berdasarkan SKU dan lokasi tertentu. Laporan ini mencakup data tiga hari terakhir.

    Untuk membuat resource laporan, ikuti petunjuk sesuai metode pilihan Anda:

    gcloud

    Gunakan perintah gcloud beta app-optimize reports create untuk membuat laporan.

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

    Ganti kode berikut:

    • PROJECT_ID: ID Google Cloud project Anda.
    • REPORT_ID: ID unik untuk laporan baru Anda—misalnya, my-first-report

    Perintah ini menunggu hingga operasi pembuatan laporan selesai, lalu menampilkan resource laporan yang dibuat.

    Python

    Kode Python berikut menggunakan AppOptimizeClient.create_report() untuk membuat laporan.

    from google.cloud import appoptimize_v1beta
    
    project_id = "PROJECT_ID"
    report_id = "REPORT_ID"
    
    # Create the App Optimize client and prepare a request for a new report
    client = appoptimize_v1beta.AppOptimizeClient()
    report = appoptimize_v1beta.Report(
        dimensions=['location', 'product_display_name', 'project', 'sku'],
        metrics=['cost'],
        filter='hour >= now - duration("72h")',
        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,
    )
    
    # Request the creation of the report and wait until the process is done
    operation = client.create_report(request=request)
    print("Waiting for report creation operation to complete...")
    response = operation.result()
    print(response)
    

    Ganti kode berikut:

    • PROJECT_ID: ID Google Cloud project Anda.
    • REPORT_ID: ID unik untuk laporan baru Anda—misalnya, my-first-report.

    Metode operation.result() menunggu hingga operasi pembuatan laporan selesai.

    REST

    Kirim permintaan POST HTTP ke jalur resource projects.locations.reports REST API.

    1. Untuk mengirim permintaan, gunakan perintah curl berikut:

      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",
            "sku"
          ],
          "metrics": [
            "cost"
          ],
          "filter": "hour >= now - duration(\"72h\")"
        }' \
        "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports?report_id=REPORT_ID"
      

      Ganti kode berikut:

      • PROJECT_ID: ID Google Cloud project Anda.
      • REPORT_ID: ID unik untuk laporan baru Anda—misalnya, my-first-report

      API menampilkan objek Operasi yang Berjalan Lama (LRO), yang mewakili proses pembuatan laporan. Berikut adalah contoh respons:

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

      Status "done": false menunjukkan bahwa laporan masih dibuat. Perhatikan OPERATION_ID karena Anda akan menggunakannya pada langkah berikutnya.

    2. Karena pembuatan laporan dapat memerlukan waktu, Anda harus melakukan polling LRO hingga menunjukkan bahwa proses pembuatan telah selesai dan data laporan siap didownload.

      Untuk memeriksa status proses pembuatan, kirim permintaan GET HTTP ke nama resource operasi:

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

      Periksa responsnya. Jika "done" adalah false, tunggu 5 hingga 15 detik dan ulangi langkah ini. Jika "done" adalah true, laporan sudah siap.

      Berikut adalah contoh respons saat operasi selesai:

      {
        "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",
          "scopes": [
            {
              "project": "projects/PROJECT_ID"
            }
          ],
          "dimensions": [
            "location",
            "product_display_name",
            "project",
            "sku"
          ],
          "metrics": [
            "cost"
          ],
          "filter": "hour >= now - duration(\"72h\")",
          "expireTime": "2026-02-04T22:05:05Z"
        }
      }
      

    Membaca data laporan

    Untuk mengambil data laporan, ikuti petunjuk sesuai metode pilihan Anda:

    gcloud

    Gunakan perintah gcloud beta app-optimize reports read berikut untuk mengambil data laporan.

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

    Python

    Kode Python berikut menggunakan AppOptimizeClient.read_report() untuk mengambil data laporan.

    from google.cloud import appoptimize_v1beta
    
    project_id = "PROJECT_ID"
    report_id = "REPORT_ID"
    name = f"projects/{project_id}/locations/global/reports/{report_id}"
    
    # Create the App Optimize client and read your report's data
    client = appoptimize_v1beta.AppOptimizeClient()
    request = appoptimize_v1beta.ReadReportRequest(
            name=name,
    )
    result = client.read_report(request=request)
    
    # Display the report's data
    print(result)
    

    REST

    Setelah LRO selesai, gunakan metode kustom :read REST API:

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

    Respons dari API berisi baris data laporan dan definisi kolom. Berikut adalah contoh respons yang berhasil:

    {
      "rows": [
        [
          "us-central1",
          "Compute Engine",
          "projects/PROJECT_ID",
          "6EC2-384A-47D9",
          {
            "currency_code": "USD",
            "units": "25",
            "nanos": 750000000
          }
        ],
        [
          "us-central1",
          "Cloud Storage",
          "projects/PROJECT_ID",
          "9ADA-9ADC-2FBE",
          {
            "currency_code": "USD",
            "units": "5",
            "nanos": 100000000
          }
        ],
        [
          "europe-west1",
          "Compute Engine",
          "projects/PROJECT_ID",
          "6EC2-384A-47D9",
          {
            "currency_code": "USD",
            "units": "18",
            "nanos": 500000000
          }
        ],
        [
          "us-central1",
          "Compute Engine",
          "projects/PROJECT_ID",
          "F61D-4D51-AAFC",
          {
            "currency_code": "USD",
            "units": "12",
            "nanos": 200000000
          }
        ]
      ],
      "columns": [
        {
          "name": "location",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "product_display_name",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "project",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "sku",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "cost",
          "type": "RECORD",
          "mode": "NULLABLE",
          "columns": [
            {
              "name": "currency_code",
              "type": "STRING",
              "mode": "NULLABLE"
            },
            {
              "name": "units",
              "type": "INT64",
              "mode": "NULLABLE"
            },
            {
              "name": "nanos",
              "type": "INT64",
              "mode": "NULLABLE"
            }
          ]
        }
      ],
      "next_page_token": ""
    }
    

    Laporan dengan banyak baris dipaginasi. Untuk menangani beberapa halaman, lihat Membaca data laporan.

    Untuk memahami nilai di kolom cost, lihat Menafsirkan metrik biaya. Untuk mengetahui informasi selengkapnya tentang data dan memahami batasannya, lihat Memahami data.

    Pembersihan

    App Optimize API otomatis menghapus laporan Anda 24 jam setelah laporan dibuat. Untuk menghapus laporan lebih cepat, ikuti petunjuk sesuai metode pilihan Anda:

    gcloud

    Gunakan perintah gcloud beta app-optimize reports delete untuk menghapus laporan.

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

    Python

    Kode berikut menggunakan AppOptimizeClient.delete_report() untuk menghapus laporan.

    from google.cloud import appoptimize_v1beta
    
    project_id = "PROJECT_ID"
    report_id = "REPORT_ID"
    
    name = f"projects/{project_id}/locations/global/reports/{report_id}"
    client = appoptimize_v1beta.AppOptimizeClient()
    request = appoptimize_v1beta.DeleteReportRequest(name=name)
    client.delete_report(request=request)
    print(f"Deleted report: {name}")
    

    REST

    Kirim permintaan DELETE HTTP ke endpoint resource laporan:

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

    Langkah berikutnya