Nhận và lưu trữ báo cáo tổng hợp

Hướng dẫn này mô tả cách phân phối báo cáo đo lường đã mã hoá cho các nhà cung cấp công nghệ quảng cáo. Trình duyệt và ứng dụng Chrome gửi các báo cáo này đến các điểm cuối báo cáo được chỉ định, nơi nền tảng công nghệ quảng cáo nhận và lưu trữ các báo cáo tổng hợp. Các điểm cuối này, nằm ở URL .well-known trong nguồn gốc báo cáo của nhà cung cấp, do nền tảng lưu trữ, cho phép nhà cung cấp công nghệ quảng cáo sử dụng Attribution Reporting API hoặc Private Aggregation API để truy cập vào các điểm cuối đó.

Quy trình nhận và lưu trữ các báo cáo tổng hợp trong Dịch vụ tổng hợp Hộp cát về quyền riêng tư.
Hình 1.Dịch vụ tổng hợp: Xử lý báo cáo tổng hợp.

Các bước sau đây trình bày chi tiết quy trình của Dịch vụ tổng hợp để nhận và lưu trữ các báo cáo tổng hợp:

  1. Khi được kích hoạt, trình duyệt sẽ gửi các báo cáo tổng hợp chứa thông tin chi tiết về cả dữ liệu chuyển đổi và dữ liệu trên nhiều trang web.
  2. Trình duyệt phân phối các báo cáo đã mã hoá đến URL .well-known trong miền báo cáo công nghệ quảng cáo.
  3. Hệ thống sẽ chuyển tiếp các lô báo cáo đến Dịch vụ tổng hợp để xử lý.
  4. Dịch vụ tổng hợp tóm tắt các báo cáo theo số liệu thống kê.
  5. Dịch vụ tổng hợp thêm nhiễu vào dữ liệu tóm tắt để tăng cường quyền riêng tư của người dùng.
  6. Hệ thống cung cấp báo cáo cho công ty công nghệ quảng cáo để phân tích và đo lường.

Bảng sau đây mô tả các điểm cuối gỡ lỗi và trực tiếp cho API Tổng hợp riêng tư và API Báo cáo phân bổ:

API Điểm cuối Mô tả
Private Aggregation API
Điểm cuối gỡ lỗi:
[reporting-origin]/.well-known/private-aggregation/debug/report-shared-storage
Điểm cuối trực tiếp:
  • [reporting-origin]/.well-known/private-aggregation/report-shared-storage
  • [reporting-origin]/.well-known/private-aggregation/report-protected-audience
Điểm cuối gỡ lỗi:
Để phát triển và kiểm thử API Tổng hợp riêng tư.
Điểm cuối trực tiếp:
Nhận và xử lý báo cáo đo lường trong môi trường trực tiếp
Attribution Reporting API
Điểm cuối gỡ lỗi:
[reporting-origin]/.well-known/attribution-reporting/debug/report-aggregate-attribution
Điểm cuối trực tiếp:
[reporting-origin]/.well-known/attribution-reporting/report-aggregate-attribution
Điểm cuối gỡ lỗi:
Để phát triển và kiểm thử Attribution Reporting API.
Điểm cuối trực tiếp:
  • Điểm cuối chính thức cho báo cáo phân bổ tổng hợp.
  • Nhận và xử lý báo cáo phân bổ tổng hợp trong môi trường phát hành công khai để đo lường.

Nguồn gốc báo cáo nhận báo cáo JSON thông qua lệnh gọi POST. Sau đó, hệ thống sẽ chuyển đổi các báo cáo này thành định dạng Avro và đưa vào bộ nhớ trên đám mây. Sau khi xử lý hàng loạt, hệ thống sẽ gửi báo cáo Avro đến Dịch vụ tổng hợp để tóm tắt.

Các nền tảng công nghệ quảng cáo sẽ kích hoạt yêu cầu công việc tổng hợp cho Dịch vụ tổng hợp khi một lô báo cáo Avro được coi là đã sẵn sàng để xử lý. Dịch vụ này, được lưu trữ trong môi trường đám mây của nền tảng công nghệ quảng cáo, truy xuất các báo cáo Avro bắt buộc từ cùng một vị trí bộ nhớ. Vì mục đích bảo mật, bạn phải định cấu hình Dịch vụ tổng hợp để sử dụng hình ảnh vùng chứa đã phê duyệt. Hãy tham khảo kho lưu trữ GitHub về hộp cát về quyền riêng tư/dịch vụ tổng hợp để biết các hình ảnh vùng chứa hiện có.

Sau đây là ví dụ minh hoạ các báo cáo do từng API trả về:

  • Ví dụ về báo cáo Private Aggregation API:
  {
    "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com",
    "aggregation_service_payloads": [ {
        "key_id": "1a2baa3f-5d48-46cf-91f0-772633c12640",
        "payload": "8Cjr1s3FVkCYkjzBvyzJn14yardVjd5N4vLCA69LQAPbIkJ0B58hAqUGBCNXpvTjW9ZpIoZbCSiUOsUDuoA/S+tqVolLMkame6sWC07cfUmZcVsbU+La3pzTMtCgdtNc8MIWgD3C63CMw7rWroRlechewVUajvAYVK/0HJq0YyGrTiFZZm36zi0jjyHLAXKV8p1Lvy1d0o/wnBxC5oVo5BV6LPkxqQEcoYS2GyixUuht6wD0RzuH+BxxuH6vY/ynp2xDrnwftjvqwDUAxUWLFTunthM6BXZVxlrvOBim1h2dvPqWSyKZ5gafo+MgW9EM4SraavNM3XzZSCjdtAfSMJMrynSu2j0opyAq+9e1jq1xeYN00yZrJ0Y/GTI45IGjgCnVmvmuoI9ucW2SnXP31CQBwHqk4gtUgMsYGFSUYfhtnAQ/8TSbaXyS2LX+cQW87LqkvIraWw6o37O24VFBreFoFFXpu3IUeCZfji+Sr4/ykfZuHeMzQbBavyNnHKzPZlbLSXMiucx4/vWzYyOzHeIlbtupXVvbi40V2PieDShaSbjI266kGgFkeCk6z51AaAGebDPtRT1lhBpcoQ6JdF0Yp5VWSnyFARKFtCZ1aEBrlUlrEHLUQY/pFtmDxJQiicRz1YPjR8jRr3C7hlRhWwov0dMocqnMz5209hHGVZWSsaGc9kWjtxREW2ULXfoIwOGbX+WZsyFW2RhXksQPJ5fhyNc4ROkAzUthLb68gC5e0yZHvmLIAU4hcWe0UanJv+jRljn8PAPaJHKFUxQNJyBA7mTbn5mkpycxGrX6T3ZYdPHqvckqt9llJZWjr8NneizzZFRuJk423BDs38fXkvcTAsAckd2Zu0u2KC45WR93sN2/CWrqB7/QU9BsgNdonl/ehAWhU1LbcRRvBTcR9+0wL7vRL7cv5LG3+gRYRKsWI6U2nDSWp0cNpo9+HU0JNiifa5X0cguihqU2bSk6ABozgRtCZ7m+7eqWXMLSzBdmc1CPUoQppo6Wmf6ujdNqI6v2S6pDH781lph8Z2v7ZpxGdhVVPEL51cVn"
    } ],
    "debug_key": "1234",
    "shared_info": "{\"api\":\"shared-storage\",\"report_id\":\"05e3b948-cb8d-4404-be29-bfeac7ad9710\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1707784729\",\"version\":\"0.1\"}"
  }
  • Ví dụ về báo cáo Attribution Reporting API
  {
    "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com",
    "aggregation_service_payloads": [ {
        "key_id": "2dee0f3f-2aee-4a4a-8238-9154ed3d6f72",
        "payload": "pHvTHhcxvNKaCmnLpvYQsXlJpiNRuFO5Zj1QqUlqgWPOfuoHLfiXiFjmpvY8a53/OYnS4bKwHwJReFcofldsu8E9BzTTJ3CEk+B7vbEjnDPaljhpIBMTuQXy3QHGK4slWR/yNZVm2uXRWR/DVVzXziBoTDjN7qaPstRoLKUUMdfY2u8oq4tnLY00Y+NDZttZ4wJvC7hPmvY3lqHjdl14JPD2ytZZ4NViYzno3WKdH/oZc0jhGK4zI38lAM0qpahF/B9yb4zOu7IRIjQpNx73P8naDyddxLldoVlW/qHpO04FguWymscvI/8i6NwUR6Kj8seRlWS0iIUhETt/ai3lilKUHUb+uz0YG2kxjoXq7Ldk+MP56nNl67ZRNi2YZ7bOGI/okYWoT/wt2uWPe/5xAEMmadxl0hQQrG7YXHRSD8rDnaVPXo+AKIxdg727yJeB1ZENZvovl/kIevdRAmdBe2h1U3J6Uz6psly/46fvjgkj5QD+kO2uaYirzvmwS19luJsN/Qvh/R3ZO4qlJIQI0nDJPWwUJ4ODpyVmj4a0xQp3t2ESEnf4EmY7+khn3xpF5+MwEWKES2ZeDf7SHalR99pvZA8G3Fr8M0PWFmT00cmKCBwpQgZyd3Eay70UlqdkbFEedxiCVWKNNOUz41m5KG/7K3aR+dYx57l57Wct4gOFQg3jiUEBJWrFIVCXf12BT5iz5rBQh1N1CUt2oCOhYL/sPuBl6OV5GWHSIj8FUdpoDolqKXWINXfE88MUijE2ghNRpJN25BXIErUQtO9wFQv7zotC6d2BIaF0x8AkKg/7yzBQRySX/FZP3H3lMkpOz9rQMV8DjZ2lz7nV4k6CFo8qhT6cpYJD7GpYl81xJbglNqcJt5Pe5YUHrdBMyAFsTh3yoJvYnhQib/0xVN/a93lbYccxsd0yi375n4Xz0i1HUoe2ps+WlU8XysAUA1agG936eshaY1anTtbJbrcoaH+BNSacKiq4saprgUGl4eDjaR/uBhvUnO52WkmAGon8De3EFMZ/kwpPBNSXi7/MIAMjotsSKBc19bfg"
    } ],
    "shared_info": "{\"api\":\"attribution-reporting\",\"attribution_destination\":\"https://privacy-sandbox-demos-shop.dev\",\"report_id\":\"5b052748-f5fb-4f14-b291-de03484ed59e\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1707786751\",\"source_registration_time\":\"0\",\"version\":\"0.1\"}",
    "source_debug_key": "123456789",
    "trigger_debug_key": "123456789"
  }

Chuyển đổi báo cáo JSON sang Avro

Báo cáo tổng hợp phải ở định dạng chuyển đổi tuần tự dữ liệu Apache Avro cho mục đích xử lý hàng loạt. Để tạo báo cáo Avro, bạn phải sử dụng giản đồ AVSC. Tệp giản đồ AVSC xác định cấu trúc bản ghi và loại dữ liệu Avro. Để biết ví dụ về giản đồ AVSC, hãy xem tệp example.avsc trong kho lưu trữ GitHub avrodoc/schemata này.

Bạn có thể tìm thấy mã JavaScript mẫu trong phần Thu thập, chuyển đổi và báo cáo theo lô của trang Thu thập và báo cáo tổng hợp theo lô trong kho lưu trữ GitHub privacysandbox/aggregation-service.

Bạn có thể linh hoạt lưu trữ tất cả báo cáo trong một tệp AVRO hoặc phân phối các báo cáo đó trên nhiều tệp. Mặc dù tệp AVRO không có giới hạn về kích thước, nhưng hiệu suất tối ưu thường đạt được khi số lượng tệp nằm trong khoảng từ số lượng CPU trong phiên bản đám mây của bạn đến 1000.

Ví dụ về mã sau đây cho thấy giản đồ Avro cho các báo cáo tổng hợp. Các trường báo cáo bao gồm payload, key_idshared_info.

  {
    "type": "record",
    "name": "AggregatableReport",
    "fields": [
      {
        "name": "payload",
        "type": "bytes"
      },
      {
        "name": "key_id",
        "type": "string"
      },
      {
        "name": "shared_info",
        "type": "string"
      }
    ]
  }
Thông số Loại Mô tả
payload Byte payload phải được giải mã base64 và chuyển đổi thành một mảng byte cho báo cáo trực tiếp hoặc báo cáo chính thức.
debug_cleartext_payload Byte Trọng tải phải được giải mã base64 và chuyển đổi thành một mảng byte từ debug_cleartext_payload cho báo cáo gỡ lỗi.
key_id Chuỗi Đây là chuỗi key_id tìm thấy trong báo cáo. key_id là giá trị nhận dạng duy nhất chung 128 bit.
shared_info Chuỗi Đây là chuỗi không bị thay đổi, không bị can thiệp tìm thấy trong trường shared_info của báo cáo.

Dưới đây là ví dụ về báo cáo JSON:

{
   "aggregation_coordinator_identifier": "aws-cloud",
   "aggregation_service_payloads": [{
      "debug_cleartext_payload": "omRkYXhgaJldmFsdWVEAAAAgGZidWNrZXRQAAAAAAAAAAAAAAAAAAAFWW1vcGVyYX",
      "key_id": "3c6e2850-edf6-4886-eb70-eb3f2a7a7596",
      "payload": "oapYz92Mb1yam9YQ2AnK8dduTt2RwFUSApGcKqXnG1q+aGXfJ5DGpSxMj0NxdZgp7Cq"
   }],
   "debug_key": "1234",
   "shared_info":
"{\"api\":\"shared-storage\",\"debug_mode\":\"enabled\",\"report_id\":\"b029b922-93e9-4d66-a8c6-8cdeec762aed\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1719251997\",\"version\":\"0.1\"}"
}

Thông số kỹ thuật của tệp miền

Để tạo báo cáo tóm tắt bằng Dịch vụ tổng hợp, bạn cần có báo cáo tổng hợp (báo cáo JSON được chuyển đổi sang Avro) và tệp miền được liên kết. Hệ thống sẽ trích xuất các khoá đã khai báo trước từ báo cáo tổng hợp của bạn và đưa các khoá đó vào báo cáo tóm tắt trong các miền đầu ra. Bạn sẽ tìm thấy thông tin chi tiết về các khoá tổng hợp quan trọng này trong bài viết Tìm hiểu về khoá tổng hợp cho Báo cáo phân bổ và phần Khoá tổng hợp trong bài viết Kiến thức cơ bản về API Tổng hợp riêng tư. Miền đầu ra cũng bao gồm trường bucket đại diện cho giá trị khoá bộ chứa.

Tệp miền phải ở định dạng Avro bằng cách sử dụng giản đồ sau:

  {
    "type": "record",
    "name": "AggregationBucket",
    "fields": [
      {
        "name": "bucket",
        "type": "bytes",
        "doc": "A single bucket that appears in the aggregation service output. It is an 128-bit integer value encoded as a 16-byte big-endian bytestring."
      }
    ]
  }

Khoá bộ chứa

Khoá bộ chứa trong miền đầu ra phải được biểu thị dưới dạng chuỗi byte thập lục phân.

Ví dụ:

Nếu khoá bộ chứa là giá trị thập phân 1369:

  1. Chuyển đổi 1369 sang giá trị thập lục phân tương đương: 559

  2. Chuyển đổi chuỗi thập lục phân "559" thành chuỗi byte.

Sau đó, chuỗi byte đại diện cho khoá bộ chứa này sẽ được đưa vào giản đồ Avro của miền đầu ra.

Những điều quan trọng cần cân nhắc:

  • Loại dữ liệu: Khoá bộ chứa trong giản đồ Avro phải được xác định là loại byte để phù hợp với cách biểu thị chuỗi byte hex.

  • Chuyển đổi: Bạn có thể triển khai việc chuyển đổi từ thập phân sang hệ thập lục phân rồi sang chuỗi byte bằng Python hoặc Java.

Phương pháp này đảm bảo rằng khoá bộ chứa được định dạng đúng cách và tương thích với loại dữ liệu dự kiến trong giản đồ Avro cho miền đầu ra.

Khoá bộ chứa phải là một chuỗi byte thập lục phân. Ví dụ: hãy xem xét một chuỗi byte có giá trị thập phân là 1369. Khi chuyển đổi sang định dạng Hex, giá trị này là 559 để thêm vào miền đầu ra Avro.
Hình 2.Sơ đồ minh hoạ quá trình chuyển đổi khoá bộ chứa thành thập lục phân, sau đó biểu diễn chuỗi byte, cuối cùng được dùng để điền sẵn giản đồ AVRO của miền đầu ra.

Báo cáo theo lô

Để biết thông tin chi tiết về hạn mức quyền riêng tư và chiến lược phân lô, hãy xem tài liệu về chiến lược phân lô. Xin lưu ý rằng các báo cáo tổng hợp có giới hạn MAX_REPORT_AGE (hiện là 90 ngày) giữa scheduled_report_time và ngày chạy hàng loạt.

Báo cáo tóm tắt

Sau khi tạo lô, Dịch vụ tổng hợp sẽ tạo báo cáo tóm tắt ở định dạng Avro bằng cách sử dụng giản đồ results.avsc.

Sau khi công việc hoàn tất, báo cáo tóm tắt sẽ được lưu trữ trong output_data_blob_prefix trong bộ chứa output_data_bucket_name như đã nêu trong yêu cầu createJob.

Đối với các lô Dịch vụ tổng hợp đã bật debug_run, dịch vụ này sẽ tạo hai báo cáo, báo cáo tóm tắt và báo cáo tóm tắt gỡ lỗi. Báo cáo tóm tắt gỡ lỗi nằm trong thư mục output_data_blob_prefix/debug. Báo cáo tóm tắt gỡ lỗi sử dụng giản đồ debug_results.avsc.

Cả báo cáo tóm tắt và báo cáo gỡ lỗi đều được đặt tên là [output_data_blob_prefix]-1-of-1.avro. Nếu output_data_blob_prefixsummary/summary.avro, thì báo cáo sẽ nằm trong thư mục tóm tắt có tên summary-1-of-1.avro.

Ví dụ về results.avsc

Sau đây là ví dụ về giản đồ Avro cho results.avsc:

{
  "type": "record",
  "name": "AggregatedFact",
  "fields": [
    {
      "name": "bucket",
      "type": "bytes",
      "doc": "Histogram bucket used in aggregation. It is an 128-bit integer value encoded as a 16-byte big-endian bytestring. Leading 0-bits are left out."
    },
    {
      "name": "metric",
      "type": "long",
      "doc": "The metric associated with the bucket"
    }
  ]
}

Giản đồ Avro mẫu xác định một bản ghi có tên là AggregatedFact.

Ví dụ về debug_results.avsc

Sau đây là ví dụ về giản đồ Avro cho debug_results.avsc:

  {
  "type": "record",
  "name": "DebugAggregatedFact", Output domains include summary reports that contain pre-declared keys extracted from your aggregatable reports.
  "fields": [
      {
        "name": "bucket",
        "type": "bytes",
        "doc": "This represents the histogram bucket used in aggregation. It's a 128-bit integer, encoded as a 16-byte big-endian bytestring, with leading zero bytes omitted.."
      },
      {
        "name": "unnoised_metric",
        "type": "long",
        "doc": "The raw metric for the bucket."
      },
      {
        "name": "noise",
        "type": "long",
        "doc": "The noise applied to the metric in the regular result."
      }
      {
        "name":"annotations",
        "type": {
          "type": "array",
          "items": {
            "type":"enum",
            "name":"bucket_tags",
            "symbols":["in_domain","in_reports"]
          }
       }
    ]
  }

Sau khi chuyển đổi, báo cáo tóm tắt của bạn sẽ giống như ví dụ results.json. Khi debug_run được bật, báo cáo tóm tắt gỡ lỗi trả về sẽ tương tự như ví dụ debug_results.json.

Định dạng báo cáo Avro

Các báo cáo Avro nhận được từ Dịch vụ tổng hợp thường tuân theo một định dạng nhất quán. Định dạng báo cáo Avro bao gồm các trường sau:

  • bộ chứa: Giá trị nhận dạng duy nhất cho hoạt động tổng hợp dữ liệu (Ví dụ: "\u0005Y").

  • metric: Giá trị tổng hợp cho bộ chứa tương ứng. Giá trị này thường bao gồm cả độ nhiễu để tăng cường quyền riêng tư.

    Ví dụ:

  {
    "bucket": "\u0005Y",
    "metric": 26308
  }

Ví dụ về debug_results.json

Báo cáo gỡ lỗi Avro từ Dịch vụ tổng hợp sẽ giống như ví dụ debug_results.json sau. Các báo cáo này bao gồm khoá nhóm, unnoised_metric (thông tin tóm tắt về khoá nhóm trước khi áp dụng nhiễu) và nhiễu được thêm vào chỉ số đó.

  {
    "bucket": "\u0005Y",
    "unnoised_metric": 128,
    "noise": -17948,
    "annotations": [
      "in_reports",
      "in_domain"
    ]
  }

Chú thích cũng chứa các giá trị sau:

  • in_reports: khoá nhóm có trong báo cáo tổng hợp

  • in_domain: khoá bộ chứa có sẵn bên trong tệp Avro output_domain