Déboguer l'erreur "Budget de confidentialité épuisé"

Ce guide explique comment utiliser la nouvelle fonctionnalité de débogage du budget de confidentialité pour les erreurs PRIVACY_BUDGET_EXHAUSTED, désormais disponible dans le service d'agrégation à partir de v2.12.0. Comme indiqué dans la documentation, lorsque des rapports agrégables sont envoyés dans un déploiement de Aggregation Service via des jobs, l'infrastructure s'appuie sur le service de compte de rapports agrégables situé dans les coordinateurs TEE (Trusted Execution Environment) pour limiter l'utilisation du budget de confidentialité. Pour rappel, le budget de confidentialité détermine le nombre maximal de fois où ces rapports agrégables peuvent être utilisés pour générer des rapports récapitulatifs afin de limiter l'acquisition d'informations. Toute agrégation d'un rapport au-delà de son budget de confidentialité alloué échouera avec une erreur PRIVACY_BUDGET_EXHAUSTED.

Ce guide vous présente une fonctionnalité de débogage qui, à partir de v2.12.0, génère et stocke un fichier JSON d'aide contenant les rapports pertinents qui ont contribué aux erreurs PRIVACY_BUDGET_EXHAUSTED ultérieures rencontrées par vos tâches.

Si vous souhaitez récupérer votre budget, consultez nos conseils publics sur GitHub.

Prérequis

En continuant, ce guide suppose que vous disposez des éléments suivants:

Déboguer une tâche ayant échoué avec l'erreur PRIVACY_BUDGET_EXHAUSTED

À ce stade, nous supposons que vous avez exécuté le point de terminaison getJob avec votre dernier ID de requête de tâche et que vous avez reçu une erreur PRIVACY_BUDGET_EXHAUSTED semblable à la réponse suivante. À partir du service d'agrégation v2.12.0, vous devriez disposer d'un fichier de débogage JSON généré récemment pour le budget de confidentialité épuisé, situé dans votre bucket de stockage cloud public.

Les chemins d'accès sont indiqués par return_message et suivent les formats suivants:

  • Chemin d'accès au fichier: <output_data_bucket_name>/<output_data_blob_prefix>/
  • Nom de fichier: privacy_budget_exhausted_<request_received_at_timestamp>.json
{
  "job_status": "FINISHED",
  "request_received_at": <utc timestamp>,
  "request_updated_at": <utc timestamp>,
  "job_request_id": <customer assigned job id>,
  
  "request_processing_started_at": <utc timestamp>,
  "result_info": {
    "return_code": "PRIVACY_BUDGET_EXHAUSTED",
    "return_message": "com.google.aggregate.adtech.worker.exceptions.AggregationJobProcessException: Insufficient privacy budget for one or more aggregatable reports. No aggregatable report can appear in more than one aggregation job. Information related to reports that do not have budget can be found in the following file:
    File path: ags-privacy-budget-codelab/output-bucket/output-domain Filename: privacy budget exhausted debugging information <utc timestamp> \n com.google.aggregate.adtech.worker.aggregation.concurrent.ConcurrentAggregationProcessor.consumePrivacyBudgetUnits(ConcurrentAggregationProcessor.java:525) \n com.google.aggregate.adtech.worker.aggregation.concurrent.ConcurrentAggregationProcessor.process(ConcurrentAggregationProcessor.java:319) \n com.google.aggregate.adtech.worker.WorkerPullWorkService.run(WorkerPullWorkService.java:157)",
    "error_summary": {
      "error_counts": "",
      "error_messages": ""
    }
  }
}

Procédure de résolution des erreurs

Recherchez et ouvrez la sortie privacy_budget_exhausted_debugging_information_<utc timestamp>.json qui vous a été fournie dans votre bucket Cloud Storage public. Vous le trouverez dans le chemin <output_data_bucket_name>/<output_data_blob_prefix> fourni dans return_message. Dans ce fichier JSON, comparez les propriétés filtering_id (par défaut, 0) et relevant_shared_info aux rapports shared_info agrégables d'entrée. Si une correspondance est trouvée, cela signifie que ces rapports dépassent le budget alloué et entraînent un échec de la tâche. Ils doivent donc être filtrés dans les futures tâches. Notez que les rapports correspondants peuvent toujours être réutilisés avec un autre ID de filtrage. Une fois que vous avez identifié et supprimé les rapports correspondants du fichier AVRO de vos rapports par lot, vous pouvez réexécuter votre tâche.

Voici un exemple de sortie privacy_budget_exhausted_debugging_information_<utc timestamp>.json.

{
 "privacy_budget_exhausted_info" : {
   "aggregatable_input_budget_consumption_info" : [ {
     "aggregateable_input_budget_id" : {
       "filtering_id" : 0,
       "relevant_shared_info" : {
         "api" : "attribution-reporting",
         "attribution_destination" : "f246a4e6-dde9-46a5-a6b2-ea523b484d0a",
         "reporting_origin" : "foo.com",
         "scheduled_report_time" : 1738814400.000000000,
         "source_registration_time" : 1738713600.000000000,
         "version" : "0.1"
       }
     }
   }, {
       "aggregateable_input_budget_id" : {
       "filtering_id" : 0,
       "relevant_shared_info" : {
         "api" : "attribution-reporting",
         "attribution_destination" : "f246a4e6-dde9-46a5-a6b2-ea523b484d0a",
         "reporting_origin" : "foo.com",
         "scheduled_report_time" : 1738796400.000000000,
         "source_registration_time" : 1738713600.000000000,
         "version" : "0.1"
       }
     }
   } ]
 }
}

Étapes suivantes

Vérifiez si d'autres utilisateurs ont rencontré le même problème sur le tableau de bord d'état de la Privacy Sandbox ou dans le dépôt GitHub public. Si vous ne trouvez pas de solution à votre problème lié au service d'agrégation, signalez-le sur GitHub ou remplissez le formulaire d'assistance technique.