Créer un rapport

L'API App Optimize vous aide à analyser vos données d'utilisation des coûts et des ressources en générant des rapports. Pour obtenir ces informations, vous devez d'abord créer un rapport en envoyant une requête d'API. Dans cette requête, vous définissez le champ d'application des données, la façon dont elles doivent être agrégées ou regroupées, et les filtres à appliquer.

Lorsque le rapport est prêt, vous pouvez lire les données.

Pour en savoir plus sur les combinaisons valides de ces paramètres, ainsi que sur les filtres, métriques et dimensions disponibles, consultez À propos des rapports.

Avant de commencer

  • Les exemples de ce guide nécessitent un projet Google Cloud avec des ressources actives à analyser. L'API App Optimize a besoin de données de facturation et d'utilisation pour produire des résultats significatifs. Les rapports exécutés sur des projets nouveaux ou vides seront vides.

    Dans ce guide, le projet identifié comme PROJECT_ID fournit le champ d'application des données et héberge la ressource de rapport.

    L'API App Optimize permet de créer des rapports dans un projet qui analysent les données d'un autre projet ou d'applications dans des limites au niveau d'un seul projet ou d'un dossier. Pour générer un rapport sur une application App Hub, qui peut être constituée de plusieurs projets, vous devez disposer des autorisations de surveillance et de facturation requises sur tous les projets associés à l'application.

  • Assurez-vous que l'API App Optimize est activée pour le projet que vous utiliserez pour créer et gérer la ressource de rapport.

gcloud

Dans la console Google Cloud , activez Cloud Shell.

Activer Cloud Shell

En bas de la console Google Cloud , une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

Pour en savoir plus sur la configuration de l'authentification dans un environnement de production, consultez Configurer les Identifiants par défaut de l'application pour le code s'exécutant sur Google Cloud dans la documentation sur l'authentification Google Cloud .

Python

  1. Installez la bibliothèque cliente Python pour l'API App Optimize.
  2. Pour utiliser les exemples Python de cette page dans un environnement de développement local, installez et initialisez la gcloud CLI, puis configurez les Identifiants par défaut de l'application avec vos identifiants utilisateur.

    1. Installez la Google Cloud CLI.

    2. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

    3. Si vous utilisez un shell local, créez des identifiants d'authentification locaux pour votre compte utilisateur :

      gcloud auth application-default login

      Vous n'avez pas besoin de le faire si vous utilisez Cloud Shell.

      Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.

    Pour en savoir plus, consultez Configurer les ADC pour un environnement de développement local dans la documentation sur l'authentification Google Cloud .

    Pour en savoir plus sur la configuration de l'authentification dans un environnement de production, consultez Configurer les Identifiants par défaut de l'application pour le code s'exécutant sur Google Cloud dans la documentation sur l'authentification Google Cloud .

REST

Pour utiliser les exemples API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à la gcloud CLI.

    Installez la Google Cloud CLI.

    Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud .

Pour en savoir plus sur la configuration de l'authentification dans un environnement de production, consultez Configurer les Identifiants par défaut de l'application pour le code s'exécutant sur Google Cloud dans la documentation sur l'authentification Google Cloud .

Rôles requis

Pour obtenir les autorisations nécessaires pour créer un rapport à l'aide de ce guide, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet avec des ressources actives :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Pour en savoir plus sur les autorisations et les rôles requis pour l'API App Optimize, consultez Contrôle des accès avec IAM.

Créer un rapport

Les étapes suivantes décrivent comment lancer la création d'un rapport. Cet exemple crée un rapport pour vous aider à comprendre les coûts et l'utilisation moyenne du processeur du projet choisi au cours de la semaine dernière. Le rapport détaille ces informations pour chaque ressource individuelle, y compris son type, le produit Google Cloud auquel elle appartient et son emplacement.

Pour créer la ressource de rapport, suivez les instructions de votre méthode préférée :

gcloud

Utilisez la commande gcloud beta app-optimize reports create suivante pour créer votre rapport.

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

Remplacez les éléments suivants :

  • REPORT_ID : ID unique de votre nouveau rapport (par exemple, my-resource-cost-report-1).
  • PROJECT_ID : ID de votre projet Google Cloud .

La commande permettant de créer un rapport attend automatiquement la fin de l'opération.

Python

Le code Python suivant utilise AppOptimizeClient.create_report() pour créer un rapport.

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)

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • REPORT_ID : ID unique de votre nouveau rapport (par exemple, my-first-report).

La méthode operation.result() de la bibliothèque cliente attend automatiquement la fin de l'opération. Aucune boucle d'interrogation manuelle n'est requise.

REST

Envoyez une requête HTTP POST au chemin d'accès aux ressources projects.locations.reports de l'API REST.

  1. Pour envoyer la requête, utilisez la commande curl suivante :

    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"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • REPORT_ID : ID unique de votre nouveau rapport (par exemple, my-resource-cost-report-1).

    L'API renvoie un objet d'opération de longue durée (LRO). Notez le champ name dans la réponse. Vous l'utiliserez pour vérifier l'état de l'opération :

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

    Dans la réponse, le champ done est défini sur false, ce qui indique que la génération du rapport est en cours.

  2. Pour vérifier si le rapport est prêt, envoyez une requête HTTP GET à l'opération name renvoyée à l'étape précédente :

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

    Remplacez PROJECT_ID et OPERATION_ID par les valeurs de la réponse LRO.

    Examinez la réponse pour déterminer l'état de l'opération :

    • Si le rapport est toujours en cours de génération, la réponse ressemblera à la réponse LRO initiale, avec done défini sur false. Vous devez patienter un court instant, par exemple entre 5 et 15 secondes, puis relancer l'interrogation en répétant cette étape.
    • Une fois la génération du rapport terminée, la réponse inclut "done": true et la ressource de rapport dans le champ 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"
            ]
          }
        }
        ```
      
    • Si l'opération de longue durée rencontre une erreur, la réponse contiendra un champ error au lieu du champ response, fournissant des détails sur l'échec.

Une fois l'opération terminée, vous pouvez lire les données du rapport.

Limites de simultanéité

Lorsque vous créez un rapport, l'API App Optimize récupère les données de coût de Cloud Billing et les données d'utilisation de Cloud Monitoring pour chaque target_project du rapport.

  • Pour un rapport limité à un seul projet, ce projet est le projet cible.
  • Pour une application App Hub, chaque projet contenant un service ou une charge de travail dans l'application est un projet cible.

L'API App Optimize applique un quota de simultanéité appelé Opérations Concurrent CreateReport, qui autorise un maximum de 10 requêtes simultanées pour les données de rapport par projet cible. Lorsque vous créez un rapport, l'API App Optimize calcule le nombre de projets cibles dans le rapport et bloque le nombre d'unités de quota requis jusqu'à ce que l'opération de longue durée pour la création du rapport soit terminée.

Les rapports qui se terminent en moins de quelques minutes peuvent ne pas être comptabilisés dans votre limite de simultanéité en raison du timing de mesure au niveau du système.

Vous pouvez consulter votre activité d'API actuelle et gérer ces limites sur la page Quotas et limites du système de la console Google Cloud .

Si vous prévoyez de créer plusieurs rapports simultanément, réfléchissez au moment où vos équipes exécutent des rapports et à la structure de vos applications App Hub :

  • Si plusieurs équipes exécutent des rapports incluant les mêmes projets cibles, vous pouvez échelonner les heures de début de la création de rapports pour chaque équipe.
  • Les applications peuvent inclure des ressources provenant de plusieurs projets, et plusieurs applications peuvent utiliser des ressources provenant d'un même projet. La création simultanée de rapports pour ces types d'applications entraîne plusieurs requêtes vers les projets cibles.

Prenons l'exemple d'une équipe qui travaille sur une suite d'applications pour l'apprentissage des arts créatifs, avec des variantes standards et premium. Le tableau suivant présente la liste des applications dans la première colonne. Dans les colonnes restantes, l'icône en forme de coche () indique qu'un projet contient des services ou des charges de travail pour une application listée.

Application 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

Si vous créez des rapports sur les données de coût et d'utilisation pour toutes les applications listées en même temps, l'API App Optimize utilise plusieurs unités de votre limite de simultanéité dans certains projets. En particulier, le projet partagé common-project reçoit 12 demandes de données sur les coûts et l'utilisation. Comme ce nombre dépasse la limite de simultanéité, deux requêtes de données échoueront.

Pour éviter ce problème, l'équipe peut d'abord générer des rapports pour les versions standards des applications, puis pour la version Premium.

Étapes suivantes