Registro de Cloud para operaciones por lotes de almacenamiento

En esta página se describe cómo configurar y ver los registros de operaciones por lotes de almacenamiento mediante Cloud Logging. Un trabajo de operaciones por lotes de almacenamiento se puede configurar para generar entradas de registro de Cloud Logging para cada trabajo de transformación. Cada entrada de registro corresponde a la transformación intentada de un objeto.

Las operaciones por lotes de almacenamiento admiten el registro tanto en Cloud Logging como en los registros de auditoría de Cloud de Cloud Storage. Aunque ambas opciones registran las acciones de las operaciones por lotes de almacenamiento, le recomendamos que utilice Cloud Logging. Cloud Logging proporciona una plataforma centralizada para el análisis de registros, la monitorización en tiempo real y el filtrado avanzado, lo que ofrece una solución sólida para gestionar y comprender la actividad de las operaciones por lotes.

Antes de empezar

Verifica que tienes acceso a Cloud Logging. Para usar Cloud Logging, te recomendamos que concedas el rol de Logs Viewer (roles/logging.viewer) Gestión de Identidades y Accesos. El rol Logs Viewer (roles/logging.viewer) Gestión de Identidades y Accesos proporciona los permisos de Gestión de Identidades y Accesos necesarios para ver tus datos de Cloud Logging. Para obtener más información sobre los permisos de acceso de Logging, consulta Control de acceso con gestión de identidades y accesos.

Para verificar y conceder los permisos de gestión de identidades y accesos, sigue estos pasos:

Interpretar los detalles de los registros

Cuando el registro está habilitado, las operaciones por lotes de almacenamiento registran los siguientes detalles:

  • Acción registrable: el valor de la acción registrable siempre es transform.

  • Estados registrables: en cada acción, puedes registrar uno o ambos de los siguientes estados:

    • SUCCEEDED: la acción se ha realizado correctamente.
    • FAILED: no se ha podido realizar la acción.

Activar el almacenamiento de registros

Para habilitar el registro, especifica las acciones y los estados que se deben registrar.

Línea de comandos

Cuando crees una tarea de operaciones por lotes de almacenamiento con gcloud storage batch-operations jobs create, usa las marcas --log-actions y --log-action-states para habilitar el registro.

gcloud storage batch-operations jobs create JOB_NAME \
  --manifest-location=MANIFEST_LOCATION \
  --delete-object \
  --log-actions=transform \
  --log-action-states=LOG_ACTION_STATES

Donde:

  • JOB_NAME es el nombre que quieres dar al trabajo. Por ejemplo, my-job.
  • MANIFEST_LOCATION es la ubicación de tu manifiesto. Por ejemplo, gs://my-bucket/manifest.csv.
  • LOG_ACTION_STATES es una lista separada por comas de estados que se van a registrar. Por ejemplo, succeeded,failed.

API REST

Create a storage batch operations job con un LoggingConfig.

{
   "loggingConfig": {
      "logActions": ["TRANSFORM"],
      "logActionStates": ["LOG_ACTION_STATES"],
        }
}

Donde:

LOG_ACTION_STATES es una lista de estados separada por comas que se registrará. Por ejemplo, "SUCCEEDED","FAILED".

Ver registros

Para ver los registros de las operaciones por lotes de almacenamiento, sigue estos pasos:

Consola

  1. Ve al Google Cloud menú de navegación y selecciona Registro > Explorador de registros :<br\></br\>

    Ir al Explorador de registros

  2. Selecciona un Google Cloud proyecto.

  3. En el menú Actualizar, cambia de Visualizador de registros antiguo a Explorador de registros.

  4. Para filtrar los registros y mostrar solo las entradas de operaciones por lotes de almacenamiento, escribe storage_batch_operations_job en el campo de consulta y haz clic en Ejecutar consulta.

  5. En el panel Resultados de la consulta, haga clic en Editar hora para cambiar el periodo del que quiere obtener resultados.

Para obtener más información sobre cómo usar el Explorador de registros, consulta el artículo Usar el Explorador de registros.

Línea de comandos

Para usar la CLI de gcloud y buscar registros de operaciones por lotes de almacenamiento, usa el comando gcloud logging read.

Especifica un filtro para limitar los resultados a los registros de operaciones por lotes de almacenamiento.

gcloud logging read "resource.type=storage_batch_operations_job"

API REST

Usa el método de la API entries.list Cloud Logging.

Para filtrar los resultados e incluir solo las entradas relacionadas con operaciones por lotes de almacenamiento, usa el campo filter. A continuación se muestra un objeto de solicitud JSON de ejemplo:

{
"resourceNames":
  [
    "projects/my-project-name"
  ],
  "orderBy": "timestamp desc",
  "filter": "resource.type=\"storage_batch_operations_job\""
}

Donde:

my-project-name es el nombre de tu proyecto.

Formato de registro de operaciones por lotes de almacenamiento

Todos los campos específicos de las operaciones por lotes de almacenamiento se encuentran en un objeto jsonPayload. Aunque el contenido exacto de jsonPayload varía en función del tipo de trabajo, hay una estructura común a todas las entradas de TransformActivityLog. En esta sección se describen los campos de registro comunes y, a continuación, se detallan los campos específicos de cada operación.

  • Campos de registro habituales

    Los siguientes campos aparecen en todos los registros:

    jsonPayload: {
    "@type": "type.googleapis.com/google.cloud.storagebatchoperations.logging.TransformActivityLog",
    "completeTime": "YYYY-MM-DDTHH:MM:SS.SSSSSSSSSZ",
    "status": {
      "errorMessage": "String indicating error",
      "errorType": "ENUM_VALUE",
      "statusCode": "ENUM_VALUE"
    },
    "logName": "projects/PROJECT_ID/logs/storagebatchoperations.googleapis.com%2Ftransform_activity",
    "receiveTimestamp": "YYYY-MM-DDTHH:MM:SS.SSSSSSSSSZ",
    "resource": {
      "labels": {
        "location":"us-central1",
        "job_id": "BATCH_JOB_ID",
        "resource_container": "RESOURCE_CONTAINER",
        // ... other labels
      },
      "type": "storagebatchoperations.googleapis.com/Job"
    },
    // Operation-specific details will be nested here (for example,
    // "DeleteObject", "PutObjectHold", "RewriteObject", "PutMetadata")
    // Each operation-specific object will also contain the following
    // object: "objectMetadataBefore": {
    //   "gcsObject": {
    //     "bucket": "BUCKET_NAME",
    //     "generation": "GENERATION_NUMBER",
    //     "objectKey": "OBJECT_PATH"
    //   }
    // }
    }
    

    En la siguiente tabla se describen los campos de registro habituales:

    Campos de registro comunes Tipo Descripción
    @type Cadena Especifica el tipo de carga útil de la entrada de registro e indica que el registro representa un TransformActivityLog para las operaciones por lotes de almacenamiento.
    completeTime Marca de tiempo Marca de tiempo conforme a ISO 8601 en la que se completó la operación.
    status Objeto Proporciona información sobre el resultado de la actividad de la operación por lotes.
    status.errorMessage Cadena Un mensaje de error si la operación falla. El mensaje de error solo aparece si el valor de status.statusCode no es OK.
    status.errorType Cadena El tipo de error. El tipo de error solo aparece si el valor de status.statusCode no es OK.
    status.statusCode Cadena El código de estado de la operación. La operación se realiza correctamente si el valor es OK. Cualquier otro valor indica que se ha producido un error.
    logName Cadena Nombre de recurso completo del registro, que indica el proyecto y el flujo de registro.
    receiveTimestamp Marca de tiempo Marca de tiempo que indica cuándo recibió el sistema de registro la entrada de registro.
    resource Objeto Información sobre el recurso que ha generado la entrada de registro.
    resource.labels Objeto Pares clave-valor que proporcionan información de identificación adicional sobre el recurso.
    resource.type Cadena El tipo de recurso que ha generado el registro.
    objectMetadataBefore Objeto Contiene los metadatos del objeto antes de que se intentara realizar la operación por lotes.
    objectMetadataBefore.gcsObject Objeto Detalles sobre el objeto.
    objectMetadataBefore.gcsObject.bucket Cadena Nombre del segmento en el que se encuentra el objeto.
    objectMetadataBefore.gcsObject.generation Cadena Número de generación del objeto antes de la operación.
    objectMetadataBefore.gcsObject.objectKey Cadena Ruta completa del objeto en el segmento.
  • Contenido jsonPayload específico de la operación

    La diferencia entre las entradas de registro de las distintas operaciones por lotes radica en el objeto de nivel superior anidado en jsonPayload. En una entrada de registro determinada solo está disponible uno de los siguientes objetos, que corresponde a la operación por lotes específica que se ha realizado:

    • Eliminar objeto (DeleteObject)

      jsonPayload:
      {
      "DeleteObject": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        }
        }
      }
      
    • Retención de objeto (PutObjectHold)

      jsonPayload:
      {
      "PutObjectHold": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        },
        "temporaryHoldAfter": True,
        "eventBasedHoldAfter": True
      }
      }
      
    • Objeto de reescritura (RewriteObject)

      jsonPayload:
      {
      "RewriteObject": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        },
        "kmsKeyVersionAfter": "projects/my-gcp-project/locations/us-central1/keyRings/my-keyring-01/cryptoKeys/my-encryption-key/cryptoKeyVersions/1"
      }
      }
      
    • Poner metadatos (PutMetadata)

      jsonPayload:
      {
      "PutMetadata": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        },
        "content_disposition_after": "attachment; filename=\"report_final.pdf\"",
        "content_encoding_after": "gzip",
        "content_language_after": "en-US",
        "content_type_after": "application/pdf",
        "cache_control_after": "public, max-age=3600",
        "custom_time_after": "2025-06-27T10:00:00Z",
        "custom_metadata_after": {
          "project": "marketing",
          "version": "2.0",
          "approvedBy": "Admin"
        }
      }
      }
      

    En la siguiente tabla se describen los campos de registro específicos de la operación:

    Campos de registro específicos de la operación Tipo Descripción
    PutObjectHold Objeto Indica una operación de retención en un objeto.
    PutObjectHold.temporaryHoldAfter Booleano Si el valor es True, indica que se ha aplicado una retención temporal al objeto después de que se haya completado el trabajo de operaciones por lotes de almacenamiento. Los valores válidos son True y False.
    PutObjectHold.eventBasedHoldAfter Booleano Si el valor es True, indica que se ha aplicado una retención basada en eventos al objeto después de que se haya completado el trabajo de operaciones por lotes de almacenamiento. Los valores válidos son True y False.
    RewriteObject Objeto Indica una operación de reescritura en un objeto.
    RewriteObject.kmsKeyVersionAfter Cadena Versión de la clave de Cloud Key Management Service utilizada después del trabajo de reescritura. El campo kmsKeyVersionAfter se rellena si la clave de cifrado del objeto ha cambiado como resultado de la reescritura. Es un campo opcional, lo que significa que puede que no esté presente si la versión de la clave de Cloud KMS no ha cambiado después de la reescritura.
    PutMetadata Objeto Indica una operación de actualización de metadatos en un objeto.
    PutMetadata.content_disposition_after Cadena Especifica el valor del encabezado Content-Disposition una vez completada la tarea PutMetadata. Es un campo opcional que solo se rellena si se ha definido o modificado la disposición del contenido.
    PutMetadata.content_encoding_after Cadena Especifica el valor del encabezado Content-Encoding una vez completada la tarea PutMetadata. Es un campo opcional que solo se rellena si se ha definido o modificado la codificación del contenido.
    PutMetadata.content_language_after Cadena Especifica el valor del encabezado Content-Language una vez completada la tarea PutMetadata. Es un campo opcional que solo se rellena si se ha definido o modificado el idioma del contenido.
    PutMetadata.content_type_after Cadena Especifica el valor del encabezado Content-Type una vez completada la tarea PutMetadata. Es un campo opcional que solo se rellena si se ha definido o modificado el tipo de contenido.
    PutMetadata.cache_control_after Cadena Especifica el valor del encabezado Cache-Control después de completar la tarea PutMetadata. Es un campo opcional y solo se rellena si se ha definido o modificado el control de caché.
    PutMetadata.custom_time_after Cadena Especifica el valor del encabezado Custom-Time después de completar la tarea PutMetadata. Es un campo opcional y solo se rellena si se ha definido o modificado la hora personalizada.
    PutMetadata.custom_metadata_after Map (clave: cadena, valor: cadena) Contiene un mapa de pares clave-valor Custom- Metadata después de la transformación. Este campo incluye los metadatos definidos por el usuario que se hayan definido o modificado en el objeto. Permite almacenar metadatos adicionales de forma flexible.