Registros de acesso e registros de armazenamento

Neste documento, falamos sobre como fazer o download e conferir registros de acesso e informações de armazenamento de intervalos do Cloud Storage e como analisar os registros usando o Google BigQuery.

Introdução

O Cloud Storage oferece registros de acesso e de armazenamento na forma de arquivos CSV. É possível fazer o download deles e visualizá-los. Registros de acesso fornecem informações sobre todas as solicitações feitas em um intervalo específico e são criados a cada hora, enquanto registros diários de armazenamento fornecem informações sobre o consumo de armazenamento desse intervalo no último dia. Os registros de acesso e de armazenamento são criados automaticamente como objetos novos em um intervalo específico.

Ao configurar um intervalo do Cloud Storage para simular o comportamento de um site estático, talvez seja necessário registrar como os recursos do site estão sendo usados. Também é possível configurar registros de acesso a intervalos e registros de armazenamento para qualquer intervalo do Cloud Storage.

Será que é melhor usar os registros de acesso e de armazenamento ou o Cloud Audit Logging?

Na maioria dos casos, o Cloud Audit Logging é o método recomendado para gerar registros que rastreiam operações da API realizadas no Cloud Storage:

  • O Cloud Audit Logging rastreia o acesso de maneira contínua.
  • O Cloud Audit Logging produz registros que são mais fáceis de trabalhar.
  • O Cloud Audit Logging pode monitorar vários serviços do Google Cloud Platform, não apenas o Cloud Storage.

Em alguns casos, pode ser necessário usar os registros de acesso e de armazenamento.

O uso de registros de acesso é recomendado nestes casos:

  • Você quer rastrear o acesso a objetos públicos.
  • Você quer rastrear o acesso a objetos em casos que o acesso é concedido exclusivamente pelas Access Control Lists (ACLs) definidas para os objetos.
  • Você quer rastrear as alterações feitas pelo recurso Gerenciamento do ciclo de vida de objetos.
  • Você quer usar downloads autenticados do navegador para acessar objetos no intervalo.
  • Você quer que os registros incluam informações de latência ou o tamanho da solicitação e da resposta de solicitações HTTP individuais.

O uso de registros de armazenamento é recomendado neste caso:

  • Você quer rastrear a quantidade de dados armazenados nos intervalos. Esta informação, com as contagens de objetos de um intervalo, também está disponível no Stackdriver.

Como configurar a entrega de registros

Você verá a seguir as etapas para configurar a entrega de registros de um intervalo específico usando a ferramenta gsutil, a API XML e a API JSON. Caso não tenha a ferramenta gsutil, é possível fazer o download e instalá-la como parte do pacote do SDK do Google Cloud ou como um produto independente.

gsutil

  1. Crie um intervalo para armazenar registros.

    Crie um intervalo para armazenar os registros usando este comando:

    gsutil mb gs://example-logs-bucket
  2. Defina as permissões para conceder ao Cloud Storage a permissão WRITE ao intervalo.

    O Cloud Storage precisa ter a permissão WRITE para criar e armazenar registros como objetos novos. Para conceder ao Cloud Storage acesso WRITE para o intervalo, conceda ao grupo cloud-storage-analytics@google.com o acesso de gravação usando o seguinte comando:

    gsutil acl ch -g cloud-storage-analytics@google.com:W gs://example-logs-bucket
  3. Os objetos de registro terão a ACL padrão de objetos do intervalo de registros. É possível definir a ACL padrão de objetos do intervalo de registros usando o gsutil. Por exemplo, para definir a ACL padrão de objetos como project-private:

    gsutil defacl set project-private gs://example-logs-bucket
  4. Ative o registro do intervalo.

    É possível ativar o registro do intervalo usando o comando logging:

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

    Se quiser, você poderá definir o prefixo do objeto log_object_prefix para os objetos de registro. 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 intervalo para o qual os registros estão ativados.

API XML

  1. Crie um intervalo para armazenar registros.

    Crie um intervalo para armazenar registros usando este comando:

    PUT /example-logs-bucket HTTP/1.1
    Host: storage.googleapis.com
    
  2. Defina as permissões para conceder ao Cloud Storage a permissão WRITE ao intervalo.

    O Cloud Storage precisa ter a permissão WRITE para criar e armazenar registros como objetos novos. Para conceder ao Cloud Storage acesso WRITE para o intervalo, adicione uma entrada à ACL do intervalo que conceda ao grupo cloud-storage-analytics@google.com o acesso de gravação usando o comando abaixo. Certifique-se de incluir na solicitação todas as ACLs existentes do intervalo, além da nova ACL.

    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. Ative o registro do intervalo.

    É possível ativar o registro para o intervalo usando o parâmetro de consulta 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 JSON

  1. Crie um intervalo para armazenar registros.

    Crie um intervalo para armazenar registros usando este comando:

    POST /storage/v1/b?project=project-id
    Host: www.googleapis.com
    
    {
      "name": "example-logs-bucket"
    }
    
  2. Defina as permissões para conceder ao Cloud Storage a permissão WRITE ao intervalo.

    O Cloud Storage precisa ter a permissão WRITE para criar e armazenar registros como objetos novos. Para conceder ao Cloud Storage acesso WRITE para o intervalo, adicione uma entrada à ACL do intervalo que conceda ao grupo cloud-storage-analytics@google.com o acesso de gravação. É possível fazer isso com a seguinte solicitação para o recurso BucketAccessControls para o intervalo de registro:

    POST /storage/v1/b/example-logs-bucket/acl
    Host: www.googleapis.com
    {
     "entity": "group-cloud-storage-analytics@google.com",
     "role": "WRITER"
    }
    
  3. Ative o registro do intervalo.

    É possível ativar o registro do intervalo usando a seguinte solicitação:

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

Como verificar o status do registro

gsutil

No gsutil, é possível verificar o registro usando o comando logging get:

gsutil logging get gs://example-bucket

Também é possível salvar as configurações do registro em um arquivo:

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

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

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

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

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

API XML

É possível enviar uma solicitação GET Bucket para a configuração da geração de registros do intervalo usando a API XML do Cloud Storage, 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. Essa resposta pode ser similar a:

<?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/>

API JSON

É possível enviar uma solicitação GET para a configuração da geração de registros do intervalo usando a API JSON do Cloud Storage, conforme mostrado no exemplo a seguir.

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

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

{
 "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:

{
}

Como fazer o download de registros

Registros de armazenamento são gerados uma vez por dia e contêm o consumo de armazenamento do 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 intervalo monitorado. Registros de consumo geralmente são criados 15 minutos após o final da hora.

O acesso a seus registros é controlado pela ACL nos objetos de registro. Os objetos de registro têm a ACL padrão de objetos do intervalo de registros.

A maneira mais fácil de fazer o download de registros de acesso e de armazenamento é usando o Console do Google Cloud Platform ou a ferramenta gsutil. Os registros de acesso estão no formato CSV e seguem a convenção de nomenclatura apresentada abaixo:

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

Por exemplo, veja a seguir um objeto de registros de acesso para um intervalo chamado gs://example-bucket, criado em 18 de junho de 2013 às 14:00 UTC e armazenado no intervalo gs://example-logs-bucket:

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

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

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

Por exemplo, veja a seguir um objeto de registro de armazenamento para o mesmo intervalo em 18 de junho de 2013:

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

Para fazer o download de registros:

Console

  1. Abra o navegador do Cloud Storage no Console do Google Cloud Platform.
    Abrir o navegador do Cloud Storage
  2. Selecione o intervalo do registro.

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

gsutil

Execute este comando:

gsutil cp <logs_object> <destination_uri>

Como analisar 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, é baseada em Python e permite 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.

Como 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.

    Os esquemas podem ser encontrados nestes locais: cloud_storage_usage_schema_v0 e cloud_storage_storage_schema_v0. Os esquemas também são descritos na seção Formato de registros de acesso e armazenamento.

  5. Carregue os registros de acesso 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 realizam as ações abaixo:

    • Carregam registros de consumo e armazenamento do intervalo example-logs-bucket.
    • Criam tabelas usage e storage no conjunto de dados storageanalysis.
    • Leem os dados do esquema (arquivo .json) no mesmo diretório em que o comando do bq é executado.
    • Ignoram a primeira linha de cada arquivo de registro porque ela contém descrições de colunas.

    Como essa foi a primeira vez em que o comando de carregamento foi executado no exemplo, foram criadas as tabelas usage e storage. É possível continuar anexando elementos a essas tabelas usando comandos de carregamento subsequentes com diferentes nomes de arquivos de registro de acesso ou caracteres curinga. Por exemplo, o comando a seguir anexa 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.

Como modificar o esquema do registro de acesso

Em alguns contextos, pode ser útil pré-processar os registros de acesso antes de carregá-los no BigQuery. Por exemplo, é possível adicionar informações aos registros de acesso 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 acesso ao armazenamento. Isso exige a modificação do esquema existente e de cada arquivo de registro.

  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 acesso ao 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):

    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
    

    O comando gsutil copia os arquivos para o diretório de trabalho. O segundo comando percorre os arquivos de registro e adiciona "filename" à linha de descrição (primeira linha) e o nome real do arquivo à linha de dados (segunda linha). Este é um exemplo de arquivo de registro 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 acesso ao 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
    

Como consultar registros no BigQuery

Depois que os registros forem carregados no BigQuery, será possível consultar os registros de acesso para retornar informações sobre os intervalos registrados. Veja no exemplo a seguir como usar a ferramenta do bq em um contexto em que há registros de acesso para um intervalo de vários dias e os registros foram carregados conforme mostrado em Como carregar registros de acesso 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 intervalo registrado muda ao longo do tempo. Ela supõe que os registros de acesso de armazenamento foram modificados conforme descrito em Como modificar o esquema de registro de acesso e que os arquivos de registros são nomeados "registroarmazenamento*".

    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 intervalo 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 do bq.

    project-name> quit
    

Como desativar a geração de registros

gsutil

No gsutil, a geração de registros pode ser desativada usando o comando logging:

gsutil logging set off gs://example-bucket

Para verificar se a geração de registros foi desativada com sucesso, execute uma solicitação logging get:

gsutil logging get gs://example-bucket

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

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

API XML

Na API XML do Cloud Storage, a geração de registros pode ser desativada enviando uma solicitação PUT para a configuração de geração de registros do intervalo, conforme mostrado no exemplo a seguir:

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

<Logging/>

API JSON

Na API JSON do Cloud Storage, a geração de registros pode ser desativada enviando uma solicitação PATCH para a configuração de geração de registros do intervalo, conforme mostrado no exemplo a seguir:

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

{
 "logging": null
}

Formato de registro de acesso e armazenamento

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

Campos do registro de acesso:

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:
  • Um valor de 1 indica um endereço IPV4.
  • Um valor de 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 para a solicitação.
cs_user_agent string O usuário-agente da solicitação. O valor é GCS Lifecycle Management para 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.
cs_bucket string O intervalo especificado na solicitação. Se for uma solicitação de listagem de intervalos, esse valor poderá ser nulo.
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 intervalo.
storage_byte_hours número inteiro O tamanho médio em byte por hora durante um período de 24 horas do intervalo. Para calcular o tamanho total do intervalo, divida os bytes por hora por 24.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.