Registros de uso & registros de 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 bucket 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 bucket que especifiques.

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

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

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

  • Cloud Audit Logs hace un seguimiento del acceso de forma continua y entrega eventos en cuestión de segundos después de que ocurren.
  • 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 desees usar los registros de uso en lugar de los Registros de auditoría de Cloud o además de ellos. En particular, es preferible usarlos si ocurre lo siguiente:

  • Deseas realizar un seguimiento del acceso que se produce cuando un recurso tiene allUsers o allAuthenticatedUsers en su configuración de control de acceso, como acceso a los elementos en un bucket que hayas configurado como sitio web estático.
  • Deseas realizar un seguimiento de los cambios que realizaron las funciones la Administración del ciclo de vida de los objetos o Autoclass.
  • Tienes la intención de usar descargas del navegador autenticadas para tener acceso a los objetos en el bucket.
  • Deseas que tus registros incluyan información de latencia, el tamaño de solicitud y respuesta de solicitudes HTTP individuales, o la ruta completa de URL y todos parámetros de consulta.
  • Quieres realizar un seguimiento del acceso solo a ciertos buckets del proyecto y, por lo tanto, no quieres habilitar los registros de auditoría de acceso a los datos, que realiza un seguimiento del acceso a todos los buckets del proyecto.

Ten en cuenta que los registros de uso solo se generan por hora y pueden retrasarse, en especial cuando se informan en buckets que tienen porcentajes de solicitudes altos.

¿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 la pestaña Console para determinar el tamaño de un bucket a fin de obtener instrucciones paso a paso sobre el uso de Monitoring.

Configura la entrega de los registros

Cuando configuras la entrega de registros, se generan los registros de uso y de almacenamiento para el bucket especificado. En los siguientes pasos, se describe cómo configurar la entrega de registros para un bucket. Si aún no tienes un bucket que planeas usar para almacenar registros, crea el bucket.

Línea de comandos

  1. Asigna a Cloud Storage el rol roles/storage.objectCreator para el bucket.

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

    Este rol le otorga permiso a Cloud Storage, en forma de grupo 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 bucket de registros, a menos que el bucket tenga habilitado el acceso uniforme a nivel de bucket .

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

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

    De manera opcional, puedes establecer un prefijo de objeto para tus objetos de registro a través de la marca --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 bucket en el que están habilitados los registros.

API de REST

API de JSON

  1. Asigna a Cloud Storage el rol roles/storage.objectCreator para el bucket. Si en el bucket hay vinculaciones adicionales de IAM a nivel de bucket, asegúrate de incluirlas 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 le otorga permiso a Cloud Storage, en forma de grupo 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 bucket de registros, a menos que el bucket tenga habilitado el acceso uniforme a nivel de bucket .

  2. Habilita el registro para tu bucket con la siguiente solicitud:

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

API de XML

  1. Establece permisos para otorgar el permiso WRITE de Cloud Storage al bucket a fin de crear y almacenar tus registros como objetos nuevos. Debes agregar una entrada de LCA para el bucket que otorga acceso de escritura grupal de cloud-storage-analytics@google.com. Asegúrate de incluir en la solicitud todas las LCA existentes del bucket, 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 para tu bucket 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>
    

Verifica el estado del registro

Línea de comandos

Verifica el registro mediante 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 registro en un archivo como se muestra a continuación:

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

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

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

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

null

API de REST

API de JSON

Envía una solicitud GET para la configuración de registro del bucket 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. La respuesta podría 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 que aparece a continuación:

{}

API de XML

Envía una solicitud de bucket GET para la configuración de registro del bucket, 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. La respuesta podría 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 que aparece a continuación:

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

Descargar 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 bucket supervisado. Por lo general, se crean 15 minutos después del final de la hora.

La forma más fácil de descargar los registros de uso y de almacenamiento del bucket en el que están almacenados es a través de la consola de Google Cloud o la CLI de gcloud storage. Los registros de uso están en formato CSV y tienen la siguiente convención de nombres:

OBJECT_PREFIX_usage_TIMESTAMP_ID_v0

De forma similar, los registros de almacenamiento se nombran según la siguiente convención:

OBJECT_PREFIX_storage_TIMESTAMP_ID_v0

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

example-bucket_usage_2022_06_18_14_00_00_1702e6_v0

De manera similar, el siguiente es el nombre del objeto de registro de almacenamiento que usa el prefijo de objeto predeterminado y se creó el 18 de junio de 2022 para el mismo bucket:

example-bucket_storage_2022_06_18_07_00_00_1702e6_v0

Para descargar registros, realiza una de las siguientes acciones:

Console

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

    Ir a Buckets

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

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

Línea de comandos

Ejecuta el siguiente comando:

gcloud storage cp gs://BUCKET_NAME/LOGS_OBJECT DESTINATION

Aquí:

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

  • LOGS_OBJECT es el nombre del registro de uso o de almacenamiento que se descarga. Por ejemplo, example-bucket_usage_2022_06_18_14_00_00_1702e6_v0

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

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 los registros en BigQuery

  1. Selecciona un proyecto predeterminado.

    Para obtener más información sobre cómo seleccionar un proyecto, consulta Trabaja 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 bucket 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 de 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):

    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
    

    Con el comando gcloud storage, 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 bucket 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 bucket registrado cambia a 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 bucket 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

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 verificar que el registro se haya inhabilitado correctamente, usa el comando buckets describe:

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

Si el registro se inhabilita, se muestra lo siguiente:

null

API de REST

API de JSON

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

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

{
 "logging": null
}

API de 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 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. Puede ser nulo.
cs_bucket string Es el bucket especificado en la solicitud.
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 bucket.
storage_byte_hours número entero Tamaño promedio del bucket en bytes por hora durante un período de 24 horas. Para obtener el tamaño total del bucket, divide el byte por hora entre 24.