Registros de uso y de almacenamiento

En este documento se explica cómo descargar y revisar los registros de uso y la información de almacenamiento de tus segmentos de Cloud Storage, así como analizar los registros con Google BigQuery.

Introducción

Cloud Storage ofrece registros de uso y de almacenamiento en forma de archivos CSV que puedes descargar y consultar. Los registros de uso proporcionan información sobre todas las solicitudes realizadas en un segmento concreto y se crean cada hora. Los registros de almacenamiento proporcionan información sobre el consumo de almacenamiento de ese segmento durante el último día y se crean a diario.

Una vez configurados, se generan automáticamente registros de uso y de almacenamiento para el segmento especificado, y se almacenan como objetos nuevos en un segmento que indiques.

Los registros de uso y de almacenamiento están sujetos a los mismos precios que otros objetos almacenados en Cloud Storage.

¿Deberías usar registros de uso o registros de auditoría de Cloud?

En la mayoría de los casos, Registros de auditoría de Cloud es el método recomendado para generar registros que monitoricen las operaciones de la API realizadas en Cloud Storage:

  • Registros de auditoría de Cloud monitoriza el acceso de forma continua y envía los eventos pocos segundos después de que se produzcan.
  • Registros de auditoría de Cloud genera registros con los que es más fácil trabajar.
  • Cloud Audit Logs puede monitorizar muchos de tus Google Cloud servicios, no solo Cloud Storage.
  • Cloud Audit Logs puede registrar información detallada sobre las solicitudes y las respuestas de forma opcional.

En algunos casos, puede que quieras usar registros de uso en lugar de registros de auditoría de Cloud o además de ellos. Lo más probable es que quieras usar los registros de uso si:

  • Quieres monitorizar el acceso que se produce porque un recurso tiene allUsers o allAuthenticatedUsers en su configuración de control de acceso, como el acceso a recursos de un contenedor que has configurado para que sea un sitio web estático.
  • Quieres monitorizar los cambios realizados por las funciones Administración del ciclo de vida de los objetos o Autoclass.
  • Quieres que tus registros incluyan información sobre la latencia, el tamaño de la solicitud y la respuesta de las solicitudes HTTP individuales, o la ruta de URL completa y todos los parámetros de consulta.
  • Solo quieres monitorizar el acceso a determinados segmentos de tu proyecto, por lo que no quieres habilitar los registros de auditoría de acceso a los datos, que monitorizan el acceso a todos los segmentos de tu proyecto.

Ten en cuenta que los registros de uso solo se generan cada hora y pueden sufrir retrasos, sobre todo cuando se trata de los segmentos que experimentan altas tasas de solicitudes.

¿Deberías usar los registros de almacenamiento o la monitorización?

Por lo general, no deberías usar registros de almacenamiento. La herramienta recomendada para medir el consumo de almacenamiento es Monitoring, que proporciona herramientas de visualización, así como métricas adicionales relacionadas con el consumo de almacenamiento que no se incluyen en los registros de almacenamiento. Consulta la pestaña Consola para determinar el tamaño de un contenedor para ver instrucciones detalladas sobre cómo usar Monitoring.

Configurar la entrega de registros

Antes de configurar el envío de registros, debes tener un contenedor para almacenarlos. Este cubo debe cumplir los siguientes requisitos; de lo contrario, se producirá un error en el registro:

  • El segmento que almacena los registros debe estar en la misma organización que el segmento del que se registran los datos.

    • Si el segmento del que se registran datos no está incluido en ninguna organización, el segmento que almacena los registros debe estar en el mismo proyecto que el segmento del que se registran datos.
  • Si usas o habilitas Controles de Servicio de VPC, el cubo que almacena los registros debe estar en el mismo perímetro de seguridad que el cubo del que se están registrando los datos.

Si aún no tienes un contenedor que cumpla estos requisitos, créalo.

En los siguientes pasos se describe cómo configurar la entrega de registros de un segmento:

Línea de comandos

  1. Asigna a Cloud Storage el rol roles/storage.objectCreator del segmento:

    gcloud storage buckets add-iam-policy-binding gs://example-logs-bucket --member=group:cloud-storage-analytics@google.com --role=roles/storage.objectCreator

    Este rol otorga a Cloud Storage, en forma de grupo cloud-storage-analytics@google.com, permiso para crear y almacenar tus registros como objetos nuevos.

    Los objetos de registro tienen la LCA de objeto predeterminada del segmento de registro, a menos que se haya habilitado el acceso uniforme a nivel de segmento en el segmento.

  2. Habilita el registro de tu segmento con la marca --log-bucket:

    gcloud storage buckets update gs://example-bucket --log-bucket=gs://example-logs-bucket [--log-object-prefix=log_object_prefix]

    También puede definir un prefijo de objeto para los objetos de registro mediante la marca --log-object-prefix. El prefijo de objeto forma el principio del nombre del objeto de registro. Puede tener 900 caracteres como máximo y debe ser un nombre de objeto válido. De forma predeterminada, el prefijo de objeto es el nombre del segmento para el que están habilitados los registros.

APIs REST

API JSON

  1. Asigna a Cloud Storage el rol roles/storage.objectCreator del segmento. Si hay enlaces de IAM adicionales a nivel de contenedor, asegúrese de incluirlos en la solicitud.

    POST /storage/v1/b/example-logs-bucket/iam
    Host: storage.googleapis.com
    {
      "bindings":[
        {
          "role": "roles/storage.objectCreator",
          "members":[
            "group-cloud-storage-analytics@google.com"
          ]
        }
      ]
    }

    Este rol otorga a Cloud Storage, en forma de grupo cloud-storage-analytics@google.com, permiso para crear y almacenar tus registros como objetos nuevos.

    Los objetos de registro tienen la LCA de objeto predeterminada del segmento de registro, a menos que se haya habilitado el acceso uniforme a nivel de segmento en el segmento.

  2. Habilita el registro de tu segmento con la siguiente solicitud:

    PATCH /storage/v1/b/example-bucket
    Host: storage.googleapis.com
    
    {
     "logging": {
      "logBucket": "example-logs-bucket",
      "logObjectPrefix": "log_object_prefix"
     }
    }

API XML

  1. Define los permisos para permitir que Cloud Storage tenga permiso WRITE en el segmento para crear y almacenar tus registros como objetos nuevos. Debe añadir una entrada de ACL para el segmento que conceda al grupo cloud-storage-analytics@google.com acceso de escritura. Asegúrate de incluir en la solicitud todas las LCAs del segmento, además de la nueva.

    PUT /example-logs-bucket?acl HTTP/1.1
    Host: storage.googleapis.com
    
    <AccessControlList>
      <Entries>
        <Entry>
          <Scope type="GroupByEmail">
            <EmailAddress>cloud-storage-analytics@google.com</EmailAddress>
          </Scope>
         <Permission>WRITE</Permission>
        </Entry>
        <!-- include other existing ACL entries here-->
      </Entries>
    </AccessControlList>
    
  2. Habilita el registro de tu segmento con el parámetro de consulta logging:

    PUT /example-bucket?logging HTTP/1.1
    Host: storage.googleapis.com
    
    <Logging>
        <LogBucket>example-logs-bucket</LogBucket>
        <LogObjectPrefix>log_object_prefix</LogObjectPrefix>
    </Logging>
    

Comprobar el estado del registro

Línea de comandos

Para comprobar el registro, usa el comando buckets describe con la marca --format:

gcloud storage buckets describe gs://example-bucket --format="default(logging_config)"

También puedes guardar las configuraciones de creación de registros en un archivo:

gcloud storage buckets describe gs://example-bucket > your_logging_configuration_file --format="default(logging_config)"

Si el registro está habilitado, el servidor devuelve la configuración de registro en la respuesta:

logging:
  logBucket: example-logs-bucket
  logObjectPrefix: log_object_prefix

Si el registro no está habilitado, se devuelve lo siguiente:

null

APIs REST

API JSON

Envía una solicitud GET para obtener la configuración de registro del contenedor, tal como se muestra en el siguiente ejemplo:

GET /storage/v1/b/example-bucket?fields=logging
Host: storage.googleapis.com

Si el registro está habilitado, el servidor envía la configuración en la respuesta. Una respuesta puede tener un aspecto similar a este:

{
 "logging": {
  "logBucket": "example-logs-bucket",
  "logObjectPrefix": "log_object_prefix"
  }
}

Si el registro no está habilitado, se devuelve una configuración vacía:

{}

API XML

Envía una solicitud GET Bucket para obtener la configuración de registro del contenedor, tal como se muestra en el siguiente ejemplo:

GET /example-bucket?logging HTTP/1.1
Host: storage.googleapis.com

Si el registro está habilitado, el servidor envía la configuración en la respuesta. Una respuesta puede tener un aspecto similar a este:

<?xml version="1.0" ?>
<Logging>
    <LogBucket>
        example-logs-bucket
    </LogBucket>
    <LogObjectPrefix>
        log_object_prefix
    </LogObjectPrefix>
</Logging>

Si el registro no está habilitado, se devuelve una configuración vacía:

<?xml version="1.0" ?>
<Logging/>

Descargar registros

Los registros de almacenamiento se generan una vez al día y contienen la cantidad de almacenamiento utilizada el día anterior. Normalmente, se crean antes de las 10:00 (PST).

Los registros de uso se generan cada hora cuando hay actividad que registrar en el cubo monitorizado. Los registros de uso suelen crearse 15 minutos después de que termine la hora.

La forma más sencilla de descargar los registros de uso y de almacenamiento del bucket en el que se almacenan es a través de la Google Cloud consola o de la gcloud storageCLI. Los registros de uso están en formato CSV y siguen la siguiente convención de nomenclatura:

OBJECT_PREFIX_usage_TIMESTAMP_ID_v0

Del mismo modo, los registros de almacenamiento se denominan siguiendo la siguiente convención:

OBJECT_PREFIX_storage_TIMESTAMP_ID_v0

Por ejemplo, este es el nombre de un objeto de registro de uso que usa el prefijo de objeto predeterminado, informa del uso del bucket llamado example-bucket y se creó el 18 de junio del 2022 a las 14:00 UTC:

example-bucket_usage_2022_06_18_14_00_00_1702e6_v0

Del mismo modo, este es el nombre del objeto de registro de almacenamiento que usa el prefijo de objeto predeterminado y se creó el 18 de junio del 2022 para el mismo cubo:

example-bucket_storage_2022_06_18_07_00_00_1702e6_v0

Para descargar los registros, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.

    Ir a Contenedores

  2. Selecciona el segmento en el que se almacenan tus registros.

  3. Para descargar o ver los registros, haga clic en el objeto de registro correspondiente.

Línea de comandos

Ejecuta el siguiente comando:

gcloud storage cp gs://BUCKET_NAME/LOGS_OBJECT DESTINATION

Donde:

  • BUCKET_NAME es el nombre del segmento en el que se almacenan los registros. Por ejemplo, example-logs-bucket.

  • LOGS_OBJECT es el nombre del registro de uso o del registro de almacenamiento que estás descargando. Por ejemplo, example-bucket_usage_2022_06_18_14_00_00_1702e6_v0.

  • DESTINATION es la ubicación en la que se está descargando el registro. Por ejemplo, Desktop/Logs.

Analizar registros en BigQuery

Para consultar el uso de Cloud Storage y los registros de almacenamiento, puede usar Google BigQuery, que permite hacer consultas rápidas similares a SQL en tablas de solo anexión. La herramienta de línea de comandos de BigQuery, bq, es una herramienta basada en Python que te permite acceder a BigQuery desde la línea de comandos. Para obtener información sobre cómo descargar y usar bq, consulta la página de referencia de la herramienta de línea de comandos bq.

Cargar registros en BigQuery

  1. Selecciona un proyecto predeterminado.

    Para obtener más información sobre cómo seleccionar un proyecto, consulta el artículo Trabajar con proyectos.

  2. Crea un conjunto de datos.

    $ bq mk storageanalysis
    Dataset 'storageanalysis' successfully created.
    
  3. Muestra los conjuntos de datos del proyecto:

    $ bq ls
     
    datasetId
    -----------------
    storageanalysis
    
  4. Guarda los esquemas de uso y almacenamiento en tu ordenador local para usarlos en el comando load.

    Puedes encontrar los esquemas que se van a usar en estas ubicaciones: cloud_storage_usage_schema_v0 y cloud_storage_storage_schema_v0. Los esquemas también se describen en la sección Formato de los registros de uso y almacenamiento.

  5. Carga los registros de uso en el conjunto de datos.

    $ bq load --skip_leading_rows=1 storageanalysis.usage \
          gs://example-logs-bucket/example-bucket_usage_2014_01_15_14_00_00_1702e6_v0 \
          ./cloud_storage_usage_schema_v0.json
    $ bq load --skip_leading_rows=1 storageanalysis.storage \
          gs://example-logs-bucket/example-bucket_storage_2014_01_05_14_00_00_091c5f_v0 \
          ./cloud_storage_storage_schema_v0.json
    

    Estos comandos hacen lo siguiente:

    • Carga los registros de uso y de almacenamiento del segmento example-logs-bucket.
    • Crea las tablas usage y storage en el conjunto de datos storageanalysis.
    • Lee los datos de esquema (archivo .json) del mismo directorio en el que se ejecuta el comando bq.
    • Omita la primera fila de cada archivo de registro, ya que contiene descripciones de las columnas.

    Como es la primera vez que ejecutas el comando de carga en este ejemplo, se han creado las tablas usage y storage. Podrías seguir añadiendo datos a estas tablas con comandos de carga posteriores con nombres de archivo de registro de uso diferentes o usando comodines. Por ejemplo, el siguiente comando añade datos de todos los registros que empiezan por "bucket_usage_2014" a la tabla storage:

    $ bq load --skip_leading_rows=1 storageanalysis.usage \
          gs://example-logs-bucket/bucket_usage_2014* \
          ./cloud_storage_usage_schema_v0.json
    

    Cuando uses comodines, puede que quieras mover los registros que ya se hayan subido a BigQuery a otro directorio (por ejemplo, gs://example-logs-bucket/processed) para evitar subir datos de un registro más de una vez.

También se puede acceder a las funciones de BigQuery a través de la herramienta de navegador de BigQuery. Con la herramienta del navegador, puede cargar datos mediante el proceso de creación de tablas.

Para obtener más información sobre cómo cargar datos desde Cloud Storage, incluida la carga de datos mediante programación, consulta el artículo Cargar datos desde Cloud Storage.

Modificar el esquema del registro de uso

En algunos casos, puede ser útil preprocesar los registros de uso antes de cargarlos en BigQuery. Por ejemplo, puedes añadir información adicional a los registros de uso para facilitar el análisis de las consultas en BigQuery. En esta sección, te mostraremos cómo puedes añadir el nombre de archivo de cada registro de uso del almacenamiento al registro. Para ello, es necesario modificar el esquema y cada archivo de registro.

  1. Modifica el esquema cloud_storage_storage_schema_v0 para añadir el nombre de archivo, tal como se muestra a continuación. Asigna un nombre al nuevo esquema, por ejemplo, cloud_storage_storage_schema_custom.json, para distinguirlo del original.

    [  {"name": "bucket", "type": "string", "mode": "REQUIRED"},
    {"name": "storage_byte_hours","type": "integer","mode": "REQUIRED"},
    {"name": "filename","type": "string","mode": "REQUIRED"}
    ]
    
  2. Preprocesa los archivos de registro de uso del almacenamiento según el nuevo esquema antes de cargarlos en BigQuery.

    Por ejemplo, los siguientes comandos se pueden usar en un entorno Linux, macOS o Windows (Cygwin):

    gcloud storage cp gs://example-logs-bucket/example-bucket_storage\* .
    for f in example-bucket_storage\*; do sed -i -e "1s/$/,\"filename\"/" -e "2s/$/,\""$f"\"/" $f; done
    

    El comando gcloud storage copia los archivos en tu directorio de trabajo. El segundo comando recorre los archivos de registro y añade "filename" a la fila de descripción (primera fila) y el nombre de archivo real a la fila de datos (segunda fila). A continuación se muestra un ejemplo de un archivo de registro modificado:

    "bucket","storage_byte_hours","filename"
    "example-bucket","5532482018","example-bucket_storage_2014_01_05_08_00_00_021fd_v0"
    
  3. Cuando cargues los registros de uso del almacenamiento en BigQuery, carga los registros modificados localmente y usa el esquema personalizado.

    for f in example-bucket_storage\*; \
    do ./bq.py load --skip_leading_rows=1 storageanalysis.storage $f ./cloud_storage_storage_schema_custom.json; done
    

Consultar registros en BigQuery

Una vez que los registros se hayan cargado en BigQuery, puede consultar los registros de uso para obtener información sobre los cubos registrados. En el siguiente ejemplo se muestra cómo usar la herramienta bq en un caso práctico en el que tienes registros de uso de un cubo durante varios días y los has cargado tal como se indica en Cargar registros de uso en BigQuery. También puedes ejecutar las consultas que se indican a continuación con la herramienta de navegador de BigQuery.

  1. En la herramienta bq, accede al modo interactivo.

    $ bq shell
    
  2. Ejecuta una consulta en la tabla de registro de almacenamiento.

    Por ejemplo, la siguiente consulta muestra cómo cambia el almacenamiento de un segmento registrado a lo largo del tiempo. Se presupone que ha modificado los registros de uso del almacenamiento tal como se describe en Modificar el esquema del registro de uso y que los archivos de registro se denominan "logstorage*".

    project-name>SELECT SUBSTRING(filename, 13, 10) as day, storage_byte_hours/24 as size FROM [storageanalysis.storage] ORDER BY filename LIMIT 100
    

    Ejemplo de resultado de la consulta:

    Waiting on bqjob_r36fbf5c164a966e8_0000014379bc199c_1 ... (0s) Current status: DONE
    +------------+----------------------+
    |    day     |         size         |
    +------------+----------------------+
    | 2014_01_05 | 2.3052008408333334E8 |
    | 2014_01_06 | 2.3012297245833334E8 |
    | 2014_01_07 | 3.3477797120833334E8 |
    | 2014_01_08 | 4.4183686058333334E8 |
    +-----------------------------------+
    

    Si no has modificado el esquema y estás usando el predeterminado, puedes ejecutar la siguiente consulta:

    project-name>SELECT storage_byte_hours FROM [storageanalysis.storage] LIMIT 100
    
  3. Ejecuta una consulta en la tabla de registro de uso.

    Por ejemplo, la siguiente consulta muestra cómo resumir los métodos de solicitud que usan los clientes para acceder a los recursos del segmento registrado.

    project-name>SELECT cs_method, COUNT(*) AS count FROM [storageanalysis.usage] GROUP BY cs_method
    

    Ejemplo de resultado de la consulta:

    Waiting on bqjob_r1a6b4596bd9c29fb_000001437d6f8a52_1 ... (0s) Current status: DONE
    +-----------+-------+
    | cs_method | count |
    +-----------+-------+
    | PUT       |  8002 |
    | GET       | 12631 |
    | POST      |  2737 |
    | HEAD      |  2173 |
    | DELETE    |  7290 |
    +-----------+-------+
    
  4. Cierra el shell interactivo de la herramienta bq.

    project-name> quit
    

Inhabilitar el registro

Línea de comandos

Inhabilita el registro con la marca --clear-log-bucket en el comando buckets update:

gcloud storage buckets update gs://example-bucket --clear-log-bucket

Para comprobar que el registro se ha inhabilitado correctamente, usa el comando buckets describe:

gcloud storage buckets describe gs://example-bucket --format="default(logging_config)"

Si el registro está inhabilitado, se devuelve lo siguiente:

null

APIs REST

API JSON

Para inhabilitar el registro, envía una solicitud PATCH a la configuración de registro del cubo, tal como se muestra en el siguiente ejemplo.

PATCH /example-bucket?logging HTTP/1.1
Host: storage.googleapis.com

{
 "logging": null
}

API XML

Para inhabilitar el registro, envía una solicitud PUT a la configuración de registro del bucket, como se muestra en el siguiente ejemplo:

PUT /example-bucket?logging HTTP/1.1
Host: storage.googleapis.com

<Logging/>

Formato de los registros de uso y almacenamiento

Los registros de uso y de almacenamiento pueden proporcionar una cantidad abrumadora de información. Puedes usar las siguientes tablas para identificar toda la información proporcionada en estos registros.

Campos de registro de uso:

Campo Tipo Descripción
time_micros entero La hora en la que finalizó la solicitud, en microsegundos desde la era Unix.
c_ip cadena La dirección IP desde la que se presentó la solicitud. El prefijo "c" indica que esta información se refiere al cliente.
c_ip_type entero El tipo de IP del campo c_ip:
  • El valor 1 indica una dirección IPv4.
  • El valor 2 indica una dirección IPv6.
c_ip_region cadena Reservado para uso futuro.
cs_method cadena El método HTTP de esta solicitud. El prefijo "cs" indica que la información se envió del cliente al servidor.
cs_uri cadena El URI de la solicitud.
sc_status entero El código de estado HTTP que el servidor envió como respuesta. El prefijo "sc" indica que la información se envió del servidor al cliente.
cs_bytes entero El número de bytes enviados en la solicitud.
sc_bytes entero El número de bytes enviados como respuesta.
time_taken_micros entero Tiempo que se ha tardado en atender la solicitud en microsegundos, medido desde que se recibe el primer byte hasta que se envía la respuesta. Ten en cuenta que, en el caso de las subidas reanudables, el punto final se determina mediante la respuesta a la solicitud de subida final que formaba parte de la subida reanudable.
cs_host cadena El host de la solicitud original.
cs_referer cadena El referente HTTP de la solicitud.
cs_user_agent cadena El user-agent de la solicitud. El valor es GCS Lifecycle Management para las solicitudes realizadas por la gestión del ciclo de vida.
s_request_id cadena El identificador de la solicitud.
cs_operation cadena La operación de Cloud Storage, por ejemplo, GET_Object. Puede ser nulo.
cs_bucket cadena El segmento especificado en la solicitud.
cs_object cadena El objeto especificado en la solicitud. Puede ser nulo.

Campos de registro de almacenamiento:

Campo Tipo Descripción
bucket cadena El nombre del depósito.
storage_byte_hours entero Tamaño medio en bytes-hora del segmento durante un periodo de 24 horas. Para obtener el tamaño total del contenedor, divide las horas-byte entre 24.