Registros de uso e de armazenamento

Neste documento, você aprenderá a fazer o download e conferir os registros de uso e as informações de armazenamento de buckets do Cloud Storage, além de analisar os registros usando o Google BigQuery.

Introdução

O Cloud Storage oferece registros de uso e de armazenamento na forma de arquivos CSV. É possível fazer o download deles e visualizá-los. Os registros de uso fornecem informações sobre todas as solicitações feitas em um bucket específico e são criados a cada hora. Os registros de armazenamento fornecem informações sobre o consumo de armazenamento desse bucket no último dia e são criados diariamente.

Depois de configurados, os registros de uso e de armazenamento são gerados automaticamente para o bucket especificado e armazenados como novos objetos em um bucket especificado por você.

Os registros de uso e de armazenamento estão sujeitos ao mesmo preço que outros objetos armazenados no Cloud Storage.

É melhor usar os registros de uso ou os registros de auditoria do Cloud?

Na maioria dos casos, os registros de auditoria do Cloud é o método recomendado para gerar registros que rastreiam as operações de API realizadas no Cloud Storage:

  • Os registros de auditoria do Cloud rastreiam o acesso de maneira contínua, com entrega de eventos em segundos de ocorrência.
  • Os registros de auditoria do Cloud são mais fáceis de trabalhar.
  • O registro de auditoria do Cloud pode ser usado para monitorar vários serviços do Google Cloud, não apenas o Cloud Storage.
  • Opcionalmente, os registros de auditoria do Cloud podem gravar informações detalhadas sobre solicitações e respostas.

Em alguns casos, você pode querer usar registros de uso em vez de ou além de usando os registros de auditoria do Cloud. Os registros de uso são recomendados nestes casos:

  • Você quer rastrear o acesso que ocorre porque um recurso tem allUsers ou allAuthenticatedUsers nas configurações de controle de acesso, como o acesso a recursos em um bucket que você configurou para ser um site estático.
  • Você quer rastrear as alterações feitas pelos recursos de Gerenciamento do ciclo de vida de objetos ou Classe automática.
  • Você quer que os registros incluam informações de latência, o tamanho da solicitação e da resposta de solicitações HTTP individuais ou o caminho do URL completo e todos os parâmetros de consulta.
  • Você quer rastrear o acesso apenas a determinados buckets no projeto e, portanto, não quer ativar os registros de auditoria de acesso a dados, que rastreiam o acesso a todos os buckets do projeto.

Os registros de uso são gerados apenas por hora e podem ser atrasados, especialmente quando os relatórios têm intervalos com altas taxas de solicitação.

É melhor usar os registros de armazenamento ou o Monitoring?

Geralmente, não convém usar os registros de armazenamento. A ferramenta recomendada para medir o consumo de armazenamento é o Monitoring, que fornece ferramentas de visualização e métricas adicionais relacionadas ao consumo de armazenamento que os registros de armazenamento não oferecem. Consulte a guia Console para determinar o tamanho de um bucket para instruções passo a passo sobre como usar o Monitoring.

Configurar entrega de registros

Antes de configurar o envio de registros, você precisa ter um bucket para armazenar registros. Esse bucket precisa atender aos seguintes requisitos, caso contrário, a geração de registros falhará:

  • O bucket que armazena os registros precisa existir na mesma organização que o bucket que está sendo registrado.

    • Se o bucket que está sendo registrado não estiver em nenhuma organização, o bucket que armazena os registros precisa existir no mesmo projeto que o bucket que está sendo registrado.
  • Se você usar ou ativar o VPC Service Controls, o bucket que armazena os registros precisa estar no mesmo perímetro de segurança que o bucket que está sendo registrado.

Se você ainda não tiver um bucket que atenda a esses requisitos, crie um.

As etapas a seguir descrevem como configurar a entrega de registros para um bucket:

Linha de comando

  1. Atribua ao Cloud Storage o papel roles/storage.objectCreator para o bucket.

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

    O papel concede ao Cloud Storage, na forma do grupo cloud-storage-analytics@google.com, permissão para criar e armazenar seus registros como novos objetos.

    Os objetos de registro têm a ACL padrão de objetos do bucket de registro, a menos que o acesso uniforme no nível do bucket esteja ativado.

  2. Ative a geração de registros para o bucket usando a flag --log-bucket:

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

    Também é possível definir um prefixo de objeto para os objetos de registro usando a sinalização --log-object-prefix. O prefixo do objeto forma o início do nome do objeto de registro. Ele pode ter no máximo 900 caracteres e precisa ser um nome de objeto válido. Por padrão, o prefixo do objeto é o nome do bucket em que os registros estão ativados.

APIs REST

API JSON

  1. Atribua ao Cloud Storage o papel roles/storage.objectCreator para o bucket. Se houver vinculações adicionais de IAM no nível do bucket, inclua-as na solicitação.

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

    O papel concede ao Cloud Storage, na forma do grupo cloud-storage-analytics@google.com, permissão para criar e armazenar seus registros como novos objetos.

    Os objetos de registro têm a ACL padrão de objetos do bucket de registro, a menos que o acesso uniforme no nível do bucket esteja ativado.

  2. Ative a geração de registros para seu bucket usando a seguinte solicitação:

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

API XML

  1. Defina permissões para conceder ao Cloud Storage a permissão WRITE ao bucket para criar e armazenar seus registros como novos objetos. É necessário adicionar uma entrada de ACL para o bucket que concede ao grupo cloud-storage-analytics@google.com acesso de gravação. Certifique-se de incluir na solicitação todas as ACLs atuais do bucket, além da nova.

    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. Ative a geração de registros para seu bucket usando o parâmetro de consulta de geração de registros:

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

Verificar o status do registro

Linha de comando

Verifique a geração de registros usando o comando buckets describe com a sinalização --format:

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

Também é possível salvar as configurações de geração de registros em um arquivo:

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

Se a geração de registros estiver ativada, o servidor retornará a configuração da geração de registros na resposta:

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

Se a geração de registros não estiver ativada, o que retornará é:

null

APIs REST

API JSON

Envie uma solicitação GET para a configuração da geração de registros do bucket, conforme mostrado no exemplo a seguir:

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

Se a geração de registros estiver ativada, o servidor enviará a configuração na resposta. A resposta pode ser semelhante a esta:

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

Se a geração de registros não estiver ativada, será retornada uma configuração em branco:

{}

API XML

Envie uma solicitação GET Bucket para a configuração da geração de registros do bucket, conforme mostrado no exemplo a seguir:

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

Se a geração de registros estiver ativada, o servidor enviará a configuração na resposta. A resposta pode ser semelhante a esta:

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

Se a geração de registros não estiver ativada, será retornada uma configuração em branco:

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

Download de registros

Os registros de armazenamento são gerados uma vez por dia e contêm a quantidade de armazenamento usada no dia anterior. Eles normalmente são criados antes das 16h (horário de Brasília).

Registros de consumo são gerados a cada hora quando há atividade para relatar no bucket monitorado. Registros de consumo geralmente são criados 15 minutos após o final da hora.

A maneira mais fácil de fazer o download dos registros de uso e de armazenamento do bucket em que estão armazenados é por meio doConsole do Google Cloud ou o gcloud storage CLI do Google Analytics. Os registros de uso estão no formato CSV e seguem a seguinte convenção de nomenclatura:

OBJECT_PREFIX_usage_TIMESTAMP_ID_v0

Registros de armazenamento seguindo a convenção de nomenclatura apresentada abaixo:

OBJECT_PREFIX_storage_TIMESTAMP_ID_v0

Por exemplo, o nome a seguir é o nome de um objeto de registro de uso que usa o prefixo de objeto padrão, informa o uso do bucket example-bucket e foi criado em 18 de junho de 2022 às 14h UTC :

example-bucket_usage_2022_06_18_14_00_00_1702e6_v0

Da mesma forma, veja a seguir o nome do objeto de registro do armazenamento que usa o prefixo de objeto padrão e foi criado em 18 de junho de 2022 para o mesmo bucket:

example-bucket_storage_2022_06_18_07_00_00_1702e6_v0

Para fazer o download de registros:

Console

  1. No Console do Google Cloud, acesse a página Buckets do Cloud Storage.

    Acessar buckets

  2. Selecione o bucket em que os registros estão armazenados.

  3. Faça o download ou visualize os registros clicando no objeto de registro apropriado.

Linha de comando

Execute este comando:

gcloud storage cp gs://BUCKET_NAME/LOGS_OBJECT DESTINATION

Em que:

  • BUCKET_NAME é o nome do bucket em que os registros são armazenados. Por exemplo, example-logs-bucket.

  • LOGS_OBJECT é o nome do registro de uso ou de armazenamento que você está fazendo o download. Por exemplo, example-bucket_usage_2022_06_18_14_00_00_1702e6_v0.

  • DESTINATION é o local em que o download do registro está sendo feito; Por exemplo, Desktop/Logs.

Analise registros no BigQuery

Para consultar o consumo do Cloud Storage e os registros de consumo, é possível usar o Google BigQuery, que permite consultas rápidas semelhantes a SQL em tabelas somente para anexação. A ferramenta de linha de comando do BigQuery, bq, é uma ferramenta baseada em Python para acessar o BigQuery a partir da linha de comando. Para informações sobre como usar e fazer o download da bq, consulte a página de referência da ferramenta de linha de comando bq.

Carregar registros no BigQuery

  1. Selecione um projeto padrão.

    Para detalhes sobre como selecionar um projeto, consulte Como trabalhar com projetos.

  2. Crie um novo conjunto de dados.

    $ bq mk storageanalysis
    Dataset 'storageanalysis' successfully created.
    
  3. Liste os conjuntos de dados do projeto:

    $ bq ls
     
    datasetId
    -----------------
    storageanalysis
    
  4. Salve os esquemas de consumo e armazenamento em seu computador local para usá-los no comando de carregamento.

    Encontre os esquemas nestes locais: cloud_storage_usage_schema_v0 e cloud_storage_storage_schema_v0. Os esquemas também estão descritos na seção Formato de registros de uso e de armazenamento.

  5. Carregue os registros de uso no conjunto de dados.

    $ 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
    

    Esses comandos fazem o seguinte:

    • Carregamento dos registros de uso e armazenamento do bucket example-logs-bucket.
    • Criação das tabelas usage e storage no conjunto de dados storageanalysis.
    • Leitura dos dados do esquema (arquivo .json) do mesmo diretório em que o comando bq é executado.
    • Desvio da primeira linha de cada arquivo de registros por conter descrições de colunas.

    Como essa foi a primeira vez que o comando de carregamento foi executado no exemplo, foram criadas as tabelas usage e storage. É possível continuar anexando a essas tabelas usando comandos de carregamento subsequentes com diferentes nomes de arquivos de registros de uso ou caracteres curinga. Por exemplo, o comando a seguir inclui dados de todos os registros que começam com "bucket_usuage_2014" à tabela storage:

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

    Ao usar caracteres curinga, recomenda-se mover os registros já enviados ao BigQuery para outro diretório (por exemplo, gs://example-logs-bucket/processed) para evitar que o upload de dados de um registro seja feito mais de uma vez.

A funcionalidade do BigQuery também pode ser acessada usando a ferramenta de navegação do BigQuery. Com a ferramenta de navegação, é possível carregar dados por meio do processo de criação de tabelas.

Para mais informações sobre como carregar dados do Cloud Storage, incluindo carregar dados programaticamente, consulte Como carregar dados do Cloud Storage.

Modificar o esquema do registro de uso

Em algumas situações, pode ser útil pré-processar os registros de uso antes de carregar no BigQuery. Por exemplo, é possível adicionar mais informações aos registros de uso para facilitar a análise de consultas no BigQuery. Nesta seção, mostraremos como adicionar ao registro o nome do arquivo de cada registro de uso do armazenamento. Isso exige a modificação do esquema atual e de cada arquivo de registros.

  1. Modifique o esquema existente, cloud_storage_storage_schema_v0, para incluir o nome do arquivo, conforme mostrado abaixo. Renomeie o esquema, por exemplo, cloud_storage_storage_schema_custom.json, para diferenciá-lo do original.

    [  {"name": "bucket", "type": "string", "mode": "REQUIRED"},
    {"name": "storage_byte_hours","type": "integer","mode": "REQUIRED"},
    {"name": "filename","type": "string","mode": "REQUIRED"}
    ]
    
  2. Pré-processe os arquivos de registro de uso de armazenamento com base no novo esquema, antes de carregá-los no BigQuery.

    Por exemplo, os comandos a seguir podem ser usados em um ambiente Linux, macOS ou 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
    

    O comando gcloud storage copia os arquivos para o diretório de trabalho. O segundo comando percorre os arquivos de registros e adiciona "filename" à linha de descrição (primeira linha) e o nome real do arquivo à linha de dados (segunda linha). Aqui está um exemplo de arquivo de registros modificado:

    "bucket","storage_byte_hours","filename"
    "example-bucket","5532482018","example-bucket_storage_2014_01_05_08_00_00_021fd_v0"
    
  3. Ao carregar os registros de uso de armazenamento no BigQuery, carregue os registros modificados localmente e use o 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
    

Registros de consulta no BigQuery

Depois que os registros forem carregados no BigQuery, consulte os registros de uso para retornar informações sobre os intervalos registrados. O exemplo a seguir mostra como usar a ferramenta bq em uma situação em que há registros de uso de um bucket de vários dias, e os registros foram carregados conforme mostrado em Como carregar registros de uso no BigQuery Também é possível executar as consultas abaixo usando a ferramenta de navegação do BigQuery.

  1. Na ferramenta do bq, entre no modo interativo.

    $ bq shell
    
  2. Execute uma consulta na tabela de registros de armazenamento.

    Por exemplo, a consulta a seguir mostra como o armazenamento de um bucket registrado muda ao longo do tempo. Nela, supõe-se que os registros de uso de armazenamento foram alterados conforme descrito em Como modificar o esquema de registro de uso e que os arquivos de registros foram nomeados como "logstorage*".

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

    Exemplo de saída da 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 |
    +-----------------------------------+
    

    Se o esquema não foi modificado e o esquema padrão estiver sendo usado, é possível executar a seguinte consulta:

    project-name>SELECT storage_byte_hours FROM [storageanalysis.storage] LIMIT 100
    
  3. Execute uma consulta na tabela de registro de consumo.

    Por exemplo, a consulta a seguir mostra como resumir os métodos de solicitação usados pelos clientes para acessar recursos no bucket registrado.

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

    Exemplo de saída da 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. Saia do shell interativo da ferramenta bq.

    project-name> quit
    

Desative a geração de registros

Linha de comando

Desative a geração de registros com a sinalização --clear-log-bucket no comando buckets update:

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

Para verificar se a geração de registros foi desativada, use o comando buckets describe:

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

Se a geração de registros estiver desativada, será retornada a seguinte resposta:

null

APIs REST

API JSON

Desative a geração de registros enviando uma solicitação PATCH para a configuração da geração de registros do bucket, conforme mostrado no exemplo a seguir.

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

{
 "logging": null
}

API XML

Desative a geração de registros enviando uma solicitação PUT para a configuração da geração de registros do bucket, conforme mostrado no exemplo a seguir:

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

<Logging/>

Formato dos registros de uso e de armazenamento

Os registros de uso e de armazenamento podem fornecer uma enorme quantidade de informações. Use as tabelas a seguir para identificar todas as informações fornecidas nesses registros.

Campos de registro de uso:

Campo Tipo Descrição
time_micros número inteiro A hora em que a solicitação foi concluída, em microssegundos, a partir da Era Unix.
c_ip string O endereço IP a partir do qual a solicitação foi feita. O prefixo "c" indica que são informações sobre o cliente.
c_ip_type número inteiro O tipo de IP no campo c_ip:
  • O valor 1 indica um endereço IPV4.
  • O valor 2 indica um endereço IPV6.
c_ip_region string Reservado para uso futuro.
cs_method string O método HTTP desta solicitação. O prefixo "cs" indica que essas informações foram enviadas do cliente para o servidor.
cs_uri string O URI da solicitação.
sc_status número inteiro O código do status HTTP enviado pelo servidor em resposta. O prefixo "sc" indica que essas informações foram enviadas do servidor para o cliente.
cs_bytes número inteiro O número de bytes enviados na solicitação.
sc_bytes número inteiro O número de bytes enviados na resposta.
time_taken_micros número inteiro O tempo, em microssegundos, que levou para a solicitação ser atendida a partir do momento em que o primeiro byte foi recebido até o momento em que a resposta foi enviada. Observe que, para uploads recuperáveis, o ponto final é determinado pela resposta à solicitação de upload final que fazia parte do upload recuperável.
cs_host string O host na solicitação original.
cs_referer string O referenciador HTTP (em inglês) da solicitação.
cs_user_agent string O User-Agent (em inglês) da solicitação. O valor é GCS Lifecycle Management para as solicitações feitas pelo gerenciamento do ciclo de vida.
s_request_id string O identificador da solicitação.
cs_operation string A operação do Cloud Storage, por exemplo, GET_Object. Ela pode ser nula.
cs_bucket string O bucket especificado na solicitação.
cs_object string O objeto especificado nessa solicitação. Pode ser nulo.

Campos de registro de armazenamento:

Campo Tipo Descrição
bucket string O nome do bucket.
storage_byte_hours número inteiro O tamanho médio em byte por hora durante um período de 24 horas do bucket. Para calcular o tamanho total do bucket, divida os bytes/hora por 24.