PutLog to UpdateLogType APIs request and response mapping
This guide details the request and response mapping specifications and property parity analysis for migrating from the legacy Ingestion API (PutLog) to the modern Chronicle API (UpdateLogType).
[!IMPORTANT] The modern
UpdateLogTypeAPI requires standard Google Cloud IAM authentication authorized for the target instance and log type resources. Legacy Ingestion API keys and partner tokens are not accepted.
Protocol and mapping overview
| Feature | Legacy API (PutLog) |
Modern Chronicle API (UpdateLogType) |
|---|---|---|
| HTTP method | POST |
PATCH |
| Permissions | Ingestion API key or legacy partner tokens | chronicle.googleapis.com/logTypes.update |
Architectural evolution and separation of concerns
In the legacy Ingestion API, PutLog coupled raw log streaming with implicit log type registration and parser hints inside a procedural LogEntryBatch container.
In the modern Chronicle API, data ingestion and log type lifecycle management are cleanly decoupled into dedicated AIP-compliant services:
- Log data ingestion: Streaming raw and unstructured logs is handled by
ImportLogs(POST /v1/{parent}/logs:import), covered in theImportLogsparity guide. - Log type configuration: Managing log type definitions, display metadata, parser bindings, and UI configurations is handled by
UpdateLogType(PATCH /v1alpha/{log_type.name}).
Request payload field-by-field parity
The following table maps the configuration attributes from the legacy PutLogRequest.batch payload to the modern UpdateLogTypeRequest structure:
Legacy field (PutLogRequest.batch) |
Modern field (UpdateLogTypeRequest) |
Field type | Parity and migration notes |
|---|---|---|---|
source.customer_id |
log_type.name (in HTTP path) |
string |
Google Cloud scoping hierarchy: In the legacy API, customer identification was passed inside source.customer_id or resolved using API key. In the modern API, instance ownership is defined in the resource path: projects/{project}/locations/{location}/instances/{instance}/logTypes/{log_type}. |
log_type / type |
log_type.name / log_type.display_name |
string |
Direct mapping: The log type identifier is bound as the final segment of log_type.name and represented by log_type.display_name for rule and query tagging. |
hint |
(Parser management) | string |
Separated into parser configuration: In the legacy API, an opaque hint string was passed alongside log batches. In the modern API, parsing rules are configured through dedicated parser management or passed as hint during log ingestion with ImportLogs. |
entries |
(Ingestion separation) | repeated LogEntry |
Decoupled to ImportLogs: Raw log entries are no longer transmitted using log type management calls; callers stream telemetry using ImportLogs. |
| — | update_mask |
google.protobuf.FieldMask |
New standard patch parameter: Standard AIP-134 field mask specifying the exact fields to update (for example, display_name or product_source). If omitted, all non-empty fields in log_type are updated. |
| — | log_type.product_source |
string |
New field: UI product source description displayed when configuring feeds. |
| — | log_type.is_custom |
bool |
New field: Identifies whether the log type is custom to the customer tenant. |
| — | log_type.has_custom_parser |
bool |
New field: Indicates whether a custom CBN parser is bound to the log type. |
| — | log_type.parser_type |
ParserType |
New field: Classification of the parser assigned to this log type (CUSTOM, PREBUILT). |
Response payload field-by-field parity
The legacy API returned an empty confirmation message. The modern API returns the full updated LogType resource.
Legacy field (PutLogResponse) |
Modern field (LogType) |
Field type | Parity and migration notes |
|---|---|---|---|
| — | name |
string |
New field: Full canonical resource name of the updated log type. |
| — | display_name |
string |
New field: Updated display name of the log type. |
| — | product_source |
string |
New field: Updated product source label. |
| — | is_custom |
bool |
New field: Indicates whether the log type is custom. |
| — | parser_type |
ParserType |
New field: Active parser type bound to the log type. |
| — | last_ingested_time |
google.protobuf.Timestamp |
New field: Timestamp when logs were last ingested for this log type. |
| — | feed_count |
int32 |
New field: Number of active feeds associated with the log type. |
Key differences
- Decoupling ingestion from configuration:
- Legacy
PutLogcombined log streaming and log type registration into a single endpoint. - Modern Chronicle cleanly separates data plane ingestion (
ImportLogs) from control plane log type configuration (UpdateLogType).
- Legacy
- Standard RESTful PATCH semantics (AIP-134):
- Legacy
PutLogutilized a customPOST /v1/log:putmethod. - Modern
UpdateLogTypefollows standard Google Cloud API guidelines, usingPATCHsemantics with aFieldMask(update_mask) to allow selective updates without risking accidental attribute erasure.
- Legacy
- Rich resource state returned in response:
- Legacy
PutLogreturned an empty object ({}). - Modern
UpdateLogTypereturns the complete updatedLogTyperesource, including ingestion status (last_ingested_time), feed associations (feed_count), and parser metadata.
- Legacy
- Modern IAM authorization:
- Authentication shifts from legacy Ingestion API keys to standard Google Cloud IAM OAuth 2.0 bearer tokens requiring
chronicle.googleapis.com/logTypes.update.
- Authentication shifts from legacy Ingestion API keys to standard Google Cloud IAM OAuth 2.0 bearer tokens requiring