Erro de depuração: orçamento de privacidade esgotado

Este guia explica como usar o novo recurso de depuração de orçamento de privacidade para erros PRIVACY_BUDGET_EXHAUSTED, que agora está disponível no serviço de agregação, a partir de v2.12.0. Conforme documentado, embora os relatórios agregáveis sejam enviados para uma implantação do serviço de agregação por jobs, a infraestrutura depende do serviço de conta de relatórios agregáveis localizado nos coordenadores de TEE (ambiente de execução confiável) para limitar o uso do orçamento de privacidade. Vale lembrar que o orçamento de privacidade determina o número máximo de vezes que esses relatórios agregados podem ser usados para gerar relatórios de resumo e limitar o ganho de informações. Qualquer agregação de um relatório além do orçamento de privacidade alocado vai falhar com o erro PRIVACY_BUDGET_EXHAUSTED.

Este guia orienta você sobre um recurso de depuração que, a partir da v2.12.0, gera e armazena um arquivo JSON auxiliar de relatórios relevantes que contribuíram para quaisquer erros PRIVACY_BUDGET_EXHAUSTED subsequentes encontrados nos seus trabalhos.

Se você tem interesse em recuperação de orçamento, continue lendo nossas orientações públicas no GitHub.

Pré-requisito

Ao continuar, o guia pressupõe que você já tem:

Depurar um job que falhou com o erro PRIVACY_BUDGET_EXHAUSTED

Nesse ponto, esperamos que você tenha executado o endpoint getJob com o ID da solicitação de job mais recente e recebido um erro PRIVACY_BUDGET_EXHAUSTED semelhante à resposta abaixo. No serviço de agregação v2.12.0, você terá um arquivo JSON de depuração de orçamento de privacidade esgotado recém-gerado localizado no seu bucket público do Cloud Storage.

Os caminhos são declarados por return_message e seguem os seguintes formatos:

  • Caminho do arquivo: <output_data_bucket_name>/<output_data_blob_prefix>/
  • Nome do arquivo: 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": ""
    }
  }
}

Etapas de solução de erros

Localize e abra a saída privacy_budget_exhausted_debugging_information_<utc timestamp>.json fornecida no seu bucket público do Cloud Storage. Ele pode ser encontrado no caminho <output_data_bucket_name>/<output_data_blob_prefix>fornecido em return_message. Nesse arquivo JSON, compare as propriedades filtering_id (padrão 0) e relevant_shared_info com os relatórios shared_info que podem ser agregados. Encontrar uma correspondência significa que esses relatórios excedem o orçamento alocado e levam a uma falha no job, e precisam ser filtrados em jobs futuros. Os relatórios de correspondência ainda podem ser reutilizados com um ID de filtragem diferente. Depois de identificar e remover os relatórios correspondentes do arquivo AVRO dos relatórios em lote, você pode executar o job novamente.

Confira a seguir um exemplo de saída 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"
       }
     }
   } ]
 }
}

Próximas etapas

Verifique se outra pessoa encontrou o mesmo problema no Painel de status do Sandbox de privacidade ou no repositório público do GitHub. Se você não encontrar uma solução para o problema do serviço de agregação, registre um problema no GitHub ou envie o formulário de suporte técnico.