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:
- Serviço de agregação
v2.12.0
(ou mais recente) implantado na nuvem pública escolhida (Google Cloud Platform ou Amazon Web Services).
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.