Soluciona problemas de actualización de un bucket para usar Estadísticas de observabilidad

Actualizar un bucket de registros para usar Estadísticas de observabilidad te permite ejecutar consultas en SQL para analizar los datos de registro almacenados en ese bucket. Si la actualización de un bucket de registros falla o se detiene, puedes usar este documento para diagnosticar y resolver errores de validación síncronos, errores de aprovisionamiento asíncronos y operaciones bloqueadas. Para obtener información sobre cómo actualizar un bucket de registros, consulta Actualiza un bucket para usar Estadísticas de observabilidad.

Acerca del proceso de actualización

Cloud Logging usa un proceso de dos pasos cuando emites un comando para actualizar un bucket de registros y usar Estadísticas de observabilidad:

  1. Validación síncrona: Logging valida los parámetros del comando. Si la validación falla, el comando devuelve un error de inmediato.
  2. Aprovisionamiento asíncrono: Si la validación se realiza correctamente, Logging inicia una operación de larga duración que, por lo general, se completa en un plazo de 10 minutos.

Las actualizaciones de bucket de registros son operaciones auditadas. Para verificar el estado de la operación de larga duración o encontrar detalles de errores, puedes sondear la operación con el método Operations.GetOperation o consultar tus registros de auditoría.

Estado del bucket de registros durante una actualización

Cuando la validación síncrona de una solicitud de actualización se realiza de forma correcta, Logging cambia el estado del bucket de registros de ACTIVE a UPDATING y, luego, inicia la operación de larga duración. Cuando se completa la operación, el estado del bucket de registros vuelve a ser ACTIVE.

Para determinar el estado actual de un bucket de registros, ejecuta el comando gcloud logging buckets describe:

gcloud logging buckets describe LOG_BUCKET_ID \
  --location=LOCATION_ID \
  --project=PROJECT_ID

Antes de ejecutar el comando, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el ID de tu proyecto.
  • LOCATION_ID: Es la ubicación de tu bucket.
  • LOG_BUCKET_ID: Es el ID de tu bucket.

El campo lifecycleState de la respuesta muestra el estado del bucket:

description: Default bucket
lifecycleState: ACTIVE
name: projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID
retentionDays: 30

En la consola de Google Cloud , mientras el bucket de registros está en el estado UPDATING, haz lo siguiente:

  • En la página Almacenamiento de registros, la columna Estadísticas de observabilidad disponibles muestra Actualizando… mientras la operación de larga duración está activa (o No apto para la actualización si la consola no puede recuperar el estado de la operación).
  • En los paneles Editar bucket y Actualizar bucket de registros, la opción para actualizar el bucket está inhabilitada y la información sobre la herramienta indica No hay actualizaciones pendientes como un requisito no cumplido.

Consideraciones sobre el perímetro de los Controles del servicio de VPC

Las actualizaciones de los buckets de registros dentro de un perímetro de Controles del servicio de VPC pueden fallar debido a que el perímetro bloquea las APIs o a configuraciones entre proyectos.

APIs que debe permitir el perímetro

Para actualizar un bucket de registros que se encuentra dentro de un perímetro de Controles del servicio de VPC, el perímetro no debe restringir los siguientes servicios:

  • logging.googleapis.com
  • cloudkms.googleapis.com: Es obligatorio para actualizar un bucket de registros que usa una clave de encriptación administrada por el cliente (CMEK).

La restricción de estos servicios provoca el siguiente comportamiento:

  • logging.googleapis.com restringido: El comando de actualización falla de inmediato con un error PERMISSION_DENIED, y tu bucket de registros permanece en el estado ACTIVE.

    Resolución: Actualiza el perímetro para permitir las APIs que se indican al principio de esta sección y, luego, vuelve a intentar ejecutar el comando.

  • cloudkms.googleapis.com restringido: En el caso de los buckets de registros protegidos con CMEK, la operación de larga duración falla con un error INTERNAL y el bucket de registros vuelve al estado ACTIVE.

    Resolución: Actualiza el perímetro para permitir las APIs que se indican al principio de esta sección y, luego, vuelve a intentar ejecutar el comando.

Configuraciones de CMEK entre perímetros

No puedes usar reglas de entrada o salida basadas en la identidad para otorgar acceso entre perímetros a la clave de Cloud Key Management Service cuando el bucket de registros y la clave de Cloud KMS se encuentran en perímetros de Controles del servicio de VPC diferentes.

En esta configuración, si tu regla de entrada especifica solo la identidad de la cuenta de servicio de Logging, ocurre lo siguiente:

  • El aprovisionamiento asíncrono falla con un error INTERNAL y tu bucket de registros vuelve al estado ACTIVE.
  • Un registro de auditoría de políticas para el proyecto de Cloud KMS registra la falla. Este registro de auditoría muestra que el método google.cloud.kms.v1.KeyManagementService.Encrypt falló con una violación de entrada NO_MATCHING_ACCESS_LEVEL y, además, indica que es para una cuenta de servicio de encriptación de BigQuery.

Resolución: En la regla de entrada que permite el acceso al perímetro de Cloud KMS, establece identityType en ANY_IDENTITY y especifica el proyecto que contiene el bucket de registros como el recurso de origen:

- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/PROJECT_NUMBER
  ingressTo:
    operations:
    - serviceName: cloudkms.googleapis.com
      methodSelectors:
      - method: '*'
    resources:
    - projects/KMS_PROJECT_NUMBER

En el ejemplo anterior, reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número del proyecto que contiene el bucket de registros.
  • KMS_PROJECT_NUMBER: Es el número del proyecto que contiene la clave de Cloud KMS.

Si también especificas una regla de salida, esta también debe establecer identityType: ANY_IDENTITY.

Consulta los registros de auditoría para obtener información sobre los errores

Las consultas de esta sección pueden ayudarte a encontrar entradas de registro que informen fallas cuando se actualiza un bucket de registros. Estas consultas se usan con el Explorador de registros.

En la consola de Google Cloud , ve a la página Explorador de registros del :

Ir al Explorador de registros

Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.

Consulta todas las actualizaciones o mejoras de bucket con errores en un proyecto

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

Si usas la consola de Google Cloud para actualizar tu bucket de registros para usar Estadísticas de observabilidad y crear un conjunto de datos de BigQuery vinculado, usa la siguiente consulta:

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

Los resultados de la consulta anterior incluyen entradas de registro que indican que falló la creación del conjunto de datos de BigQuery vinculado. El mensaje de error puede ayudarte a resolver la causa de la falla.

Consulta las actualizaciones o mejoras con errores de un bucket específico

Antes de usar la siguiente consulta, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el ID de tu proyecto.
  • LOCATION_ID: Es la ubicación de tu bucket.
  • LOG_BUCKET_ID: Es el ID de tu 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

Consulta las fallas de operaciones de larga duración

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)

El mensaje de error que se proporciona con un código de error INVALID_ARGUMENT (3) contiene información suficiente para que resuelvas la falla. Por este motivo, en esta sección no se enumeran todos los mensajes de error posibles.

Problemas con los nombres de los recursos

Para resolver problemas con los nombres de los recursos, pasa un nombre de recurso de bucket válido en el formato projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID.

Asegúrate de que la longitud del nombre del recurso esté dentro de los límites de longitud.

Problemas con la máscara de actualización

Un mensaje de error que contiene el texto update_mask o Update mask indica un valor faltante o con formato incorrecto.

Para resolver este problema, en el comando de la API, especifica update_mask y establece el valor en "analytics_enabled".

Problemas de elegibilidad de bucket de registros

  • No puedes actualizar un bucket de registros _Default bloqueado ni buckets personalizados bloqueados. Puedes actualizar el bucket _Required mientras está bloqueado.

    Cuando un bucket de registros está bloqueado, el mensaje de error es "Bucket is not eligible for an upgrade to enable analytics".

    Para resolver esta falla, crea un bucket nuevo habilitado para las estadísticas y enruta los registros a él.

  • No puedes actualizar un bucket de registros al mismo tiempo que realizas otros cambios en él. Por ejemplo, no puedes actualizar un bucket de registros y actualizar su descripción.

    Para resolver este error, envía una solicitud UpdateBucket o UpdateBucketAsync independiente con solo analytics_enabled en update_mask y actualiza otros campos del bucket de registros en una solicitud independiente.

  • No puedes actualizar los buckets de registros en organizaciones, carpetas ni cuentas de facturación. Solo puedes actualizar los buckets de registros cuyo elemento superior sea un proyecto de Google Cloud .

  • No puedes actualizar un bucket de registros que ya se actualizó o que se está actualizando.

    Usa GetBucket o ListOperations para determinar si una actualización ya se completó o está en curso.

Problemas con las claves de Cloud KMS

Mensajes de error:

  • "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]"

Resolución: Actualiza el cmek_settings.kms_key_name del bucket de registros a un nombre de recurso CryptoKey de Cloud KMS válido antes de actualizar el bucket. Debes actualizar el nombre del recurso, no la versión de la clave, CryptoKeyVersion.

Mensaje de argumento no válido

Si ves el mensaje "Request contains an invalid argument.", prueba lo siguiente para los buckets de registros con CMEK habilitadas:

  • Asegúrate de que se inicialice la cuenta de servicio de Logging asociada con la configuración de CMEK del bucket.
  • Asegúrate de que el bucket tenga un período de retención positivo.

Para encontrar el nombre de la cuenta de servicio, ejecuta el siguiente comando después de actualizar el bucket de registros, la ubicación y los IDs del proyecto:

gcloud logging buckets describe LOG_BUCKET_ID --location=LOCATION_ID --project=PROJECT_ID

La cuenta de servicio puede estar en un proyecto, una carpeta o una organización.

DEADLINE_EXCEEDED (4)

Usa UpdateBucketAsync y sondea la operación de larga duración que se muestra con el método Operations.GetOperation, o llama a GetBucket después de que finalice la actualización en segundo plano.

NOT_FOUND (5)

Para resolver estos errores, intenta lo siguiente:

  • Verifica que el ID del proyecto o el número del proyecto sean correctos y que el proyecto esté activo. Si el proyecto está pendiente de eliminación, restablécelo primero.
  • Asegúrate de que Logging admita la ubicación especificada.
  • Verifica que el ID de bucket de registros y la ubicación existan en el proyecto y que el bucket de destino no sea _CloudTrace.

PERMISSION_DENIED (7)

Un error de permiso denegado indica que no se permite la acción solicitada.

Faltan permisos del usuario

Para actualizar un bucket de registros, asegúrate de que el emisor tenga un rol de Identity and Access Management (IAM) que incluya el permiso logging.buckets.update (como roles/logging.configWriter o roles/logging.admin) y verifica que ninguna política de la organización personalizada bloquee la actualización.

Restricciones de las políticas de la organización

Para resolver el mensaje de error "Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: [ID]", asegúrate de que el perímetro de los Controles del servicio de VPC no restrinja el servicio logging.googleapis.com. Para obtener más información, consulta Consideraciones sobre el perímetro de los Controles del servicio de VPC.

Problemas con los extremos regionales

Para resolver los errores de permiso denegado cuando se especifican extremos regionales, envía la solicitud al extremo global (logging.googleapis.com) o al extremo regional que coincida con la ubicación del bucket de registros.

RESOURCE_EXHAUSTED (8)

Para resolver este error, espera a que finalicen las operaciones de aprovisionamiento en curso y vuelve a intentarlo con una retirada exponencial.

FAILED_PRECONDITION (9)

Para resolver estos errores, intenta lo siguiente:

  • Verifica que el bucket de registros esté en el estado ACTIVE. No puedes actualizar un bucket de registros que se está borrando o que se está actualizando o aprovisionando.

    Para obtener información sobre cómo determinar el estado de un bucket de registros, consulta Estado del bucket de registros durante una actualización.

  • No puedes actualizar un bucket de registros bloqueado.

  • El mensaje genérico "Precondition check failed." indica que el estado del bucket no es ACTIVE. Espera hasta que se completen las operaciones en curso y, luego, vuelve a intentar la actualización.

INTERNAL (13)

Mensajes de error:

  • Operación de larga duración (Operations.GetOperation): "Failed to create analytics enabled bucket."
  • Registros de auditoría de Cloud y UpdateBucket síncronos: "Internal error encountered."

Resolución: Prueba lo siguiente:

  • En el caso de un bucket de registros habilitado para CMEK, verifica que la clave de Cloud KMS esté habilitada, que la cuenta de servicio de Logging asociada con la configuración de CMEK del bucket tenga el rol roles/cloudkms.cryptoKeyEncrypterDecrypter en la clave, que BigQuery pueda acceder a la clave y que ninguna política de la organización ni perímetro de Controles del servicio de VPC bloqueen el acceso a Cloud KMS.

    Para encontrar el nombre de la cuenta de servicio, ejecuta el siguiente comando:

    gcloud logging buckets describe LOG_BUCKET_ID --location=LOCATION_ID --project=PROJECT_ID
    

    La cuenta de servicio puede estar en un proyecto, una carpeta o una organización.

  • Inspecciona las vistas de registro existentes en el bucket (logging.views.list) para asegurarte de que sus filtros sean válidos y vuelve a intentar la actualización del bucket.

  • Asegúrate de que no se haya borrado el bucket de registros (DELETE_REQUESTED) y de que no se esté produciendo ninguna acción administrativa en conflicto en el bucket. Luego, vuelve a intentar la actualización.

  • Vuelve a intentar actualizar el bucket de registros después de que se resuelvan los errores transitorios de creación del conjunto de datos de almacenamiento de BigQuery o del índice de búsqueda, o una vez que se restablezca la disponibilidad del servicio de aprovisionamiento, Cloud KMS o BigQuery downstream. Si la falla persiste, comunícate con Atención al cliente de Cloud.

UNAVAILABLE (14)

Si ves el mensaje "The service is currently unavailable.", vuelve a intentar la solicitud UpdateBucketAsync con una retirada exponencial.