Download OpenAPI specification:Download
Log API exposes log management capabilities: projects, archives, refills, pipelines, processors, log search/export, and resource log mappings (vCDN, vDB, vLB, vStorage). Authentication details are available at https://docs.api.vngcloud.vn/service-docs/accounts-api.html#tag/Authentication
Streams binary artifacts owned by the caller, such as project TLS client certificates.
Returns a zip archive containing the TLS client certificate, private key, and CA chain for the given project certificate.
| project_id required | string Example: 332b3934-2210-450c-9912-7fb6a8d03463 The identifier of the project. |
| cert_id required | string Example: 5e0a1ce6-3f88-4f5b-94cc-1f7a4e1b2d33 The identifier of the certificate. |
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/downloads/certificates/projects/332b3934-2210-450c-9912-7fb6a8d03463/5e0a1ce6-3f88-4f5b-94cc-1f7a4e1b2d33 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "message": "Refill name must be between 1 and 63 characters long."
}Manages vStorage bucket log mappings. A vStorage bucket log mapping links an individual vStorage bucket to a destination log project that receives the bucket access logs.
Updates a vStorage bucket log mapping for the given bucket. Sets the destination log project and toggles the mapping status to ACTIVE or INACTIVE.
| bucket-name required | string Example: tytv2-bucket The name of the vStorage bucket whose mapping is being updated. |
| logProjectId required | string The identifier of the destination log project that will receive the bucket access logs. |
| vstorageProjectId required | string The identifier of the parent vStorage project that owns the bucket. |
| status required | string^(ACTIVE|INACTIVE)$ Enum: "ACTIVE" "INACTIVE" The target status of the bucket log mapping. ACTIVE enables the mapping; INACTIVE disables it. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "vstorageProjectId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "status": "ACTIVE"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "bucketName": "tytv2-bucket",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "regionName": "HCM03",
- "userId": 53461,
- "createdAt": "2026-05-11T14:05:00.000Z",
- "vstorageProjectName": "string",
- "vstorageProjectId": "string"
}Returns a paginated list of vStorage bucket log mappings owned by the caller, optionally filtered by free-text query and region.
| query | string [ 0 .. 50 ] characters Example: query=tytv2-bucket Free-text search over the bucket name and related fields. |
| sortBy | string Default: "createdAt" Enum: "createdAt" "updatedAt" "name" "status" Example: sortBy=createdAt The field to sort by. |
| sortOrder | string Default: "DESC" Enum: "ASC" "DESC" Example: sortOrder=DESC The sort direction. |
| region-id | string [ 0 .. 50 ] characters Example: region-id=HCM03 Filter results to mappings whose bucket is deployed in the given region. |
| page | integer >= 0 Default: 0 The zero-based page index. |
| size | integer [ 1 .. 100 ] Default: 10 Example: size=10 The number of items per page. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/vstorage-bucket-log-mappings?query=tytv2-bucket&sortBy=createdAt&sortOrder=DESC®ion-id=HCM03&page=0&size=10' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "content": [
- { }
], - "totalPages": 5,
- "totalElements": 47,
- "currentPage": 0,
- "pageSize": 10
}Manages processor group libraries. A processor group library is a reusable, system-provided template that can be duplicated into a pipeline as a new processor group.
Returns the list of available processor group library templates. The query parameter performs a free-text search over the library name.
| query | string Example: query=audit Free-text search over the processor group library name. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/processor-group-libraries?query=audit' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
[- {
- "id": "9b1d8c2e-44fb-4a5e-bf3a-1f4c7d2b8e90",
- "name": "vks-audit-template",
- "description": "Pre-built template that parses VKS audit logs and normalizes timestamps",
- "processorLibrariesDto": [
- {
- "id": "5b7e1f2a-3d4c-4e5f-9a6b-7c8d9e0f1a2b",
- "processorGroupLibraryId": "9b1d8c2e-44fb-4a5e-bf3a-1f4c7d2b8e90",
- "name": "parse-audit-message",
- "description": "Parses the audit message body as JSON",
- "parserType": {
- "processorTypeKey": "JSON",
- "name": "JSON"
}, - "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}"
}
]
}
]Creates a new processor group inside the target pipeline using a library template as the source. The new group inherits processors and parser rules from the library.
| userId | integer <int64> |
| pipelineId required | string The identifier of the pipeline that owns this processor group. Overridden by the path parameter on create. |
| name required | string [ 1 .. 63 ] characters ^[a-z]$|^[a-z](?:[a-z\d-]){0,61}[a-z\d]$ The name of the processor group. Must be 1–63 characters, lowercase letters, digits and hyphens only. Must start with a letter and end with a letter or digit. |
| description | string <= 255 characters ^[A-Za-z\d_.\- ]{0,255}$ The description of the processor group. Must be 0–255 characters and consist of letters, digits, underscores, dots, spaces, and hyphens. |
required | object (Project) A project reference. Identifies a source or destination project. |
required | object (Project) A project reference. Identifies a source or destination project. |
| filter | string <= 1024 characters The filter expression applied to incoming logs at the group level. Uses |
| query | string <= 1024 characters Alternative filter expression slot. Same DSL as |
| editorEnable | boolean Whether the filter editor UI is enabled for this resource. |
| dropFilter | boolean Whether logs matching the filter are dropped instead of forwarded. When true, the group acts as an exclusion filter. |
| queryArr | string <= 1024 characters The structured form of |
Array of objects (ProcessorRequest) The processors to create inside this group, in execution order. |
{- "userId": 0,
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-group",
- "description": "Audit logs from VKS cluster events",
- "source": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "destination": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "editorEnable": false,
- "dropFilter": false,
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "processors": [
- {
- "userId": 0,
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": "JSON",
- "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "rulePreset": {
- "userId": 0,
- "name": "vks-audit-json",
- "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "processorType": "JSON"
}
}
]
}{- "id": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-group",
- "status": "PROCESSING",
- "description": "Audit logs from VKS cluster events",
- "source": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "destination": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "editorEnable": false,
- "dropFilter": false,
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "processors": [
- {
- "id": "a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": {
- "processorTypeKey": "JSON",
- "name": "JSON"
}, - "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\""
}
]
}Manages refills. A refill is an asynchronous job that replays archived logs into a project over a chosen time window.
Returns a paginated list of refills owned by the caller. When project_id is supplied, results are filtered to refills targeting that project.
| query | string [ 0 .. 50 ] characters Example: query=tytv Free-text search over the refill name. |
| project_id required | string Example: project_id=332b3934-2210-450c-9912-7fb6a8d03463 Filter results to refills targeting the given destination project. |
| page | integer >= 0 Default: 0 The zero-based page index. |
| size | integer [ 1 .. 100 ] Default: 10 Example: size=10 The number of items per page. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/refills?query=tytv&project_id=332b3934-2210-450c-9912-7fb6a8d03463&page=0&size=10' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "content": [
- { }
], - "totalPages": 5,
- "totalElements": 47,
- "currentPage": 0,
- "pageSize": 10
}Creates a refill that pulls logs from an external S3 or vStorage backend into a project over the given time window. Returns immediately with the refill accepted for asynchronous processing.
| storageType required | string^(S3)|(V_STORAGE)$ Enum: "S3" "V_STORAGE" The storage backend type. Determines the expected shape of storageSettings. |
| storageSettings required | object The storage backend connection settings. The shape depends on storageType. {
"region": "string",
"bucket": "string",
"endpoint": "string",
"prefix": "string",
"accessKey": "string",
"secretKey": "string",
"roleARN": "string",
"cannedACL": "string",
"isSystem": "boolean",
"additionalSettings": {
"forcePathStyle": "boolean",
"followRedirects": "boolean"
}
}When storageType is V_STORAGE:{
"region": "string",
"container": "string",
"endpoint": "string",
"accessKey": "string",
"secretKey": "string"
}
|
| startAt required | string <date-time> The inclusive start of the replay window in UTC (ISO-8601). |
| endAt required | string <date-time> The exclusive end of the replay window in UTC (ISO-8601). Must be after startAt. |
| filter | string The filter expression applied while replaying logs. Uses |
| name required | string [ 1 .. 63 ] characters ^[A-Za-z]$|^[A-Za-z][A-Za-z\d-]{0,61}[A-Za-z\... The name of the refill. Must be 1–63 characters and consist of letters, digits, and hyphens. Must start with a letter and end with a letter or digit. |
| projectId required | string [ 0 .. 50 ] characters The identifier of the destination project that receives the replayed logs. |
| description | string <= 300 characters ^[A-Za-z\d_.\- ]{0,300}$ The description of the refill. Must be 0–300 characters and consist of letters, digits, underscores, dots, spaces, and hyphens. |
{- "storageType": "S3",
- "storageSettings": {
- "region": "HCM03",
- "bucket": "vmonitor-archive",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********"
}, - "startAt": "2026-05-11T13:53:00.191Z",
- "endAt": "2026-05-11T14:03:00.191Z",
- "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "name": "tytv2",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "description": "Refill error logs from S3 into project tytv2"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "name": "tytv2",
- "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "status": "PROCESSING",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "userId": 53461,
- "storageType": "S3",
- "storageTypeName": "S3",
- "storageSettings": {
- "bucket": "vmonitor-archive-prod",
- "region": "us-east-1",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********",
- "roleARN": "arn:aws:iam::123456789012:role/log-archive",
- "cannedACL": "bucket-owner-full-control",
- "additionalSettings": {
- "forcePathStyle": true,
- "followRedirects": false
}
}, - "startAt": "2026-05-11T13:53:00.191Z",
- "endAt": "2026-05-11T14:03:00.191Z",
- "description": "Refill error logs from archive into project tytv2",
- "processStartedAt": "2026-05-11T14:05:42.000Z",
- "processEndedAt": "2026-05-11T14:18:30.000Z",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "updatedAt": "2026-05-11T14:18:30.000Z"
}Validates the supplied storage credentials and endpoint without creating a refill.
| storageType required | string^(S3)|(V_STORAGE)$ Enum: "S3" "V_STORAGE" The storage backend type. Determines the expected shape of storageSettings. |
| storageSettings required | object The storage backend connection settings. The shape depends on storageType. {
"region": "string",
"bucket": "string",
"endpoint": "string",
"prefix": "string",
"accessKey": "string",
"secretKey": "string",
"roleARN": "string",
"cannedACL": "string",
"isSystem": "boolean",
"additionalSettings": {
"forcePathStyle": "boolean",
"followRedirects": "boolean"
}
}When storageType is V_STORAGE:{
"region": "string",
"container": "string",
"endpoint": "string",
"accessKey": "string",
"secretKey": "string"
}
|
{- "storageType": "S3",
- "storageSettings": {
- "region": "HCM03",
- "bucket": "vmonitor-archive",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********"
}
}{- "message": "Connection successful",
- "success": true
}Creates a refill sourced from an existing archive. Storage credentials are inherited from the archive. Returns immediately with the refill accepted for asynchronous processing.
| startAt required | string <date-time> The inclusive start of the replay window in UTC (ISO-8601). Must be in the past. |
| endAt required | string <date-time> The exclusive end of the replay window in UTC (ISO-8601). Must be in the past and after startAt. |
| filter | string The filter expression applied while replaying logs. Uses |
| name required | string [ 1 .. 63 ] characters ^[A-Za-z]$|^[A-Za-z](?:[A-Za-z\d-]){0,61}[A-Z... The name of the refill. Must be 1–63 characters and consist of letters, digits, and hyphens. Must start with a letter and end with a letter or digit. |
| archiveId required | string [ 0 .. 50 ] characters The identifier of the source archive that holds the logs to replay. |
| projectId required | string [ 0 .. 50 ] characters The identifier of the destination project that receives the replayed logs. |
| description | string <= 300 characters ^[A-Za-z\d_.\- ]{0,300}$ The description of the refill. Must be 0–300 characters and consist of letters, digits, underscores, dots, spaces, and hyphens. |
{- "startAt": "2026-05-11T13:53:00.191Z",
- "endAt": "2026-05-11T14:03:00.191Z",
- "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "name": "tytv2",
- "archiveId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "description": "Replay archive into project tytv2"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "name": "tytv2",
- "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "status": "PROCESSING",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "userId": 53461,
- "storageType": "S3",
- "storageTypeName": "S3",
- "storageSettings": {
- "bucket": "vmonitor-archive-prod",
- "region": "us-east-1",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********",
- "roleARN": "arn:aws:iam::123456789012:role/log-archive",
- "cannedACL": "bucket-owner-full-control",
- "additionalSettings": {
- "forcePathStyle": true,
- "followRedirects": false
}
}, - "startAt": "2026-05-11T13:53:00.191Z",
- "endAt": "2026-05-11T14:03:00.191Z",
- "description": "Refill error logs from archive into project tytv2",
- "processStartedAt": "2026-05-11T14:05:42.000Z",
- "processEndedAt": "2026-05-11T14:18:30.000Z",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "updatedAt": "2026-05-11T14:18:30.000Z"
}Returns a single refill by its identifier.
| refill_id required | string Example: f0c4e42b-95d5-4e93-9211-011d02432b55 The identifier of the refill. |
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/refills/f0c4e42b-95d5-4e93-9211-011d02432b55 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "name": "tytv2",
- "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "status": "PROCESSING",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "userId": 53461,
- "storageType": "S3",
- "storageTypeName": "S3",
- "storageSettings": {
- "bucket": "vmonitor-archive-prod",
- "region": "us-east-1",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********",
- "roleARN": "arn:aws:iam::123456789012:role/log-archive",
- "cannedACL": "bucket-owner-full-control",
- "additionalSettings": {
- "forcePathStyle": true,
- "followRedirects": false
}
}, - "startAt": "2026-05-11T13:53:00.191Z",
- "endAt": "2026-05-11T14:03:00.191Z",
- "description": "Refill error logs from archive into project tytv2",
- "processStartedAt": "2026-05-11T14:05:42.000Z",
- "processEndedAt": "2026-05-11T14:18:30.000Z",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "updatedAt": "2026-05-11T14:18:30.000Z"
}Deletes a refill. A refill that is still processing is stopped and marked DELETED. Logs already written to the destination project are retained.
| refill_id required | string Example: f0c4e42b-95d5-4e93-9211-011d02432b55 The identifier of the refill. |
curl --request DELETE \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/refills/f0c4e42b-95d5-4e93-9211-011d02432b55 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "message": "Refill name must be between 1 and 63 characters long."
}Searches logs in a project, exports matching logs for download, and probes whether log data exists.
Executes an Elasticsearch-style log search against the caller's project. The body combines a polymorphic query tree (typically a bool filter over @timestamp and content matchers), an ordered list of sorts, a list of aggregations, and pagination via from/size. Returns the raw Elasticsearch response as a JSON string containing hits, aggregations, and metadata.
| projectId required | string Example: e73b8b15-a50d-4013-85e1-43fbd942ecbb The identifier of the project whose logs are searched. |
required | Array of objects (LogSort) The ordered list of sort directives applied to the result set. Pass an empty list to fall back to Elasticsearch default ordering. |
| size required | integer <int32> [ 0 .. 500 ] The maximum number of hits to return. |
| from required | integer <int32> >= 0 The zero-based offset of the first hit to return. Combined with |
required | object (LogQuery) A polymorphic Elasticsearch-style query node. The |
required | Array of objects (LogAggregation) The list of aggregations to compute alongside the hits. Pass an empty list when no aggregations are required. |
{- "sorts": [
- {
- "type": "field_sort",
- "value": { }
}
], - "size": 50,
- "from": 0,
- "query": {
- "type": "bool",
- "value": { }
}, - "aggregations": [
- {
- "aggregationQuery": {
- "type": "date_histogram",
- "value": { }
}, - "subAggregation": [
- { }
]
}
]
}{- "hits": {
- "total": {
- "value": 120
}, - "hits": [ ]
}, - "aggregations": { }
}Executes the same log search DSL against the project's default audit log index. Differs from /search-logs in that the query is augmented to scope results by the caller's identity and the underlying index is the platform-managed audit stream rather than the caller's custom logs.
| projectId required | string Example: e73b8b15-a50d-4013-85e1-43fbd942ecbb The identifier of the project whose default audit logs are searched. |
required | Array of objects (LogSort) The ordered list of sort directives applied to the result set. Pass an empty list to fall back to Elasticsearch default ordering. |
| size required | integer <int32> [ 0 .. 500 ] The maximum number of hits to return. |
| from required | integer <int32> >= 0 The zero-based offset of the first hit to return. Combined with |
required | object (LogQuery) A polymorphic Elasticsearch-style query node. The |
required | Array of objects (LogAggregation) The list of aggregations to compute alongside the hits. Pass an empty list when no aggregations are required. |
{- "sorts": [
- {
- "type": "field_sort",
- "value": { }
}
], - "size": 50,
- "from": 0,
- "query": {
- "type": "bool",
- "value": { }
}, - "aggregations": [
- {
- "aggregationQuery": {
- "type": "date_histogram",
- "value": { }
}, - "subAggregation": [
- { }
]
}
]
}{- "hits": {
- "total": {
- "value": 120
}, - "hits": [ ]
}, - "aggregations": { }
}Starts an asynchronous job that materializes the logs matching the supplied query into a downloadable file. Returns immediately with the job identifier and initial status. Poll GET /{projectId}/log-exports/{id} to retrieve progress and the final download URL.
| projectId required | string Example: e73b8b15-a50d-4013-85e1-43fbd942ecbb The identifier of the project whose logs are exported. |
required | Array of objects (LogSort) The ordered list of sort directives applied to the exported logs. Pass an empty list to fall back to Elasticsearch default ordering. |
required | object (LogQuery) A polymorphic Elasticsearch-style query node. The |
{- "sorts": [
- {
- "type": "field_sort",
- "value": { }
}
], - "query": {
- "type": "bool",
- "value": { }
}
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "total": 12000,
- "processedAmount": 4500,
- "status": "PROCESSING",
}Returns the current status of a log export job, including the number of documents processed and (once the job has finished) the download URL.
| projectId required | string Example: e73b8b15-a50d-4013-85e1-43fbd942ecbb The identifier of the project owning the export job. |
| id required | string Example: f0c4e42b-95d5-4e93-9211-011d02432b55 The identifier of the export job. |
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/projects/e73b8b15-a50d-4013-85e1-43fbd942ecbb/log-exports/f0c4e42b-95d5-4e93-9211-011d02432b55 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "total": 12000,
- "processedAmount": 4500,
- "status": "PROCESSING",
}Returns whether the project has any indexed log data. Useful for the UI to display an onboarding empty state.
| projectId required | string Example: e73b8b15-a50d-4013-85e1-43fbd942ecbb The identifier of the project to probe. |
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/projects/e73b8b15-a50d-4013-85e1-43fbd942ecbb/exists-log-data \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
trueManages pipelines. A pipeline is a named container of processor groups that transform incoming logs before they are written to a project.
Updates the name and description of an existing pipeline.
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline. |
| userId | integer <int64> |
| name required | string [ 1 .. 63 ] characters ^[a-z]$|^[a-z](?:[a-z\d-]){0,61}[a-z\d]$ The name of the pipeline. Must be 1–63 characters, lowercase letters, digits and hyphens only. Must start with a letter and end with a letter or digit. |
| description | string <= 255 characters ^[A-Za-z\d_.\- ]{0,255}$ The description of the pipeline. Must be 0–255 characters and consist of letters, digits, underscores, dots, spaces, and hyphens. |
{- "userId": 0,
- "name": "audit-pipeline",
- "description": "Pipeline for VKS audit logs"
}{- "id": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-pipeline",
- "description": "Pipeline for VKS audit logs",
- "createdAt": "2026-05-11T14:05:00.000Z"
}Deletes a pipeline and detaches all processor groups owned by it.
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline. |
curl --request DELETE \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/pipelines/3d752048-a797-45a4-a039-7c3c8e90a423 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "message": "Refill name must be between 1 and 63 characters long."
}Returns a paginated list of pipelines owned by the caller. The query parameter performs a free-text search over the pipeline name.
| query | string Example: query=audit Free-text search over the pipeline name. |
| page | integer >= 0 Default: 0 The zero-based page index. |
| size | integer [ 1 .. 100 ] Default: 10 Example: size=10 The number of items per page. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/pipelines?query=audit&page=0&size=10' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "content": [
- { }
], - "totalPages": 5,
- "totalElements": 47,
- "currentPage": 0,
- "pageSize": 10
}Creates a new, empty pipeline owned by the caller. Processor groups can be attached to the pipeline in subsequent calls.
| userId | integer <int64> |
| name required | string [ 1 .. 63 ] characters ^[a-z]$|^[a-z](?:[a-z\d-]){0,61}[a-z\d]$ The name of the pipeline. Must be 1–63 characters, lowercase letters, digits and hyphens only. Must start with a letter and end with a letter or digit. |
| description | string <= 255 characters ^[A-Za-z\d_.\- ]{0,255}$ The description of the pipeline. Must be 0–255 characters and consist of letters, digits, underscores, dots, spaces, and hyphens. |
{- "userId": 0,
- "name": "audit-pipeline",
- "description": "Pipeline for VKS audit logs"
}{- "id": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-pipeline",
- "description": "Pipeline for VKS audit logs",
- "createdAt": "2026-05-11T14:05:00.000Z"
}Returns a single pipeline by its identifier, including the processor groups attached to it.
| id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline. |
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/pipelines/3d752048-a797-45a4-a039-7c3c8e90a423 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "id": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-pipeline",
- "description": "Pipeline for VKS audit logs",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "processorGroups": [
- {
- "id": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-group",
- "status": "PROCESSING",
- "description": "Audit logs from VKS cluster events",
- "source": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "destination": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "editorEnable": false,
- "dropFilter": false,
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "processors": [
- {
- "id": "a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": {
- "processorTypeKey": "JSON",
- "name": "JSON"
}, - "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\""
}
]
}
]
}Manages projects. A project groups related log streams and stores their indexed mappings, certificates, and access settings.
Returns the Elasticsearch field mappings for a project together with their parser settings. Results are cached. Pass refresh=true to bypass the cache.
| project_id required | string Example: 332b3934-2210-450c-9912-7fb6a8d03463 The identifier of the project. |
| refresh | boolean Default: false Whether to bypass the cache and re-read mappings from Elasticsearch. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/projects/332b3934-2210-450c-9912-7fb6a8d03463/mappings?refresh=false' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "name": "jsonPayload.response.body.message",
- "elasticType": "text",
- "type": "string",
- "format": "date",
- "inputFormat": "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
- "outputFormat": "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
- "datePattern": "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
- "isAgg": true
}Sets or replaces the parser rule for a single field of a project. The body declares the target field, its data type, and any parser format settings.
| project_id required | string Example: 332b3934-2210-450c-9912-7fb6a8d03463 The identifier of the project. |
| projectId | string |
| name | string |
| type | string |
| format | string |
| inputFormat | string |
| outputFormat | string |
| datePattern | string |
| userId | integer <int64> |
{- "projectId": "string",
- "name": "string",
- "type": "string",
- "format": "string",
- "inputFormat": "string",
- "outputFormat": "string",
- "datePattern": "string",
- "userId": 0
}{- "message": "Refill name must be between 1 and 63 characters long."
}Issues a new TLS client certificate for the project. The certificate bytes are retrieved through the download endpoint.
| id required | string Example: 332b3934-2210-450c-9912-7fb6a8d03463 The identifier of the project. |
curl --request POST \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/projects/332b3934-2210-450c-9912-7fb6a8d03463/certificates \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "message": "Refill name must be between 1 and 63 characters long."
}Updates the description and user-defined field mappings of a project.
| project_id required | string Example: 332b3934-2210-450c-9912-7fb6a8d03463 The identifier of the project. |
| description | string <= 300 characters ^[A-Za-z\d_.\- ]{0,300}$ The free-text description of the project. Must be 0–300 characters and consist of letters, digits, underscores, dots, spaces, and hyphens. |
Array of objects (RestUserProjectMappings) The user-defined alias mappings from a logical portal field name to one or more system fields. Replaces the existing mapping list. |
{- "description": "Audit logs for tytv2",
- "mappings": [
- {
- "portalField": "user_id",
- "systemFields": [
- "jsonPayload.user.id",
- "jsonPayload.actor.id"
]
}
]
}{- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2",
- "projectType": "project",
- "description": "Audit logs for tytv2",
- "timeField": "@timestamp",
- "status": "ACTIVE",
- "billingStatus": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "extra": {
- "preRenderSystemFields": [
- "@timestamp",
- "host",
- "message"
], - "customMappings": [
- {
- "systemField": "user_id",
- "portalFields": [
- "jsonPayload.user.id",
- "jsonPayload.actor.id"
]
}
], - "enabledAcl": true,
- "certUpdatedAt": "2026-05-11T14:18:30.000Z"
}, - "certInfos": [
- {
- "certId": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "expireAt": "2019-08-24T14:15:22Z"
}
]
}Returns a paginated list of projects owned by the caller, optionally filtered by status, billing status, and project type.
| query | string [ 0 .. 50 ] characters Example: query=tytv Free-text search over the project name. |
| page | integer >= 0 Default: 0 The zero-based page index. |
| size | integer [ 1 .. 100 ] Default: 10 Example: size=10 The number of items per page. |
| billing_status | string Enum: "CREATING" "ACTIVE" "IN-ACTIVE" "ERROR" "DELETED" Example: billing_status=ACTIVE Filter results to projects with the given billing status. |
| project_type | string Enum: "default" "required" "project" Example: project_type=project Filter results to projects of the given type. |
| status | string Enum: "CREATING" "ACTIVE" "IN-ACTIVE" "ERROR" "DELETED" Example: status=ACTIVE Filter results to projects with the given lifecycle status. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/projects?query=tytv&page=0&size=10&billing_status=ACTIVE&project_type=project&status=ACTIVE' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "content": [
- { }
], - "totalPages": 5,
- "totalElements": 47,
- "currentPage": 0,
- "pageSize": 10
}Returns a single project by its identifier.
| id required | string Example: 332b3934-2210-450c-9912-7fb6a8d03463 The identifier of the project. |
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/projects/332b3934-2210-450c-9912-7fb6a8d03463 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2",
- "projectType": "project",
- "description": "Audit logs for tytv2",
- "timeField": "@timestamp",
- "status": "ACTIVE",
- "billingStatus": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "extra": {
- "preRenderSystemFields": [
- "@timestamp",
- "host",
- "message"
], - "customMappings": [
- {
- "systemField": "user_id",
- "portalFields": [
- "jsonPayload.user.id",
- "jsonPayload.actor.id"
]
}
], - "enabledAcl": true,
- "certUpdatedAt": "2026-05-11T14:18:30.000Z"
}, - "certInfos": [
- {
- "certId": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "expireAt": "2019-08-24T14:15:22Z"
}
]
}Returns the Kafka topic that backs the project's ingestion stream.
| id required | string Example: 332b3934-2210-450c-9912-7fb6a8d03463 The identifier of the project. |
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/projects/topic-info/332b3934-2210-450c-9912-7fb6a8d03463 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "topicName": "log-tytv2"
}Revokes and deletes a TLS client certificate from a project.
| project_id required | string Example: 332b3934-2210-450c-9912-7fb6a8d03463 The identifier of the project. |
| cert_id required | string Example: 5e0a1ce6-3f88-4f5b-94cc-1f7a4e1b2d33 The identifier of the certificate. |
curl --request DELETE \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/projects/332b3934-2210-450c-9912-7fb6a8d03463/certificates/5e0a1ce6-3f88-4f5b-94cc-1f7a4e1b2d33 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "message": "Refill name must be between 1 and 63 characters long."
}Manages vDB log mappings. A vDB log mapping links a vDB database resource to a destination log project that receives the database logs.
Activates a vDB log mapping for the given vDB resource and sets its destination log project. The mapping starts forwarding database logs.
| vdb-resource-id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the vDB resource whose mapping is being enabled. |
| logProjectId required | string The identifier of the destination log project that will receive the vDB logs. |
| status required | string^(ACTIVE)$ Value: "ACTIVE" The target status. Must be ACTIVE when enabling a mapping. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "status": "ACTIVE"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "vdbResourceId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "vdbResourceName": "tytv2-db",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "region": "HCM03",
- "engineType": "MySQL",
- "engineVersion": "8.0"
}Updates the destination log project of an existing vDB log mapping for the given vDB resource. Subsequent database logs are routed to the new project.
| vdb-resource-id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the vDB resource whose mapping is being edited. |
| logProjectId required | string The identifier of the destination log project that will receive the vDB logs. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "vdbResourceId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "vdbResourceName": "tytv2-db",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "region": "HCM03",
- "engineType": "MySQL",
- "engineVersion": "8.0"
}Deactivates a vDB log mapping for the given vDB resource. The mapping stops forwarding database logs. Existing logs are retained.
| vdb-resource-id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the vDB resource whose mapping is being disabled. |
| logProjectId required | string The identifier of the destination log project currently linked to the mapping. |
| status required | string^(INACTIVE)$ Value: "INACTIVE" The target status. Must be INACTIVE when disabling a mapping. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "status": "INACTIVE"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "vdbResourceId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "vdbResourceName": "tytv2-db",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "region": "HCM03",
- "engineType": "MySQL",
- "engineVersion": "8.0"
}Returns a paginated list of vDB log mappings owned by the caller, optionally filtered by free-text query and region.
| query | string [ 0 .. 50 ] characters Example: query=tytv2-db Free-text search over the vDB resource name and related fields. |
| sortBy | string Default: "createdAt" Enum: "createdAt" "updatedAt" "name" "status" Example: sortBy=createdAt The field to sort by. |
| sortOrder | string Default: "DESC" Enum: "ASC" "DESC" Example: sortOrder=DESC The sort direction. |
| page | integer >= 0 Default: 0 The zero-based page index. |
| size | integer [ 1 .. 100 ] Default: 10 Example: size=10 The number of items per page. |
| region | string Example: region=HCM03 Filter results to mappings whose vDB resource is deployed in the given region. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/vdb-log-mapping?query=tytv2-db&sortBy=createdAt&sortOrder=DESC&page=0&size=10®ion=HCM03' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "content": [
- { }
], - "totalPages": 5,
- "totalElements": 47,
- "currentPage": 0,
- "pageSize": 10
}Manages processor groups. A processor group is an ordered chain of processors that shares a source project, a destination project, and a group-level filter.
Returns a single processor group by its identifier, including the processors attached to it.
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline that owns the processor group. |
| processor_group_id required | string Example: 7f062485-cc6d-47b0-ae38-51afca9fc814 The identifier of the processor group. |
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/processor-groups/3d752048-a797-45a4-a039-7c3c8e90a423/7f062485-cc6d-47b0-ae38-51afca9fc814 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "id": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-group",
- "status": "PROCESSING",
- "description": "Audit logs from VKS cluster events",
- "source": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "destination": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "editorEnable": false,
- "dropFilter": false,
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "processors": [
- {
- "id": "a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": {
- "processorTypeKey": "JSON",
- "name": "JSON"
}, - "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\""
}
]
}Updates the name, description, filter, and editor settings of an existing processor group. Source and destination projects are immutable after creation.
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline that owns the processor group. |
| processor_group_id required | string Example: 7f062485-cc6d-47b0-ae38-51afca9fc814 The identifier of the processor group to update. |
| userId | integer <int64> |
| pipelineId required | string The identifier of the pipeline that owns this processor group. Overridden by the path parameter. |
| name required | string [ 1 .. 63 ] characters ^[a-z]$|^[a-z](?:[a-z\d-]){0,61}[a-z\d]$ The name of the processor group. Must be 1–63 characters, lowercase letters, digits and hyphens only. Must start with a letter and end with a letter or digit. |
| description | string <= 255 characters ^[A-Za-z\d_.\- ]{0,255}$ The description of the processor group. Must be 0–255 characters and consist of letters, digits, underscores, dots, spaces, and hyphens. |
| filter | string <= 1024 characters The filter expression applied to incoming logs at the group level. Uses |
| query | string <= 1024 characters Alternative filter expression slot. Same DSL as |
| editorEnable | boolean Whether the filter editor UI is enabled for this resource. |
| dropFilter | boolean Whether logs matching the filter are dropped instead of forwarded. When true, the group acts as an exclusion filter. |
| queryArr | string <= 1024 characters The structured form of |
{- "userId": 0,
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-group",
- "description": "Audit logs from VKS cluster events",
- "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "editorEnable": false,
- "dropFilter": false,
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]"
}{- "id": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-group",
- "status": "PROCESSING",
- "description": "Audit logs from VKS cluster events",
- "source": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "destination": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "editorEnable": false,
- "dropFilter": false,
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "processors": [
- {
- "id": "a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": {
- "processorTypeKey": "JSON",
- "name": "JSON"
}, - "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\""
}
]
}Removes a processor group from its pipeline. All processors inside the group are deleted together with the group.
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline that owns the processor group. |
| processor_group_id required | string Example: 7f062485-cc6d-47b0-ae38-51afca9fc814 The identifier of the processor group to delete. |
curl --request DELETE \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/processor-groups/3d752048-a797-45a4-a039-7c3c8e90a423/7f062485-cc6d-47b0-ae38-51afca9fc814 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "message": "Refill name must be between 1 and 63 characters long."
}Reorders the processors inside a processor group to match the order of identifiers in the request body. The first element becomes position 0.
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline that owns the processor group. |
| processor_group_id required | string Example: 7f062485-cc6d-47b0-ae38-51afca9fc814 The identifier of the processor group whose processors are reordered. |
| userId | integer <int64> |
| pipelineId required | string The identifier of the pipeline. Overridden by the path parameter. |
| processorGroupId required | string The identifier of the processor group. Overridden by the path parameter. |
| processors required | Array of strings The ordered list of processor identifiers. The first element becomes position 0. |
{- "userId": 0,
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "processors": [
- "a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b",
- "b4e2c6f3-8d5e-4a9b-c7f8-2d3e4f5a6b7c"
]
}{- "message": "Refill name must be between 1 and 63 characters long."
}Creates a processor group inside the given pipeline. The group can optionally include inline processors that are created together with the group.
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline that will own the new processor group. |
| userId | integer <int64> |
| pipelineId required | string The identifier of the pipeline that owns this processor group. Overridden by the path parameter on create. |
| name required | string [ 1 .. 63 ] characters ^[a-z]$|^[a-z](?:[a-z\d-]){0,61}[a-z\d]$ The name of the processor group. Must be 1–63 characters, lowercase letters, digits and hyphens only. Must start with a letter and end with a letter or digit. |
| description | string <= 255 characters ^[A-Za-z\d_.\- ]{0,255}$ The description of the processor group. Must be 0–255 characters and consist of letters, digits, underscores, dots, spaces, and hyphens. |
required | object (Project) A project reference. Identifies a source or destination project. |
required | object (Project) A project reference. Identifies a source or destination project. |
| filter | string <= 1024 characters The filter expression applied to incoming logs at the group level. Uses |
| query | string <= 1024 characters Alternative filter expression slot. Same DSL as |
| editorEnable | boolean Whether the filter editor UI is enabled for this resource. |
| dropFilter | boolean Whether logs matching the filter are dropped instead of forwarded. When true, the group acts as an exclusion filter. |
| queryArr | string <= 1024 characters The structured form of |
Array of objects (ProcessorRequest) The processors to create inside this group, in execution order. |
{- "userId": 0,
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-group",
- "description": "Audit logs from VKS cluster events",
- "source": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "destination": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "editorEnable": false,
- "dropFilter": false,
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "processors": [
- {
- "userId": 0,
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": "JSON",
- "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "rulePreset": {
- "userId": 0,
- "name": "vks-audit-json",
- "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "processorType": "JSON"
}
}
]
}{- "id": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "name": "audit-group",
- "status": "PROCESSING",
- "description": "Audit logs from VKS cluster events",
- "source": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "destination": {
- "id": "332b3934-2210-450c-9912-7fb6a8d03463",
- "name": "tytv2"
}, - "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "editorEnable": false,
- "dropFilter": false,
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "processors": [
- {
- "id": "a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": {
- "processorTypeKey": "JSON",
- "name": "JSON"
}, - "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\""
}
]
}Manages vCDN log mappings. A vCDN log mapping links a vCDN service domain to a destination log project that receives the CDN access logs.
Activates a vCDN log mapping for the given CDN domain and sets its destination log project. The mapping starts receiving CDN access logs.
| cdn-domain required | string Example: static.example.com The CDN domain identifying the mapping to enable. |
| logProjectId required | string The identifier of the destination log project that will receive the CDN access logs. |
| status required | string^(ACTIVE)$ Value: "ACTIVE" The target status. Must be ACTIVE when enabling a mapping. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "status": "ACTIVE"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "cdnId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "cdnDomain": "static.example.com",
- "domainName": "static.example.com",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "type": "webacc",
- "status": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z"
}Updates the destination log project of an existing vCDN log mapping for the given CDN domain. Subsequent CDN access logs are routed to the new project.
| cdn-domain required | string Example: static.example.com The CDN domain identifying the mapping to edit. |
| logProjectId required | string The identifier of the destination log project that will receive the CDN access logs. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "cdnId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "cdnDomain": "static.example.com",
- "domainName": "static.example.com",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "type": "webacc",
- "status": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z"
}Deactivates a vCDN log mapping for the given CDN domain. The mapping stops forwarding CDN access logs to the destination project. Existing logs are retained.
| cdn-domain required | string Example: static.example.com The CDN domain identifying the mapping to disable. |
| logProjectId required | string The identifier of the destination log project currently linked to the mapping. |
| status required | string^(INACTIVE)$ Value: "INACTIVE" The target status. Must be INACTIVE when disabling a mapping. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "status": "INACTIVE"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "cdnId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "cdnDomain": "static.example.com",
- "domainName": "static.example.com",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "type": "webacc",
- "status": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z"
}Returns a paginated list of vCDN log mappings owned by the caller, optionally filtered by free-text query and vCDN service type.
| query | string [ 0 .. 50 ] characters Example: query=static.example.com Free-text search over the CDN domain and related fields. |
| sortBy | string Default: "createdAt" Enum: "createdAt" "updatedAt" "name" "status" Example: sortBy=createdAt The field to sort by. |
| sortOrder | string Default: "DESC" Enum: "ASC" "DESC" Example: sortOrder=DESC The sort direction. |
| page | integer >= 0 Default: 0 The zero-based page index. |
| type | string [ 0 .. 50 ] characters Enum: "webacc" "obj-download" "vod" "live" Example: type=webacc Filter results to mappings backed by the given vCDN service type. |
| size | integer [ 1 .. 100 ] Default: 10 Example: size=10 The number of items per page. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/vcdn-log-mapping?query=static.example.com&sortBy=createdAt&sortOrder=DESC&page=0&type=webacc&size=10' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "content": [
- { }
], - "totalPages": 5,
- "totalElements": 47,
- "currentPage": 0,
- "pageSize": 10
}Returns the distinct vCDN service types that appear across the caller's vCDN log mappings. Used to populate the type filter in the console.
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/vcdn-log-mapping/type \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
[- {
- "typeId": "webacc",
- "typeName": "Web Accelerator"
}
]Manages vLB log mappings. A vLB log mapping links a vLB load balancer project to a destination log project that receives the load balancer logs.
Activates a vLB log mapping for the given vLB project and sets its destination log project. The mapping starts forwarding load balancer logs.
| vlb-project-id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the vLB project whose mapping is being enabled. |
| logProjectId required | string The identifier of the destination log project that will receive the vLB logs. |
| status required | string^(ACTIVE)$ Value: "ACTIVE" The target status. Must be ACTIVE when enabling a mapping. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "status": "ACTIVE"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "vlbProjectId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "vlbProjectName": "tytv2-vlb",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "region": "HCM03"
}Updates the destination log project of an existing vLB log mapping for the given vLB project. Subsequent load balancer logs are routed to the new project.
| vlb-project-id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the vLB project whose mapping is being edited. |
| logProjectId required | string The identifier of the destination log project that will receive the vLB logs. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "vlbProjectId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "vlbProjectName": "tytv2-vlb",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "region": "HCM03"
}Deactivates a vLB log mapping for the given vLB project. The mapping stops forwarding load balancer logs. Existing logs are retained.
| vlb-project-id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the vLB project whose mapping is being disabled. |
| logProjectId required | string The identifier of the destination log project currently linked to the mapping. |
| status required | string^(INACTIVE)$ Value: "INACTIVE" The target status. Must be INACTIVE when disabling a mapping. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "status": "INACTIVE"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "vlbProjectId": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "vlbProjectName": "tytv2-vlb",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "region": "HCM03"
}Returns a paginated list of vLB log mappings owned by the caller, optionally filtered by free-text query and region.
| query | string [ 0 .. 50 ] characters Example: query=tytv2-vlb Free-text search over the vLB project name and related fields. |
| sortBy | string Default: "createdAt" Enum: "createdAt" "updatedAt" "name" "status" Example: sortBy=createdAt The field to sort by. |
| sortOrder | string Default: "DESC" Enum: "ASC" "DESC" Example: sortOrder=DESC The sort direction. |
| page | integer >= 0 Default: 0 The zero-based page index. |
| size | integer [ 1 .. 100 ] Default: 10 Example: size=10 The number of items per page. |
| region | string Example: region=HCM03 Filter results to mappings whose vLB project is deployed in the given region. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/vlb-log-mapping?query=tytv2-vlb&sortBy=createdAt&sortOrder=DESC&page=0&size=10®ion=HCM03' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "content": [
- { }
], - "totalPages": 5,
- "totalElements": 47,
- "currentPage": 0,
- "pageSize": 10
}Manages processors. A processor is a single transformation step (e.g. JSON parse, GROK match, date parse) within a processor group.
Updates the configuration of an existing processor. The processor's group and pipeline are fixed; only mutable fields (name, parser type, parser rule, filter) change.
| processor_id required | string Example: a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b The identifier of the processor to update. |
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline that owns the processor group. |
| processor_group_id required | string Example: 7f062485-cc6d-47b0-ae38-51afca9fc814 The identifier of the processor group that owns the processor. |
| userId | integer <int64> |
| pipelineId required | string The identifier of the pipeline that owns this processor. Overridden by the path parameter on create/update. |
| processorGroupId required | string The identifier of the processor group that owns this processor. Overridden by the path parameter on create/update. |
| name required | string [ 1 .. 63 ] characters ^[a-z]$|^[a-z](?:[a-z\d-]){0,61}[a-z\d]$ The name of the processor. Must be 1–63 characters, lowercase letters, digits and hyphens only. Must start with a letter and end with a letter or digit. |
| parserType required | string Enum: "CSV" "DATE" "GEO_IP" "GROK" "JSON" "RE_MAPPER" "USER_AGENT" "CSV" "DATE" "GEO_IP" "GROK" "JSON" "RE_MAPPER" "USER_AGENT" The parser type that determines how this processor interprets the source field. |
| parserRule required | string Stringified JSON parser configuration. The inner shape depends on parserType (e.g. for JSON parser: |
| filter | string <= 1024 characters The filter expression applied before the processor runs. Uses |
| query | string <= 1024 characters Alternative filter expression slot. Same DSL as |
| queryArr | string <= 1024 characters The structured form of |
object (ParserRuleRequest) The request body for persisting a parser rule preset that can be reused across processors. |
{- "userId": 0,
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": "JSON",
- "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "rulePreset": {
- "userId": 0,
- "name": "vks-audit-json",
- "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "processorType": "JSON"
}
}{- "id": "a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": {
- "processorTypeKey": "JSON",
- "name": "JSON"
}, - "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\""
}Removes a processor from its processor group. Remaining processors in the group keep their order.
| processor_id required | string Example: a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b The identifier of the processor to delete. |
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline that owns the processor group. |
| processor_group_id required | string Example: 7f062485-cc6d-47b0-ae38-51afca9fc814 The identifier of the processor group that owns the processor. |
curl --request DELETE \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/processors/3d752048-a797-45a4-a039-7c3c8e90a423/7f062485-cc6d-47b0-ae38-51afca9fc814/a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "message": "Refill name must be between 1 and 63 characters long."
}Creates a processor inside the given processor group. The processor is appended at the end of the group's processor chain.
| pipeline_id required | string Example: 3d752048-a797-45a4-a039-7c3c8e90a423 The identifier of the pipeline that owns the processor group. |
| processor_group_id required | string Example: 7f062485-cc6d-47b0-ae38-51afca9fc814 The identifier of the processor group that will own the new processor. |
| userId | integer <int64> |
| pipelineId required | string The identifier of the pipeline that owns this processor. Overridden by the path parameter on create/update. |
| processorGroupId required | string The identifier of the processor group that owns this processor. Overridden by the path parameter on create/update. |
| name required | string [ 1 .. 63 ] characters ^[a-z]$|^[a-z](?:[a-z\d-]){0,61}[a-z\d]$ The name of the processor. Must be 1–63 characters, lowercase letters, digits and hyphens only. Must start with a letter and end with a letter or digit. |
| parserType required | string Enum: "CSV" "DATE" "GEO_IP" "GROK" "JSON" "RE_MAPPER" "USER_AGENT" "CSV" "DATE" "GEO_IP" "GROK" "JSON" "RE_MAPPER" "USER_AGENT" The parser type that determines how this processor interprets the source field. |
| parserRule required | string Stringified JSON parser configuration. The inner shape depends on parserType (e.g. for JSON parser: |
| filter | string <= 1024 characters The filter expression applied before the processor runs. Uses |
| query | string <= 1024 characters Alternative filter expression slot. Same DSL as |
| queryArr | string <= 1024 characters The structured form of |
object (ParserRuleRequest) The request body for persisting a parser rule preset that can be reused across processors. |
{- "userId": 0,
- "pipelineId": "3d752048-a797-45a4-a039-7c3c8e90a423",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": "JSON",
- "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "filter": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\"",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "rulePreset": {
- "userId": 0,
- "name": "vks-audit-json",
- "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "processorType": "JSON"
}
}{- "id": "a3f1b5e2-9c4d-4f8a-b6e7-1c2d3e4f5a6b",
- "processorGroupId": "7f062485-cc6d-47b0-ae38-51afca9fc814",
- "name": "demo",
- "parserType": {
- "processorTypeKey": "JSON",
- "name": "JSON"
}, - "parserRule": "{\"sourceField\":\"jsonPayload.response.body.message\",\"targetField\":\"\",\"skipOnInvalid\":true}",
- "queryArr": "[{\"key\":\"jsonPayload.action.keyword\",\"operator\":\"=\",\"value\":\"\\\"vks:CreateCluster\\\"\"}]",
- "query": "jsonPayload.action.keyword = \"vks:CreateCluster\""
}Runs the supplied grok pattern against the supplied sample log line and returns the captured variable bindings. Used by the UI to preview a GROK processor configuration before persisting it.
| log | string The sample log line to parse. |
| pattern required | string The grok pattern to apply to the log line. |
{- "log": "2026-05-11T13:53:00.191Z INFO vks:CreateCluster cluster-id=abc123",
- "pattern": "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{DATA:action} cluster-id=%{WORD:clusterId}"
}{ }Returns the list of date format patterns supported by the DATE parser processor type.
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/processors/formats-date \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
[- "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
]Manages vStorage log mappings. A vStorage log mapping links a vStorage project to a destination log project that receives the vStorage access logs.
Activates a vStorage log mapping for the given vStorage project and sets its destination log project. The mapping starts forwarding access logs.
| vstorage-project-id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the vStorage project whose mapping is being enabled. |
| logProjectId required | string The identifier of the destination log project that will receive the vStorage logs. |
| status required | string^(ACTIVE)$ Value: "ACTIVE" The target status. Must be ACTIVE when enabling a mapping. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "status": "ACTIVE"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "regionName": "HCM03",
- "userId": 53461,
- "createdAt": "2026-05-11T14:05:00.000Z",
- "vstorageProjectName": "string",
- "vstorageProjectId": "string"
}Updates the destination log project of an existing vStorage log mapping for the given vStorage project. Subsequent access logs are routed to the new project.
| vstorage-project-id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the vStorage project whose mapping is being edited. |
| logProjectId required | string The identifier of the destination log project that will receive the vStorage logs. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "regionName": "HCM03",
- "userId": 53461,
- "createdAt": "2026-05-11T14:05:00.000Z",
- "vstorageProjectName": "string",
- "vstorageProjectId": "string"
}Deactivates a vStorage log mapping for the given vStorage project. The mapping stops forwarding access logs. Existing logs are retained.
| vstorage-project-id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the vStorage project whose mapping is being disabled. |
| logProjectId | string The identifier of the destination log project currently linked to the mapping. |
| status required | string^(INACTIVE)$ Value: "INACTIVE" The target status. Must be INACTIVE when disabling a mapping. |
{- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "status": "INACTIVE"
}{- "id": "f0c4e42b-95d5-4e93-9211-011d02432b55",
- "logProjectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "logProjectName": "tytv2",
- "status": "ACTIVE",
- "regionName": "HCM03",
- "userId": 53461,
- "createdAt": "2026-05-11T14:05:00.000Z",
- "vstorageProjectName": "string",
- "vstorageProjectId": "string"
}Returns a paginated list of vStorage log mappings owned by the caller, optionally filtered by free-text query and region.
| query | string [ 0 .. 50 ] characters Example: query=tytv2-vstorage Free-text search over the vStorage project name and related fields. |
| sortBy | string Default: "createdAt" Enum: "createdAt" "updatedAt" "name" "status" Example: sortBy=createdAt The field to sort by. |
| sortOrder | string Default: "DESC" Enum: "ASC" "DESC" Example: sortOrder=DESC The sort direction. |
| region-id | string [ 0 .. 50 ] characters Example: region-id=HCM03 Filter results to mappings whose vStorage project is deployed in the given region. |
| page | integer >= 0 Default: 0 The zero-based page index. |
| size | integer [ 1 .. 100 ] Default: 10 Example: size=10 The number of items per page. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/vstorage-log-mappings?query=tytv2-vstorage&sortBy=createdAt&sortOrder=DESC®ion-id=HCM03&page=0&size=10' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "content": [
- { }
], - "totalPages": 5,
- "totalElements": 47,
- "currentPage": 0,
- "pageSize": 10
}Returns the distinct regions in which the caller has vStorage log mappings. Used to populate the region filter in the console.
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/vstorage-log-mappings/regions \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
[- {
- "regionId": "HCM03",
- "regionName": "Ho Chi Minh 03"
}
]Manages archives. An archive is a long-running asynchronous job that exports a project's logs into an external object storage backend.
Returns a single archive by its identifier.
| archive_id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the archive. |
curl --request GET \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/archives/4b412469-4da1-4a86-95f1-4e9af32b1f37 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "id": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "name": "tytv2",
- "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "status": "PROCESSING",
- "description": "Archive of project tytv2 logs to S3",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "userId": 53461,
- "storageType": "S3",
- "storageTypeName": "S3",
- "storageSettings": {
- "bucket": "vmonitor-archive-prod",
- "region": "us-east-1",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********",
- "roleARN": "arn:aws:iam::123456789012:role/log-archive",
- "cannedACL": "bucket-owner-full-control",
- "additionalSettings": {
- "forcePathStyle": true,
- "followRedirects": false
}
}, - "processStartedAt": "2026-05-11T14:05:42.000Z",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "updatedAt": "2026-05-11T14:18:30.000Z"
}Replaces the storage settings, source project, and filter of an existing archive.
| archive_id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the archive. |
| storageType required | string^(S3)|(V_STORAGE)$ Enum: "S3" "V_STORAGE" The storage backend type. Determines the expected shape of storageSettings. |
| storageSettings required | object The storage backend connection settings. The shape depends on storageType. {
"region": "string",
"bucket": "string",
"endpoint": "string",
"prefix": "string",
"accessKey": "string",
"secretKey": "string",
"roleARN": "string",
"cannedACL": "string",
"isSystem": "boolean",
"additionalSettings": {
"forcePathStyle": "boolean",
"followRedirects": "boolean"
}
}When storageType is V_STORAGE:{
"region": "string",
"container": "string",
"endpoint": "string",
"accessKey": "string",
"secretKey": "string"
}
|
| filter | string The filter expression applied while exporting logs. Uses |
| projectId required | string [ 0 .. 50 ] characters The identifier of the source project whose logs are archived. |
{- "storageType": "S3",
- "storageSettings": {
- "region": "HCM03",
- "bucket": "vmonitor-archive",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********"
}, - "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463"
}{- "id": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "name": "tytv2",
- "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "status": "PROCESSING",
- "description": "Archive of project tytv2 logs to S3",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "userId": 53461,
- "storageType": "S3",
- "storageTypeName": "S3",
- "storageSettings": {
- "bucket": "vmonitor-archive-prod",
- "region": "us-east-1",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********",
- "roleARN": "arn:aws:iam::123456789012:role/log-archive",
- "cannedACL": "bucket-owner-full-control",
- "additionalSettings": {
- "forcePathStyle": true,
- "followRedirects": false
}
}, - "processStartedAt": "2026-05-11T14:05:42.000Z",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "updatedAt": "2026-05-11T14:18:30.000Z"
}Deletes an archive. An archive that is still processing is stopped and marked DELETED. Logs already written to the destination storage are retained.
| archive_id required | string Example: 4b412469-4da1-4a86-95f1-4e9af32b1f37 The identifier of the archive. |
curl --request DELETE \ --url https://vmonitorapi.vngcloud.vn/log-api/v1/archives/4b412469-4da1-4a86-95f1-4e9af32b1f37 \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "message": "Refill name must be between 1 and 63 characters long."
}Returns a paginated list of archives owned by the caller. When project_id is supplied, results are filtered to archives sourced from that project.
| query | string [ 0 .. 50 ] characters Example: query=tytv Free-text search over the archive name. |
| project_id | string Example: project_id=332b3934-2210-450c-9912-7fb6a8d03463 Filter results to archives sourced from the given project. |
| page | integer >= 0 Default: 0 The zero-based page index. |
| size | integer [ 1 .. 100 ] Default: 10 Example: size=10 The number of items per page. |
curl --request GET \ --url 'https://vmonitorapi.vngcloud.vn/log-api/v1/archives?query=tytv&project_id=332b3934-2210-450c-9912-7fb6a8d03463&page=0&size=10' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
{- "content": [
- { }
], - "totalPages": 5,
- "totalElements": 47,
- "currentPage": 0,
- "pageSize": 10
}Creates an archive that exports a project's logs into an external S3 or vStorage backend. Returns immediately with the archive accepted for asynchronous processing.
| storageType required | string^(S3)|(V_STORAGE)$ Enum: "S3" "V_STORAGE" The storage backend type. Determines the expected shape of storageSettings. |
| storageSettings required | object The storage backend connection settings. The shape depends on storageType. {
"region": "string",
"bucket": "string",
"endpoint": "string",
"prefix": "string",
"accessKey": "string",
"secretKey": "string",
"roleARN": "string",
"cannedACL": "string",
"isSystem": "boolean",
"additionalSettings": {
"forcePathStyle": "boolean",
"followRedirects": "boolean"
}
}When storageType is V_STORAGE:{
"region": "string",
"container": "string",
"endpoint": "string",
"accessKey": "string",
"secretKey": "string"
}
|
| filter | string The filter expression applied while exporting logs. Uses |
| name required | string [ 1 .. 63 ] characters ^[A-Za-z]$|^[A-Za-z](?:[A-Za-z\d-]){0,61}[A-Z... The name of the archive. Must be 1–63 characters and consist of letters, digits, and hyphens. Must start with a letter and end with a letter or digit. |
| projectId required | string [ 0 .. 50 ] characters The identifier of the source project whose logs are archived. |
| description | string <= 300 characters ^[A-Za-z\d_.\- ]{0,300}$ The description of the archive. Must be 0–300 characters and consist of letters, digits, underscores, dots, spaces, and hyphens. |
{- "storageType": "S3",
- "storageSettings": {
- "region": "HCM03",
- "bucket": "vmonitor-archive",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********"
}, - "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "name": "tytv2",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "description": "Archive of project tytv2 logs to S3"
}{- "id": "4b412469-4da1-4a86-95f1-4e9af32b1f37",
- "name": "tytv2",
- "filter": "client_country.keyword = \"VN\" AND message != \"demo\"",
- "status": "PROCESSING",
- "description": "Archive of project tytv2 logs to S3",
- "projectId": "332b3934-2210-450c-9912-7fb6a8d03463",
- "userId": 53461,
- "storageType": "S3",
- "storageTypeName": "S3",
- "storageSettings": {
- "bucket": "vmonitor-archive-prod",
- "region": "us-east-1",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********",
- "roleARN": "arn:aws:iam::123456789012:role/log-archive",
- "cannedACL": "bucket-owner-full-control",
- "additionalSettings": {
- "forcePathStyle": true,
- "followRedirects": false
}
}, - "processStartedAt": "2026-05-11T14:05:42.000Z",
- "createdAt": "2026-05-11T14:05:00.000Z",
- "updatedAt": "2026-05-11T14:18:30.000Z"
}Validates the supplied storage credentials and endpoint without creating an archive.
| storageType required | string^(S3)|(V_STORAGE)$ Enum: "S3" "V_STORAGE" The storage backend type. Determines the expected shape of storageSettings. |
| storageSettings required | object The storage backend connection settings. The shape depends on storageType. {
"region": "string",
"bucket": "string",
"endpoint": "string",
"prefix": "string",
"accessKey": "string",
"secretKey": "string",
"roleARN": "string",
"cannedACL": "string",
"isSystem": "boolean",
"additionalSettings": {
"forcePathStyle": "boolean",
"followRedirects": "boolean"
}
}When storageType is V_STORAGE:{
"region": "string",
"container": "string",
"endpoint": "string",
"accessKey": "string",
"secretKey": "string"
}
|
{- "storageType": "S3",
- "storageSettings": {
- "region": "HCM03",
- "bucket": "vmonitor-archive",
- "accessKey": "AKIAIOSFODNN7EXAMPLE",
- "secretKey": "********"
}
}{- "message": "Connection successful",
- "success": true
}