Upgrading a log bucket to use Observability Analytics lets you run SQL queries to analyze the log data stored in that bucket. If a log bucket upgrade fails or stalls, you can use this document to diagnose and resolve synchronous validation errors, asynchronous provisioning errors, and blocked operations. For information about how to upgrade a log bucket, see Upgrade a bucket to use Observability Analytics.
About the upgrade process
Cloud Logging uses a two-step process when you issue a command to upgrade a log bucket to use Observability Analytics:
- Synchronous validation: Logging validates the command parameters. If validation fails, the command returns an error immediately.
- Asynchronous provisioning: If validation succeeds, then Logging starts a long-running operation that typically completes within 10 minutes.
Log bucket upgrades are audited operations. To check the status of the long-running
operation or find error details, you can
poll the operation by using the
Operations.GetOperation method, or you can
query your audit logs.
Log bucket state during an upgrade
When synchronous validation of an upgrade request succeeds,
Logging changes the state of the log bucket from ACTIVE to
UPDATING and starts the long-running operation. When the operation
completes, the state of the log bucket returns to ACTIVE.
You can determine the current state of a log bucket by running the
gcloud logging buckets describe command:
gcloud logging buckets describe LOG_BUCKET_ID \
--location=LOCATION_ID \
--project=PROJECT_ID
Before you run the command, make the following replacements:
- PROJECT_ID: Your project's ID.
- LOCATION_ID: The location of your bucket.
- LOG_BUCKET_ID: The ID of your bucket.
The lifecycleState field in the response shows the bucket's state:
description: Default bucket
lifecycleState: ACTIVE
name: projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID
retentionDays: 30
In the Google Cloud console, while the log bucket is in the UPDATING state:
- On the Logs Storage page, the Observability Analytics available column displays Upgrading… while the long-running operation is active (or Not eligible for upgrade if the console can't retrieve the operation status).
- In the Edit bucket panel and the Upgrade log bucket panel, the option to upgrade the bucket is disabled and the tooltip lists There are no pending updates as an unmet requirement.
VPC Service Controls perimeter considerations
Upgrades of log buckets inside a VPC Service Controls perimeter can fail due to APIs being blocked by the perimeter or due to cross-project configurations.
APIs the perimeter must allow
To upgrade a log bucket that is inside a VPC Service Controls perimeter, the perimeter must not restrict the following services:
logging.googleapis.comcloudkms.googleapis.com: Required to upgrade a log bucket that uses a customer-managed encryption key (CMEK).
Restricting these services causes the following behavior:
logging.googleapis.comrestricted: The upgrade command fails immediately with aPERMISSION_DENIEDerror, and your log bucket remains in theACTIVEstate.Resolution: Update the perimeter to allow the APIs listed at the beginning of this section and then retry the command.
cloudkms.googleapis.comrestricted: For CMEK-protected log buckets, the long-running operation fails with anINTERNALerror and your log bucket returns to theACTIVEstate.Resolution: Update the perimeter to allow the APIs listed at the beginning of this section and then retry the command.
Cross-perimeter CMEK configurations
You can't use identity-based ingress or egress rules to grant cross-perimeter access to the Cloud Key Management Service key when your log bucket and your Cloud KMS key are in different VPC Service Controls perimeters.
For this configuration, if your ingress rule specifies only the Logging service account identity, then the following occurs:
- Asynchronous provisioning fails with an
INTERNALerror and your log bucket returns to theACTIVEstate. - A policy audit log for the Cloud KMS project records the failure.
This audit log shows that the
google.cloud.kms.v1.KeyManagementService.Encryptmethod failed with aNO_MATCHING_ACCESS_LEVELingress violation and indicates it is for a BigQuery encryption service account.
Resolution: In the ingress rule that allows access to the Cloud KMS
perimeter, set identityType to ANY_IDENTITY
and specify the project that contains the log bucket as the source resource:
- ingressFrom:
identityType: ANY_IDENTITY
sources:
- resource: projects/PROJECT_NUMBER
ingressTo:
operations:
- serviceName: cloudkms.googleapis.com
methodSelectors:
- method: '*'
resources:
- projects/KMS_PROJECT_NUMBER
In the preceding example, replace the following:
- PROJECT_NUMBER: The project number of the project that contains the log bucket.
- KMS_PROJECT_NUMBER: The project number of the project that contains the Cloud KMS key.
If you also specify an egress rule, it must also set
identityType: ANY_IDENTITY.
Query audit logs for failure information
The queries in this section can help you find log entries that report failures when updating or upgrading a log bucket. These queries are for use with the Logs Explorer.
In the Google Cloud console, go to the Logs Explorer page:
If you use the search bar to find this page, then select the result whose subheading is Logging.
Query for all failed bucket updates or upgrades in a project
log_id("cloudaudit.googleapis.com/activity")
protoPayload.serviceName="logging.googleapis.com"
(protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucket" OR
protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync")
severity=ERROR
If you use the Google Cloud console to both upgrade your log bucket to use Observability Analytics and create a linked BigQuery dataset, then use the following query:
log_id("cloudaudit.googleapis.com/activity")
(protoPayload.serviceName="logging.googleapis.com" OR
protoPayload.serviceName="bigquery.googleapis.com")
(protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucket" OR
protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync" OR
protoPayload.methodName="google.cloud.bigquery.v2.DatasetService.InsertDataset")
severity=ERROR
The results of the previous query include log entries that indicate that creation of the linked BigQuery dataset failed. The error message can help you resolve the cause of the failure.
Query for failed bucket updates or upgrades for a specific bucket
Before you use the following query, make the following replacements:
- PROJECT_ID: Your project's ID.
- LOCATION_ID: The location of your bucket.
- LOG_BUCKET_ID: The ID of your bucket.
log_id("cloudaudit.googleapis.com/activity")
protoPayload.serviceName="logging.googleapis.com"
(protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucket" OR
protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync")
protoPayload.resourceName="projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID"
severity=ERROR
Query for long-running operation failures
log_id("cloudaudit.googleapis.com/activity")
protoPayload.serviceName="logging.googleapis.com"
protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync"
operation.last=true
severity=ERROR
INVALID_ARGUMENT (3)
The error message provided with an INVALID_ARGUMENT (3) error code contains sufficient information for you to resolve the failure. For this reason, this section doesn't enumerate all possible error messages.
Resource name issues
To resolve issues with resource names, pass
a valid bucket resource name in the format
projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID.
Make sure that the length of the resource name is within the length limits.
Update mask issues
An error message that contains the text update_mask or Update mask indicates
either a missing or malformed value.
To resolve this issue, in the API command, specify the update_mask and set the
value to "analytics_enabled".
Log bucket eligibility issues
You can't upgrade a locked
_Defaultlog bucket or locked custom buckets. You can upgrade the_Requiredbucket while it is locked.When a log bucket is locked, the error message is
"Bucket is not eligible for an upgrade to enable analytics".To resolve this failure, create a new analytics-enabled bucket and route logs to it.
You can't upgrade a log bucket at the same time as you are making other changes to the bucket. For example, you can't upgrade a log bucket and update the bucket's description.
To resolve this failure, send a separate
UpdateBucketorUpdateBucketAsyncrequest with onlyanalytics_enabledinupdate_mask, and update other log bucket fields in a separate request.You can't upgrade log buckets in organizations, folders, or billing accounts. You can only upgrade log buckets whose parent is a Google Cloud project.
You can't upgrade a log bucket that has already been upgraded or is being upgraded.
Use
GetBucketorListOperationsto determine whether an upgrade has already completed or is in progress.
Cloud KMS key issues
Error messages:
"Not a valid key reference (wrong type): 'KMS_KEY_NAME'""Name "KMS_KEY_NAME" is missing the COMPONENT component. Expected the form projects/[PROJECT_ID]/locations/[ID]/keyRings/[ID]/cryptoKeys/[ID]"
Resolution: Update the log bucket's cmek_settings.kms_key_name to a valid
Cloud KMS CryptoKey resource name before upgrading the bucket.
You must update the resource name, not the key version, CryptoKeyVersion.
Invalid argument message
If you see the message "Request contains an invalid argument.", then
try the following for CMEK-enabled log buckets:
- Ensure that the Logging service account associated with the bucket's CMEK configuration is initialized.
- Make sure that the bucket has a positive retention period.
To find the name of the service account, run the following command after you update the log bucket, location, and project IDs:
gcloud logging buckets describe LOG_BUCKET_ID --location=LOCATION_ID --project=PROJECT_ID
The service account might be in a project, folder, or organization.
DEADLINE_EXCEEDED (4)
Use UpdateBucketAsync and poll the returned long-running
operation by using the Operations.GetOperation method, or call GetBucket
after the background upgrade finishes.
NOT_FOUND (5)
To resolve these failures, try the following:
- Verify that the project ID or project number is correct and that the project is active. If the project is pending deletion, restore the project first.
- Make sure that the specified location is supported by Logging.
- Verify that the log bucket ID and location exist in the project
and that the target bucket isn't
_CloudTrace.
PERMISSION_DENIED (7)
A permission-denied error indicates that the requested action isn't allowed.
Missing user permissions
To upgrade a log bucket, make sure that the caller has an
Identity and Access Management (IAM) role that includes the
logging.buckets.update permission (such as roles/logging.configWriter or
roles/logging.admin), and verify that no custom organization policy blocks
the update.
Organization policy restrictions
To resolve the error message
"Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: [ID]",
make sure that the VPC Service Controls perimeter doesn't restrict the
logging.googleapis.com service. For more information, see
VPC Service Controls perimeter considerations.
Regional endpoint issues
To resolve permission-denied errors when regional endpoints are specified,
send the request to the global endpoint (logging.googleapis.com) or to the
regional endpoint that matches the log bucket's location.
RESOURCE_EXHAUSTED (8)
To resolve this failure, wait for in-flight provisioning operations to finish and retry with exponential backoff.
FAILED_PRECONDITION (9)
To resolve these failures, try the following:
Verify that the log bucket is in the
ACTIVEstate. You can't upgrade a log bucket that is being deleted or that is undergoing an update or provisioning operation.For information about how to determine the state of a log bucket, see Log bucket state during an upgrade.
You can't upgrade a locked log bucket.
The generic message
"Precondition check failed."indicates that the bucket state isn'tACTIVE. Wait until an in-progress operations complete and then retry the upgrade.
INTERNAL (13)
Error messages:
- Long-running operation (
Operations.GetOperation):"Failed to create analytics enabled bucket." - Cloud Audit Logs and synchronous
UpdateBucket:"Internal error encountered."
Resolution: Try the following:
For a CMEK-enabled log bucket, verify that the Cloud KMS key is enabled, that the Logging service account associated with the bucket's CMEK configuration has the
roles/cloudkms.cryptoKeyEncrypterDecrypterrole on the key, that the key is accessible to BigQuery, and that no organization policy or VPC Service Controls perimeter blocks Cloud KMS access.To find the name of the service account, run the following command:
gcloud logging buckets describe LOG_BUCKET_ID --location=LOCATION_ID --project=PROJECT_IDThe service account might be in a project, folder, or organization.
Inspect the existing log views on the bucket (
logging.views.list) to ensure that their filters are valid, and retry the bucket upgrade.Ensure that the log bucket hasn't been deleted (
DELETE_REQUESTED) and that no conflicting administrative action is occurring on the bucket, and then retry the upgrade.Retry the log bucket upgrade after transient BigQuery storage dataset or search index creation errors resolve, or once downstream BigQuery, Cloud KMS, or provisioning service availability is restored. If the failure persists, contact Cloud Customer Care.
UNAVAILABLE (14)
If you see the message "The service is currently unavailable.", then
retry the UpdateBucketAsync request with exponential backoff.