Untuk mengambil data biaya dan penggunaan dengan App Optimize API, Anda harus membuat laporan terlebih dahulu. Resource ini berfungsi sebagai definisi persisten untuk data yang ingin Anda analisis, dengan menentukan parameter seperti cakupan, dimensi, rentang waktu, dan filter.
Setelah Anda membuat laporan, API akan menghasilkan data yang diminta secara asinkron. Kemudian, Anda menggunakan nama resource laporan untuk mengambil set data yang dihasilkan.
Oleh karena itu, alur kerjanya adalah:
- Anda membuat laporan yang menentukan kriteria Anda.
- Sistem memproses permintaan ini secara asinkron.
- Setelah operasi selesai, Anda membaca data yang dihasilkan.
Dokumen ini menjelaskan struktur dan parameter yang dapat dikonfigurasi dari laporan App Optimize API, termasuk dimensi, metrik, dan opsi pemfilteran yang tersedia, serta menjelaskan format data yang ditampilkan.
Untuk mengetahui informasi tentang batasan biaya dan pemanfaatan, lihat Memahami data.
Menentukan laporan
Untuk membuat laporan, Anda menentukan resource Report dengan parameter konfigurasi berikut, yang dijelaskan di subbagian berikutnya:
| Parameter | Jenis | Deskripsi |
|---|---|---|
scopes |
Array | Project atau aplikasi App Hub yang akan dianalisis. Anda harus memberikan tepat satu elemen cakupan. |
dimensions |
Array | Atribut untuk mengambil dan mengelompokkan data, termasuk pengelompokan berbasis waktu. |
metrics |
Array | Pengukuran spesifik yang akan ditampilkan. |
filter |
String | Ekspresi Common Expression Language (CEL) untuk mempersempit data, termasuk rentang waktu. |
Cakupan
Kolom scopes menentukan kumpulan resource yang akan dianalisis oleh App Optimize API. Meskipun kolom ini adalah array, Anda harus menentukan tepat satu elemen,
yang dapat berupa project atau aplikasi App Hub:
project: string yang merepresentasikan Google Cloud project. Formatnya harus seperti:projects/PROJECT_IDGanti
PROJECT_IDdengan ID project Google Cloud Anda. Misalnya,projects/my-project-1.application: string yang merepresentasikan nama resource lengkap aplikasi App Hub. Formatnya harus:projects/PROJECT_ID/locations/LOCATION/applications/APPLICATION_IDGanti kode berikut:
PROJECT_ID: ID project host App Hub.LOCATION: region aplikasi App Hub, sepertius-central1.APPLICATION_ID: ID aplikasi App Hub.
Misalnya,
projects/my-host-proj/locations/us-central1/applications/my-app.
Berikut adalah contoh array scopes dalam JSON untuk permintaan pembuatan laporan, yang menampilkan
satu elemen cakupan:
Mencakup berdasarkan project:
"scopes": [ { "project": "projects/my-project-1" } ]Mencakup menurut aplikasi:
"scopes": [ { "application": "projects/my-host-proj/locations/us-central1/applications/my-app" } ]
Dimensi
Dimensi menentukan data yang ditampilkan dan cara pengelompokan data.
Misalnya, jika Anda memilih project dan product_display_name, output
akan berisi satu baris untuk setiap kombinasi unik dari nilai project dan nama produk
yang ditemukan dalam data.
Berikut adalah tabel dimensi yang didukung:
| Dimensi | Jenis | Deskripsi | Nilai contoh |
|---|---|---|---|
project |
STRING | Google Cloud Project ID. | projects/my-project |
application |
STRING | Aplikasi App Hub. | projects/my-project/locations/us-central1/applications/my-app |
service_or_workload |
STRING | Layanan atau beban kerja App Hub. | projects/my-project/locations/us-central1/applications/my-app/services/my-service |
resource |
STRING | Nama lengkap resource. | //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/vm-1 |
resource_type |
STRING | Jenis resource API. | compute.googleapis.com/Instance |
location |
STRING | Region Google Cloud atau multi-region. | us-east1 |
sku |
STRING | ID SKU penagihan. | 4496-8C0D-228F |
product_display_name |
STRING | Nama Google Cloud produk. | Compute Engine |
month |
STRING | Tahun dan bulan. | 2024-01 |
day |
STRING | Tahun, bulan, dan hari. | 2024-01-10 |
hour |
STRING | Tahun, bulan, hari, dan jam. | 2024-01-10T00 |
Dimensi location merepresentasikan Google Cloud region atau multi-region
yang menjadi tujuan biaya dan penggunaan. Cara lokasi ini dilaporkan bergantung pada setelan lokasi resource dalam cakupan laporan:
- Untuk resource yang di-deploy di zona tertentu, seperti
us-central1-a, biaya dan penggunaan digabungkan dan diatribusikan ke region induk. Dalam contoh ini, dimensilocationakan menampilkanus-central1. - Untuk resource yang di-deploy di region, seperti
us-central1, dimensilocationmencerminkan region tertentu tersebut. - Untuk resource yang di-deploy atau dikonfigurasi untuk multi-region, seperti
us, dimensilocationmencerminkan multi-region tersebut.
Dimensi waktu
Untuk menggabungkan hasil menurut waktu, sertakan setidaknya satu dimensi waktu, seperti
month, day, atau hour, dalam daftar dimensions. Perhatikan bahwa:
- Semua dimensi waktu menggunakan Waktu Pasifik dan memperhitungkan Waktu Musim Panas (DST).
- Format mengikuti ISO 8601.
- Jika rentang waktu dalam
filtertidak sepenuhnya sesuai dengan perincian dimensi waktu yang dipilih, rentang akan diperluas untuk mencakup periode penuh. Misalnya, memfilter sebagian hari dengandimension: ["month"]akan menyertakan data untuk seluruh bulan.
Metrik
Metrik adalah nilai kuantitatif yang ingin Anda ukur untuk setiap grup yang ditentukan oleh dimensi Anda. Metrik yang didukung adalah:
| Metrik | Jenis | Deskripsi |
|---|---|---|
cost |
RECORD | Biaya moneter dalam mata uang yang diminta. |
cpu_mean_utilization |
FLOAT64 | Penggunaan CPU rata-rata (0,0 hingga 1,0). |
cpu_p95_utilization |
FLOAT64 | Penggunaan CPU persentil ke-95 (0,0 hingga 1,0). |
cpu_usage_core_seconds |
INT64 | Total pekerjaan CPU yang dilakukan. |
cpu_allocation_core_seconds |
INT64 | Total kapasitas CPU yang disediakan. |
memory_mean_utilization |
FLOAT64 | Penggunaan memori rata-rata (0,0 hingga 1,0). |
memory_p95_utilization |
FLOAT64 | Penggunaan memori persentil ke-95 (0,0 hingga 1,0). |
memory_usage_byte_seconds |
INT64 | Total memori yang digunakan dari waktu ke waktu. |
memory_allocation_byte_seconds |
INT64 | Total memori yang disediakan dari waktu ke waktu. |
Kombinasi yang valid
Tidak semua dimensi dapat digabungkan dengan setiap metrik di App Optimize API. Tabel berikut menunjukkan contoh set dimensi yang valid dan metrik yang dapat Anda gunakan dengannya. API akan menampilkan error jika kombinasi yang tidak valid diminta; lihat error tersebut untuk mengetahui kombinasi yang valid.
| Dimensi | Mendukung metrik cost |
Mendukung metrik cpu_mean_utilization |
|---|---|---|
application, product_display_name |
||
application |
||
location, product_display_name, project, resource, resource_type, sku |
||
location, product_display_name, project, resource, resource_type |
||
location, product_display_name, project, service_or_workload |
||
location, product_display_name, project, sku |
||
product_display_name, project |
||
product_display_name, resource_type |
||
product_display_name, resource |
||
product_display_name |
||
project |
Filter
Gunakan kolom filter untuk mempersempit data menggunakan string CEL.
Anda dapat membuat ekspresi filter menggunakan kolom apa pun yang tercantum dalam tabel
Dimensi.
Pemfilteran harus sesuai dengan batasan berikut:
- Semua predikat kolom string harus menggunakan kecocokan string persis. Misalnya,
location == 'us-east1'. - Beberapa predikat yang merujuk ke kolom string yang sama harus digabungkan menggunakan operator OR logis,
||. Contoh,location == 'us-east1' || location == 'us-west1'. - Semua predikat lainnya harus digabungkan menggunakan operator logis AND,
&&. - Predikat pada dimensi waktu, seperti
day, yang menentukan waktu mulai harus menggunakan perbandingan lebih besar dari atau sama dengan,>=. - Predikat pada dimensi waktu yang menentukan waktu berakhir harus menggunakan
perbandingan kurang dari,
<.
Rentang waktu
Jika filter tidak menyertakan dimensi waktu (month, day, hour), laporan
secara default akan menampilkan rentang tujuh hari yang berakhir pada tengah malam Waktu Pasifik sebelumnya,
dengan mempertimbangkan DST. Rentang tanggal maksimum adalah 90 hari sebelum tanggal saat ini, dan waktu mulai harus berada dalam jangka waktu 90 hari.
Misalnya, jika Waktu Pasifik saat ini adalah
2026-01-05T12:00:00, rentang defaultnya adalah 2025-12-29T00:00:00 hingga
2026-01-05T00:00:00 Waktu Pasifik. Waktu mulai paling awal untuk rentang waktu adalah 2025-10-07T00:00:00.
Metrik Cloud Run hanya tersedia selama enam minggu sebelum tanggal saat ini.
Contoh filter
Berikut beberapa contoh cara menyusun string filter CEL:
Untuk memfilter data laporan menurut jenis resource tertentu, gunakan operator
==pada dimensiresource_type:resource_type == 'compute.googleapis.com/Instance'Untuk menyertakan hanya data dari satu lokasi, filter pada dimensi
locationlocation == 'us-east1'Untuk menyertakan data dari daftar lokasi tertentu, gunakan operator
||untuk menggabungkan kondisi pada dimensilocation:location == 'us-east1' || location == 'us-west1'Untuk mendapatkan data dalam rentang waktu tertentu menggunakan perincian per jam, Anda dapat memfilter dimensi
hour. Contoh ini mencakup data dari awal 2024-01-01 hingga, tetapi tidak termasuk, 2024-02-01:hour >= timestamp('2024-01-01T00:00:00Z') && hour < timestamp('2024-02-01T00:00:00Z')Untuk memfilter hari penuh, gunakan dimensi
day. Perhatikan bahwa batas hari ditafsirkan dalam Waktu Pasifik, jadi menentukan offset adalah praktik terbaik. Contoh ini mencakup semua data untuk 15-03-2024 dan 16-03-2024:day >= timestamp('2024-03-15T00:00:00-07:00') && day < timestamp('2024-03-17T00:00:00-07:00')Demikian pula, Anda dapat memfilter menurut bulan kalender menggunakan dimensi
month, dengan tetap memperhatikan Waktu Pasifik untuk batas yang tepat. Contoh ini mencakup semua data untuk Oktober dan November 2025:month >= timestamp('2025-10-01T00:00:00-07:00') && month < timestamp('2025-12-01T00:00:00-08:00')Untuk mendapatkan data dari 72 jam terakhir, gunakan fungsi
now()danduration()pada dimensihour:hour >= now() - duration('72h')Untuk mendapatkan data dari tujuh hari terakhir, Anda dapat menggunakan
duration()dengan dimensihour:hour >= now() - duration('168h')Memfilter untuk bulan kalender tertentu, seperti bulan sebelumnya, memerlukan penghitungan stempel waktu awal dan akhir dalam kode aplikasi Anda. Kemudian, masukkan stempel waktu yang dihitung tersebut ke dalam ekspresi CEL. Secara konseptual, tampilannya mungkin seperti ini, memfilter dimensi
day:day >= timestamp('START_OF_LAST_MONTH') && day < timestamp('START_OF_THIS_MONTH')Ganti kode berikut:
START_OF_LAST_MONTH: string stempel waktu ISO 8601 yang merepresentasikan awal bulan sebelumnya di zona waktu Pasifik, seperti2025-12-01T00:00:00-08:00.START_OF_THIS_MONTH: string stempel waktu ISO 8601 yang merepresentasikan awal bulan saat ini di zona waktu Pasifik, seperti2026-01-01T00:00:00-08:00.
Anda perlu menghitung string stempel waktu yang tepat ini dalam kode aplikasi, dengan mempertimbangkan tanggal saat ini, zona waktu (Waktu Pasifik), dan transisi Waktu Musim Panas.
Anda dapat menggabungkan filter string dan waktu menggunakan operator
&&. Contoh ini memfilter dua lokasi dalam periode dua bulan tertentu:(location == 'us-east1' || location == 'us-west1') && hour >= timestamp('2023-12-01T00:00:00Z') && hour < timestamp('2024-02-01T00:00:00Z')Berikut contoh yang lebih kompleks yang menggabungkan
resource_type,project, dan rentang waktu berbasisday:resource_type == 'compute.googleapis.com/Instance' && project == 'projects/my-project' && day >= timestamp('2025-01-01T00:00:00-08:00') && day < timestamp('2025-02-01T00:00:00-08:00')
Struktur data laporan
Jika Anda berhasil membaca laporan, layanan akan menampilkan
data sebagai columns dan rows.
Kolom
Array columns menjelaskan skema data, dalam urutan setiap kolom muncul di rows. Setiap objek dalam array columns memiliki name,
type, dan terkadang columns bertingkat jika jenisnya adalah RECORD.
- Dimensi yang Anda minta muncul sebagai kolom dengan jenis
STRING. - Metrik yang Anda minta muncul sebagai kolom dengan jenis seperti
INT64,FLOAT64, atauRECORDuntuk jenis kompleks seperticost.
Misalnya, dengan REST API, jika Anda meminta dimensions: ["application", "product_display_name"]
dan metrics: ["cost", "cpu_mean_utilization"], maka App Optimize API
sebagai respons akan menghasilkan array columns seperti ini:
"columns": [
{
"name": "application",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "product_display_name",
"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"
}
]
},
{
"name": "cpu_mean_utilization",
"type": "FLOAT64",
"mode": "NULLABLE"
}
]
Baris
Kolom rows berisi data aktual. Setiap baris adalah array nilai yang mewakili satu catatan. Urutan nilai dalam setiap array dalam
berkorespondensi langsung dengan urutan kolom yang ditentukan dalam array columns.
Melanjutkan contoh saat application, product_display_name, cost, dan
cpu_mean_utilization diminta dari REST API, satu baris dalam array rows yang
dihasilkan mungkin terlihat seperti ini:
"rows": [
[
"//apphub.googleapis.com/projects/my-proj/locations/us-central1/applications/my-app",
"Compute Engine",
{
"currency_code": "USD",
"units": "12",
"nanos": 750000000
},
0.65
],
[
"//apphub.googleapis.com/projects/my-proj/locations/us-east1/applications/another-app",
"Cloud Storage",
{
"currency_code": "USD",
"units": "5",
"nanos": 200000000
},
0.15
]
]
Tabel berikut memvisualisasikan cara nilai dalam array baris tunggal dipetakan ke
skema yang ditentukan dalam array columns, menggunakan indeks nilai dalam
array baris:
| Indeks dalam baris | Kolom terkait | Jenis | Nilai contoh |
|---|---|---|---|
| 0 | application |
STRING | "//apphub.googleapis.com/.../applications/my-app" |
| 1 | product_display_name |
STRING | "Cloud Storage" |
| 2 | cost |
RECORD | { "currency_code": "USD", "units": "10", ... } |
| 3 | cpu_mean_utilization |
FLOAT64 | 0.65 |
Setiap elemen dalam daftar rows adalah array yang urutan nilainya cocok dengan urutan definisi kolom dalam array columns. Dengan demikian, nilai pada
indeks n dalam array baris tertentu sesuai dengan kolom yang ditentukan pada indeks n
dalam array columns.
Menafsirkan metrik biaya
Jika laporan menyertakan metrik cost, nilai akan ditampilkan sebagai RECORD
yang berisi kolom berikut, berdasarkan jenis
google.type.Money standar:
| Kolom | Jenis | Deskripsi |
|---|---|---|
currency_code |
STRING | Kode mata uang ISO 4217 tiga huruf, seperti "USD". |
units |
INT64 | Seluruh unit jumlahnya. |
nanos |
INT64 | Unit nano (10-9) dari jumlah. Harus antara -999.999.999 dan +999.999.999 inklusif. |
Untuk mendapatkan nilai uang penuh, Anda menggabungkan kolom units dan nanos.
Kolom nanos mewakili bagian pecahan dari nilai mata uang.
Contoh:
Jika
currency_codeadalah "USD",unitsadalah106, dannanosadalah321590000: Nilainya adalah 106 + (321.590.000 / 1.000.000.000) = 106,32159 USD.Jika
currency_codeadalah "EUR",unitsadalah5, dannanosadalah750000000: Nilainya adalah 5 + (750.000.000 / 1.000.000.000) = 5,75 EUR.
Biasanya, Anda akan menggunakan library pemformatan mata uang standar untuk menampilkan nilai ini dalam format yang mudah digunakan, termasuk simbol mata uang yang sesuai.
Untuk mengetahui informasi selengkapnya tentang data yang ditampilkan oleh API dan untuk memahami batasannya, lihat Memahami data.
Masa berlaku laporan
Setiap laporan akan otomatis dihapus dari layanan App Optimize API 24 jam setelah laporan dibuat. Setelah waktu ini, laporan dan datanya tidak dapat diambil melalui API. Untuk memeriksa waktu habis masa berlaku terjadwal laporan, dapatkan metadata-nya dan lihat kolom expireTime.