Crea un report

L'API App Optimize ti aiuta ad analizzare i dati relativi ai costi e all'utilizzo delle risorse generando report. Per ottenere queste informazioni, devi prima creare un report inviando una richiesta API. In questa richiesta, definisci l'ambito dei dati, la modalità di aggregazione o raggruppamento e gli eventuali filtri da applicare.

Quando il report è pronto, puoi leggere i dati.

Per informazioni su ambiti, dimensioni, metriche e filtri disponibili e sulle combinazioni valide di queste impostazioni, consulta Informazioni sui report.

Prima di iniziare

  • Gli esempi in questa guida richiedono un Google Cloud progetto con risorse attive da analizzare. L'API App Optimize ha bisogno di dati di fatturazione e utilizzo per produrre risultati significativi; i report eseguiti su progetti nuovi o vuoti saranno vuoti.

    In questa guida, il progetto identificato come PROJECT_ID fornisce l'ambito dei dati e ospita la risorsa report.

    L'API App Optimize supporta la creazione di report in un progetto che analizzano i dati di un altro progetto o di applicazioni in limiti a livello di singolo progetto o cartella. Per generare un report su un'applicazione App Hub, che può essere composta da più progetti, devi disporre delle autorizzazioni di monitoraggio e fatturazione richieste per tutti i progetti associati all'applicazione per creare il report.

  • Assicurati che l'API App Optimize sia abilitata per il progetto che utilizzerai per creare e gestire la risorsa report.

gcloud

Nella console Google Cloud , attiva Cloud Shell.

Attiva Cloud Shell

Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.

Per informazioni sulla configurazione dell'autenticazione per un ambiente di produzione, consulta Configura le Credenziali predefinite dell'applicazione per il codice in esecuzione su Google Cloud nella documentazione sull'autenticazione di Google Cloud .

Python

  1. Installa la libreria client Python per l'API App Optimize.
  2. Per utilizzare gli esempi di Python in questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.

    2. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    3. Se utilizzi una shell locale, crea le credenziali di autenticazione locali per il tuo account utente:

      gcloud auth application-default login

      Non è necessario eseguire questa operazione se utilizzi Cloud Shell.

      Se viene restituito un errore di autenticazione e utilizzi un provider di identità (IdP) esterno, verifica di aver acceduto a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Configura ADC per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud .

    Per informazioni sulla configurazione dell'autenticazione per un ambiente di produzione, consulta Configura le Credenziali predefinite dell'applicazione per il codice in esecuzione su Google Cloud nella documentazione sull'autenticazione di Google Cloud .

REST

Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

    Installa Google Cloud CLI.

    Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Google Cloud .

Per informazioni sulla configurazione dell'autenticazione per un ambiente di produzione, consulta Configura le Credenziali predefinite dell'applicazione per il codice in esecuzione su Google Cloud nella documentazione sull'autenticazione di Google Cloud .

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare un report utilizzando questa guida, chiedi all'amministratore di concederti i seguenti ruoli IAM nel tuo progetto con risorse attive:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Per saperne di più sui ruoli e sulle autorizzazioni richiesti per l'API App Optimize, consulta Controllo dell'accesso con IAM.

crea un report

I passaggi seguenti descrivono come avviare la creazione del report. Questo esempio crea un report per aiutarti a comprendere i costi e l'utilizzo medio della CPU del progetto scelto nell'ultima settimana. Il report suddivide queste informazioni per ogni singola risorsa, incluso il tipo di risorsa, il prodotto Google Cloud di cui fa parte e la sua posizione.

Per creare la risorsa report, segui le istruzioni per il metodo che preferisci:

gcloud

Utilizza il seguente comando gcloud beta app-optimize reports create per creare il report.

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

Sostituisci quanto segue:

  • REPORT_ID: un ID univoco per il nuovo report, ad esempio my-resource-cost-report-1.
  • PROJECT_ID: il tuo ID progetto Google Cloud .

Il comando per creare un report attende automaticamente il completamento dell'operazione.

Python

Il seguente codice Python utilizza AppOptimizeClient.create_report() per creare un 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)

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto Google Cloud .
  • REPORT_ID: un ID univoco per il nuovo report, ad esempio my-first-report.

Il metodo operation.result() nella libreria client attende automaticamente il completamento dell'operazione. Non è necessario alcun ciclo di polling manuale.

REST

Invia una richiesta POST HTTP al percorso della risorsa projects.locations.reports dell'API REST

  1. Per inviare la richiesta, utilizza il seguente comando 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"
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto Google Cloud .
    • REPORT_ID: un ID univoco per il nuovo report, ad esempio my-resource-cost-report-1.

    L'API restituisce un oggetto operazione a lunga esecuzione (LRO). Prendi nota del campo name nella risposta, che utilizzerai per controllare lo stato dell'operazione:

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

    Nella risposta, il campo done è false, il che indica che la generazione del report è in corso.

  2. Per verificare se il report è pronto, invia una richiesta HTTP GET all'operazione name restituita nel passaggio precedente:

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

    Sostituisci PROJECT_ID e OPERATION_ID con i valori della risposta LRO.

    Esamina la risposta per determinare lo stato dell'operazione:

    • Se il report è ancora in fase di generazione, la risposta sarà simile alla risposta LRO iniziale, con done impostato su false. Devi attendere un breve periodo, ad esempio da 5 a 15 secondi, e riprovare a eseguire il polling ripetendo questo passaggio.
    • Al termine della generazione del report, la risposta avrà "done": true e includerà la risorsa del report nel campo 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"
            ]
          }
        }
        ```
      
    • Se l'operazione di lunga durata rileva un errore, la risposta conterrà un campo error anziché il campo response, fornendo dettagli sull'errore.

Una volta completata l'operazione, puoi leggere i dati del report.

Limiti di concorrenza

Quando crei un report, l'API App Optimize recupera i dati di costo da Fatturazione Cloud e i dati di utilizzo da Cloud Monitoring per ogni target_project del report.

  • Per un report limitato a un singolo progetto, questo è il progetto di destinazione.
  • Per un'applicazione App Hub, ogni progetto che contiene un servizio o un carico di lavoro nell'applicazione è un progetto di destinazione.

L'API App Optimize applica una quota di concorrenza denominata Operazioni CreateReport simultanee, che consente un massimo di 10 richieste simultanee per i dati dei report per progetto di destinazione. Quando crei un report, l'API App Optimize calcola il numero di progetti di destinazione nel report e blocca il numero richiesto di unità di quota finché l'operazione di lunga durata per la creazione del report non è terminata.

I report che vengono completati in meno di qualche minuto potrebbero non essere conteggiati ai fini del limite di simultaneità a causa della tempistica di misurazione a livello di sistema.

Puoi visualizzare l'attività API attuale e gestire questi limiti nella pagina Quote e limiti di sistema della console Google Cloud .

Se prevedi di creare più report contemporaneamente, considera quando i tuoi team eseguono i report e come sono strutturate le tue applicazioni App Hub:

  • Se più team eseguono report che includono gli stessi progetti target, puoi scaglionare gli orari di inizio della creazione dei report per ogni team.
  • Le applicazioni possono includere risorse di più progetti e più di un'applicazione potrebbe utilizzare risorse di un singolo progetto. La creazione simultanea di report per questi tipi di applicazioni genera più richieste ai progetti di destinazione.

Ad esempio, prendi in considerazione un team che lavora a una suite di applicazioni per l'apprendimento delle arti creative, con varianti standard e premium. La seguente tabella mostra l'elenco delle applicazioni nella prima colonna. Nelle colonne rimanenti, l'icona del segno di spunta () indica che un progetto contiene servizi o carichi di lavoro per un'applicazione elencata.

Applicazione 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

Se crei report per i dati di costi e utilizzo per tutte le applicazioni elencate contemporaneamente, l'API App Optimize utilizza più di un'unità del limite di concorrenza in alcuni progetti. In particolare, il progetto condiviso common-project riceve 12 richieste di dati su costi e utilizzo. Poiché questo numero supera il limite di concorrenza, 2 richieste di dati non andranno a buon fine.

Per evitare questo problema, il team potrebbe eseguire prima i report per le versioni standard delle applicazioni e poi eseguire i report per la versione premium.

Passaggi successivi