Registros de uso y almacenamiento

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

Introducción

Cloud Storage ofrece registros de uso y de almacenamiento en forma de archivos CSV que puedes descargar y ver. Los registros de uso proporcionan información para todas las solicitudes realizadas en un depósito especificado y se crean cada hora. Los registros de almacenamiento proporcionan información sobre el consumo de almacenamiento de ese depósito para el último día y se crean a diario. Una vez configurados, los registros de uso y de almacenamiento se crean de forma automática como objetos nuevos en el depósito que especifiques.

¿Se deben usar registros de uso o registros de auditoría de Cloud?

En la mayoría de los casos, se recomienda usar los registros de auditoría de Cloud para generar registros que rastreen las operaciones de API realizadas en Cloud Storage:

  • Los registros de auditoría de Cloud registran el acceso de forma continua.
  • Cloud Audit Logs produce registros con los que es más fácil trabajar.
  • Los registros de auditoría de Cloud pueden supervisar muchos de tus servicios de Google Cloud, no solo Cloud Storage.
  • De manera opcional, los registros de auditoría de Cloud pueden registrar información detallada de solicitudes y respuestas.

En algunos casos, es posible que prefieras usar los registros de uso. En particular, es preferible usarlos si ocurre lo siguiente:

  • Deseas realizar un seguimiento del acceso a objetos públicos, como los elementos de un depósito que hayas configurado como sitio web estático.
  • Deseas realizar un seguimiento de los cambios que se realizaron con la función Administración del ciclo de vida de los objetos.
  • Tienes la intención de usar descargas del navegador autenticadas para tener acceso a los objetos en el depósito.
  • Deseas que tus registros incluyan información de latencia o el tamaño de solicitud y respuesta de solicitudes HTTP individuales.

¿Se deben usar registros de almacenamiento o Monitoring?

En general, no debes usar registros de almacenamiento. La herramienta recomendada para medir el consumo de almacenamiento es Monitoring, que proporciona herramientas de visualización y métricas adicionales relacionadas con el consumo de almacenamiento que los registros de almacenamiento no ofrecen. Consulta Determina el tamaño de un depósito para obtener instrucciones paso a paso sobre el uso de Monitoring.

Configura la entrega de los registros

En los pasos a continuación, se describe cómo configurar la entrega de registros para un depósito específico con la herramienta de gsutil, la API de XML y la API de JSON. Si no tienes la herramienta de gsutil, puedes descargarla y, luego instalarla como parte del paquete SDK de Google Cloud o como un producto independiente.

gsutil

  1. Crea un depósito para almacenar tus registros con el siguiente comando:

    gsutil mb gs://example-logs-bucket
  2. Asigna a Cloud Storage la función roles/storage.legacyBucketWriter para el depósito:

    gsutil iam ch group:cloud-storage-analytics@google.com:legacyBucketWriter gs://example-logs-bucket

    Esta función le otorga permiso a Cloud Storage, en forma de alias cloud-storage-analytics@google.com, para crear y almacenar tus registros como objetos nuevos.

    Los objetos de registro tienen la LCA de objeto predeterminada del depósito de registros, a menos que el depósito tenga habilitado el acceso uniforme a nivel de depósito.

  3. Habilita el registro para tu depósito con el comando logging:

    gsutil logging set on -b gs://example-logs-bucket [-o log_object_prefix ] gs://example-bucket

    De manera opcional, puedes establecer un prefijo de objeto para tus objetos de registro mediante log_object_prefix. El prefijo del objeto es el comienzo del nombre del objeto de registro. Puede tener un máximo de 900 caracteres y debe ser un nombre de objeto válido. Según la configuración predeterminada, el prefijo del objeto es el nombre del depósito en el que están habilitados los registros.

API de XML

  1. Crea un depósito para almacenar tus registros con la siguiente solicitud:

    PUT /example-logs-bucket HTTP/1.1
    Host: storage.googleapis.com
    
  2. Establece permisos para otorgar el permiso WRITE de Cloud Storage al depósito a fin de crear y almacenar tus registros como objetos nuevos. Debes agregar una entrada de LCA para el depósito que otorga acceso de escritura grupal de cloud-storage-analytics@google.com. Asegúrate de incluir en la solicitud todas las LCA existentes del depósito, 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>
    
  3. Habilita el registro para tu depósito con el parámetro de búsqueda de registro:

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

API de JSON

  1. Crea un depósito para almacenar tus registros con la siguiente solicitud:

    POST /storage/v1/b?project=project-id
    Host: storage.googleapis.com
    
    {
      "name": "example-logs-bucket"
    }
    
  2. Asigna a Cloud Storage la función roles/storage.legacyBucketWriter para el depósito. Si en el depósito hay vinculaciones adicionales de IAM a nivel de depósito, asegúrate de incluirlas en la solicitud.

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

    Esta función le otorga permiso a Cloud Storage, en forma del alias cloud-storage-analytics@google.com, para crear y almacenar tus registros como objetos nuevos.

    Los objetos de registro tienen la LCA de objeto predeterminada del depósito de registros, a menos que el depósito tenga habilitado el acceso uniforme a nivel de depósito.

  3. Habilita el registro para tu depósito con la siguiente solicitud:

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

Verifica el estado del registro

gsutil

Con gsutil, puedes verificar el registro mediante el comando logging get:

gsutil logging get gs://example-bucket

También puedes guardar las configuraciones de registro en un archivo como se muestra a continuación:

gsutil logging get gs://example-bucket > your_logging_configuration_file

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

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

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

gs://example-bucket/ has no logging configuration.

API de XML

Con la API de XML de Cloud Storage, puedes enviar una solicitud de depósito GET para la configuración de registro del depósito, 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 ser similar a la que se muestra a continuación:

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

Si el registro no está habilitado, se muestra una configuración vacía como la siguiente:

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

API de JSON

Con la API de JSON de Cloud Storage, puedes enviar una solicitud GET para la configuración de registro del depósito 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 ser similar a la que se muestra a continuación:

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

Si el registro no está habilitado, se muestra una configuración vacía como la siguiente:

{
}

Descarga registros

Los registros de almacenamiento se generan una vez al día y contienen la cantidad de almacenamiento que se usó el día anterior. Por lo general, se crean antes de las 10:00 a.m. PST.

Los registros de uso se generan cada hora cuando hay actividad que informar en el depósito supervisado. Por lo general, se crean 15 minutos después del final de la hora.

La LCA controla el acceso a tus registros en los objetos de registro. Los objetos de registro tienen la LCA de objeto predeterminada del depósito de registros.

La forma más fácil de descargar los registros de uso y de almacenamiento es con Google Cloud Console o mediante la herramienta de gsutil. Los registros de uso están en formato CSV y tienen la siguiente convención de nombres:

gs://<bucket_name>/<object_prefix>_usage_<timestamp>_<id>_v0

Por ejemplo, la siguiente convención es un objeto de registros de uso de un depósito con el nombre gs://example-bucket, creado el 18 de junio de 2013 a las 14:00 UTC y almacenado en el depósito gs://example-logs-bucket:

gs://example-logs-bucket/example-bucket_usage_2013_06_18_14_00_00_1702e6_v0

Los registros de almacenamiento se nombran según la siguiente convención:

gs://<bucket_name>/<object_prefix>_storage_<timestamp>_<id>_v0

Por ejemplo, la siguiente convención es un objeto de registro de almacenamiento del mismo depósito realizado el 18 de junio de 2013:

gs://example-logs-bucket/example-bucket_storage_2013_06_18_07_00_00_1702e6_v0

Para descargar registros, realiza una de las siguientes acciones:

Console

  1. Abre el navegador de Cloud Storage en Google Cloud Console.
    Abrir el navegador de Cloud Storage
  2. Selecciona tu depósito de registro.

  3. Haz clic en el objeto de registro adecuado para descargar o ver tus registros.

gsutil

Ejecuta el siguiente comando:

gsutil cp <logs_object> <destination_uri>

Analiza registros en BigQuery

Para consultar los registros de uso y almacenamiento de Cloud Storage, puedes usar Google BigQuery, que habilita consultas rápidas similares a las de SQL en tablas que solo permiten anexar. 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 más información sobre cómo descargar y usar bq, consulta la página de referencia sobre la herramienta de línea de comandos bq.

Carga registros en BigQuery

  1. Selecciona un proyecto predeterminado.

    Para obtener más información sobre cómo seleccionar un proyecto, consulta cómo trabajar con proyectos.

  2. Crea un conjunto de datos nuevo.

    $ bq mk storageanalysis
    Dataset 'storageanalysis' successfully created.
    
  3. Haz una lista de los conjuntos de datos en el proyecto:

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

    Puedes encontrar los esquemas que se usarán 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 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
    

    Con estos comandos, realiza las siguientes acciones:

    • Carga los registros de uso y de almacenamiento del depósito example-logs-bucket.
    • Crea las tablas usage y storage en el conjunto de datos storageanalysis.
    • Lee los datos del esquema (archivo .json) desde el mismo directorio donde se ejecuta el comando de bq.
    • Omite la primera fila de cada archivo de registro debido a que contiene descripciones de columna.

    Como fue la primera vez que ejecutaste el comando de carga en este ejemplo, se crearon las tablas usage y storage. Podrías agregar datos a estas tablas con comandos de carga posteriores con nombres de archivos de registro de uso diferentes o mediante comodines. Por ejemplo, el siguiente comando agrega datos de todos los registros que comienzan con “bucket_usuage_2014” a la tabla storage:

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

    Cuando uses comodines, mueve a otro directorio los registros que ya se subieron a BigQuery (p. ej., gs://example-logs-bucket/processed) para evitar la carga de datos de un registro más de una vez.

También se puede acceder a la funcionalidad de BigQuery mediante la herramienta de navegación de BigQuery. Con la herramienta de navegación, puedes cargar datos a través del proceso de creación de tablas.

Para obtener información adicional sobre cómo cargar datos desde Cloud Storage, lo que incluye cargar datos de manera programática, consulta Carga datos desde Cloud Storage.

Modifica el esquema de registro de uso

En algunos casos, te puede resultar útil procesar con anterioridad los registros de uso antes de cargarlos a BigQuery. Por ejemplo, puedes agregar información adicional a los registros de uso para facilitar el análisis de consultas en BigQuery. En esta sección, se muestra como agregar el nombre del archivo de cada registro de uso de almacenamiento al registro. Esto requiere modificar el esquema existente y cada archivo de registro.

  1. Modifica el esquema existente, cloud_storage_storage_schema_v0, para agregar el nombre del archivo como se muestra a continuación. Asigna otro nombre al esquema nuevo, por ejemplo, cloud_storage_storage_schema_custom.json, para diferenciarlo del original.

    [  {"name": "bucket", "type": "string", "mode": "REQUIRED"},
    {"name": "storage_byte_hours","type": "integer","mode": "REQUIRED"},
    {"name": "filename","type": "string","mode": "REQUIRED"}
    ]
    
  2. Procesa de manera previa los archivos de registro de uso de almacenamiento basados en el esquema nuevo antes de cargarlos en BigQuery.

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

    gsutil 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
    

    Con el comando gsutil, los archivos se copian en tu directorio de trabajo. Con el segundo comando, se repiten indefinidamente los archivos de registro y se agrega "filename" a la fila de descripción (primera fila) y el nombre del 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 de almacenamiento en BigQuery, carga tus registros modificados de manera local 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
    

Consulta registros en BigQuery

Una vez que los registros están cargados en BigQuery, puedes consultar los registros de uso para que muestren información sobre tus depósitos registrados. En el siguiente ejemplo, se muestra cómo usar la herramienta de bq en una situación en la que tienes registros de uso de un depósito durante varios días y cargaste los registros como se muestra en Carga registros de uso en BigQuery. También puedes ejecutar las siguientes consultas a través de la herramienta de navegación de BigQuery.

  1. En la herramienta de BQ, ingresa el modo interactivo.

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

    Por ejemplo, en la siguiente consulta, se muestra la forma en la que el almacenamiento de un depósito registrado cambia a lo largo del tiempo. Se supone que modificaste los registros de uso de almacenamiento como se describe en Modifica el esquema de registro de uso y que los archivos de registro tienen el nombre “logstorage*”.

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

    Este es un resultado de ejemplo 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 modificaste el esquema y usas 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, en la siguiente consulta se muestra la forma de resumir los métodos de solicitud que los clientes usan para acceder a los recursos en el depósito registrado.

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

    Este es un resultado de ejemplo 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. Sal de la shell interactiva de la herramienta de BQ.

    project-name> quit
    

Inhabilita el registro

gsutil

Con gsutil, inhabilita el registro con el comando logging:

gsutil logging set off gs://example-bucket

Para verificar que el registro se haya inhabilitado correctamente, realiza una solicitud logging get:

gsutil logging get gs://example-bucket

Si el registro se inhabilita, se muestra lo siguiente:

gs://example-bucket/ has no logging configuration.

API de XML

Con la API de XML de Cloud Storage, envía una solicitud PUT a la configuración de registro del depósito para inhabilitar el registro como se muestra en el siguiente ejemplo:

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

<Logging/>

API de JSON

Con la API de JSON de Cloud Storage, envía una solicitud PATCH a la configuración de registro del depósito para inhabilitar el registro como se muestra en el siguiente ejemplo.

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

{
 "logging": null
}

Formato de registro de uso y almacenamiento

Los registros de uso y almacenamiento pueden proporcionar una cantidad excesiva 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 número entero El tiempo en microsegundos en el que se completó la solicitud a partir del ciclo de entrenamiento de Unix.
c_ip string La dirección IP desde la que se realizó la solicitud. El prefijo "c" indica que se trata de información del cliente.
c_ip_type número entero El tipo de IP en el campo c_ip:
  • Un valor de 1 indica que se trata de una dirección IPV4.
  • Un valor de 2 indica que se trata de una dirección IPv6.
c_ip_region string Se reserva para usarlo más adelante.
cs_method string El método HTTP de esta solicitud. El prefijo "cs" indica que esta información se envió del cliente al servidor.
cs_uri string El URI de la solicitud.
sc_status número entero El código de estado HTTP que el servidor envió en respuesta. El prefijo "sc" indica que esta información se envió del servidor al cliente.
cs_bytes número entero El número de bytes enviados en la solicitud.
sc_bytes número entero El número de bytes enviados en la respuesta.
time_taken_micros número entero El tiempo en microsegundos que tardó en entregarse la solicitud, medido desde que se recibe el primer byte hasta que se envía la respuesta. Ten en cuenta que para las cargas reanudables, el punto final se determina con la respuesta a la solicitud de carga final que formó parte de la carga reanudable.
cs_host string El host en la solicitud original.
cs_referer string El referente HTTP para la solicitud.
cs_user_agent string El usuario-agente de la solicitud. El valor es GCS Lifecycle Management para las solicitudes realizadas por administración del ciclo de vida .
s_request_id string El identificador de la solicitud.
cs_operation string La operación de Cloud Storage, p. ej., GET_Object.
cs_bucket string El depósito especificado en la solicitud. Si se trata de una solicitud de depósitos de lista, esta puede ser nula.
cs_object string El objeto especificado en esta solicitud. Puede ser nulo.

Campos de registro de almacenamiento:

Campo Tipo Descripción
bucket string El nombre del depósito.
storage_byte_hours número entero Tamaño promedio del depósito en bytes por hora durante un período de 24 horas. Para obtener el tamaño total del depósito, divide el byte por hora entre 24.