Registos de utilização e registos de armazenamento

Este documento aborda como transferir e rever os registos de utilização e as informações de armazenamento dos seus contentores do Cloud Storage, bem como analisar os registos através do Google BigQuery.

Introdução

O Cloud Storage oferece registos de utilização e registos de armazenamento sob a forma de ficheiros CSV que pode transferir e ver. Os registos de utilização fornecem informações para todos os pedidos feitos num contentor especificado e são criados de hora a hora. Os registos de armazenamento fornecem informações sobre o consumo de armazenamento desse contentor no último dia e são criados diariamente.

Após a configuração, os registos de utilização e os registos de armazenamento são gerados automaticamente para o contentor especificado e armazenados como novos objetos num contentor que especificar.

Os registos de utilização e os registos de armazenamento estão sujeitos aos mesmos preços que outros objetos armazenados no Cloud Storage.

Deve usar registos de utilização ou registos de auditoria do Cloud?

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

  • Os registos de auditoria do Cloud monitorizam o acesso de forma contínua, com a entrega de eventos no espaço de segundos após a respetiva ocorrência.
  • Os registos de auditoria do Cloud produzem registos com os quais é mais fácil trabalhar.
  • Os registos de auditoria do Google Cloud podem monitorizar muitos dos seus Google Cloud serviços e não apenas o Cloud Storage.
  • O Cloud Audit Logs pode, opcionalmente, registar informações detalhadas de pedidos e respostas.

Em alguns casos, pode querer usar registos de utilização em vez de ou além de usar os registos de auditoria na nuvem. É provável que queira usar os registos de utilização se:

  • Quer acompanhar o acesso que ocorre porque um recurso tem allUsers ou allAuthenticatedUsers nas respetivas definições de controlo de acesso, como o acesso a recursos num contentor que configurou para ser um Website estático.
  • Quiser acompanhar as alterações feitas pelas funcionalidades de gestão do ciclo de vida de objetos ou classificação automática.
  • Quer que os seus registos incluam informações de latência, o tamanho do pedido e da resposta de pedidos HTTP individuais ou o caminho de URL completo e todos os parâmetros de consulta.
  • Quer acompanhar o acesso apenas a determinados contentores no seu projeto e, por isso, não quer ativar os registos de auditoria de acesso a dados, que acompanham o acesso a todos os contentores no seu projeto.

Tenha em atenção que os registos de utilização só são gerados de hora a hora e podem sofrer atrasos, especialmente quando são criados relatórios sobre contentores que registam taxas de pedidos elevadas.

Deve usar registos de armazenamento ou a monitorização?

Geralmente, não deve usar registos de armazenamento. A ferramenta recomendada para medir o consumo de armazenamento é a monitorização, que fornece ferramentas de visualização, bem como métricas adicionais relacionadas com o consumo de armazenamento que os registos de armazenamento não fornecem. Consulte o separador da consola para determinar o tamanho de um contentor para ver instruções passo a passo sobre a utilização da monitorização.

Configure o envio de registos

Antes de configurar a entrega de registos, tem de ter um contentor para armazenar registos. Este contentor tem de cumprir os seguintes requisitos, caso contrário, o registo falha:

  • O contentor que armazena os registos tem de existir na mesma organização que o contentor que está a ser registado.

    • Se o contentor que está a ser registado não estiver contido em nenhuma organização, o contentor que armazena os registos tem de existir no mesmo projeto que o contentor que está a ser registado.
  • Se usar ou ativar os VPC Service Controls, o contentor que armazena os registos tem de residir no mesmo perímetro de segurança que o contentor que está a ser registado.

Se ainda não tiver um contentor que cumpra estes requisitos, crie o contentor.

Os passos seguintes descrevem como configurar o fornecimento de registos para um contentor:

Linha de comandos

  1. Conceda ao Cloud Storage a função de roles/storage.objectCreator para o contentor:

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

    A função concede ao Cloud Storage, sob a forma do grupo cloud-storage-analytics@google.com, autorização para criar e armazenar os seus registos como novos objetos.

    Os objetos de registo têm a LCA de objeto predefinida do contentor de registos, a menos que o acesso uniforme ao nível do contentor esteja ativado no contentor.

  2. Ative o registo para o seu contentor através da flag --log-bucket:

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

    Opcionalmente, pode definir um prefixo de objeto para os objetos de registo através da flag --log-object-prefix. O prefixo do objeto forma o início do nome do objeto de registo. Pode ter, no máximo, 900 carateres e tem de ser um nome de objeto válido. Por predefinição, o prefixo do objeto é o nome do contentor para o qual os registos estão ativados.

APIs REST

API JSON

  1. Conceda ao Cloud Storage a função roles/storage.objectCreator para o contentor. Se existirem associações de IAM adicionais ao nível do contentor, certifique-se de que as inclui no pedido.

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

    A função concede ao Cloud Storage, sob a forma do grupo cloud-storage-analytics@google.com, autorização para criar e armazenar os seus registos como novos objetos.

    Os objetos de registo têm a LCA de objeto predefinida do contentor de registos, a menos que o acesso uniforme ao nível do contentor esteja ativado no contentor.

  2. Ative o registo para o seu contentor através do seguinte pedido:

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

API XML

  1. Defina autorizações para permitir a autorização WRITE do Cloud Storage no contentor para criar e armazenar os seus registos como novos objetos. Tem de adicionar uma entrada de ACL para o contentor que conceda ao grupo cloud-storage-analytics@google.com acesso de escrita. Certifique-se de que inclui todas as ACLs existentes para o contentor, além da nova ACL, no pedido.

    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 o registo para o seu contentor através do parâmetro de consulta de registo:

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

Verifique o estado da registo

Linha de comandos

Verifique o registo através do comando buckets describe com o sinalizador --format:

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

Também pode guardar as configurações de registo num ficheiro:

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

Se o registo estiver ativado, o servidor devolve a configuração de registo na resposta:

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

Se o registo não estiver ativado, é devolvido o seguinte:

null

APIs REST

API JSON

Envie um pedido GET para a configuração de registo do contentor, conforme mostrado no exemplo seguinte:

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

Se o registo estiver ativado, o servidor envia a configuração na resposta. Uma resposta pode ter um aspeto semelhante ao seguinte:

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

Se o registo não estiver ativado, é devolvida uma configuração vazia:

{}

API XML

Envie um pedido GET Bucket para a configuração de registo do contentor, conforme mostrado no exemplo seguinte:

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

Se o registo estiver ativado, o servidor envia a configuração na resposta. Uma resposta pode ter um aspeto semelhante ao seguinte:

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

Se o registo não estiver ativado, é devolvida uma configuração vazia:

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

Transferir registos

Os registos de armazenamento são gerados uma vez por dia e contêm a quantidade de armazenamento usado no dia anterior. Normalmente, são criados antes das 10:00 (PST).

Os registos de utilização são gerados de hora a hora quando existe atividade para comunicar no contentor monitorizado. Normalmente, os registos de utilização são criados 15 minutos após o fim da hora.

A forma mais fácil de transferir os registos de utilização e os registos de armazenamento do contentor no qual estão armazenados é através da Google Cloud consola ou da gcloud storageCLI. Os registos de utilização estão no formato CSV e têm a seguinte convenção de nomenclatura:

OBJECT_PREFIX_usage_TIMESTAMP_ID_v0

Da mesma forma, os registos de armazenamento são denominados através da seguinte convenção:

OBJECT_PREFIX_storage_TIMESTAMP_ID_v0

Por exemplo, o seguinte é o nome de um objeto de registo de utilização que usa o prefixo do objeto predefinido, comunica a utilização para o contentor denominado example-bucket e foi criado a 18 de junho de 2022 às 14:00 UTC:

example-bucket_usage_2022_06_18_14_00_00_1702e6_v0

Da mesma forma, o seguinte é o nome do objeto de registo de armazenamento que usa o prefixo do objeto predefinido e foi criado a 18 de junho de 2022 para o mesmo contentor:

example-bucket_storage_2022_06_18_07_00_00_1702e6_v0

Para transferir registos:

Consola

  1. Na Google Cloud consola, aceda à página Recipientes do Cloud Storage.

    Aceda a Recipientes

  2. Selecione o contentor no qual os seus registos estão armazenados.

  3. Clique no objeto de registo adequado para transferir ou ver os seus registos.

Linha de comandos

Execute o seguinte comando:

gcloud storage cp gs://BUCKET_NAME/LOGS_OBJECT DESTINATION

Onde:

  • BUCKET_NAME é o nome do contentor no qual os registos são armazenados. Por exemplo, example-logs-bucket.

  • LOGS_OBJECT é o nome do registo de utilização ou do registo de armazenamento que está a transferir. Por exemplo, example-bucket_usage_2022_06_18_14_00_00_1702e6_v0.

  • DESTINATION é a localização para a qual o registo está a ser transferido. Por exemplo, Desktop/Logs.

Analise registos no BigQuery

Para consultar a sua utilização do Cloud Storage e os registos de armazenamento, pode usar o Google BigQuery, que permite consultas rápidas de tipo SQL em tabelas apenas de anexação. A ferramenta de linha de comandos do BigQuery, bq, é uma ferramenta baseada em Python que lhe permite aceder ao BigQuery a partir da linha de comandos. Para ver informações sobre como transferir e usar o bq, consulte a página de referência da ferramenta de linhas de comando bq.

Carregue registos para o BigQuery

  1. Selecione um projeto predefinido.

    Para ver detalhes sobre a seleção de um projeto, consulte o artigo Trabalhar com projetos.

  2. Crie um novo conjunto de dados.

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

    $ bq ls
     
    datasetId
    -----------------
    storageanalysis
    
  4. Guarde os esquemas de utilização e armazenamento no seu computador local para utilização no comando de carregamento.

    Pode encontrar os esquemas a usar nestas localizações: cloud_storage_usage_schema_v0 e cloud_storage_storage_schema_v0. Os esquemas também são descritos na secção Formato dos registos de utilização e armazenamento.

  5. Carregue os registos de utilização 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
    

    Estes comandos fazem o seguinte:

    • Carregue os registos de utilização e armazenamento do contentor example-logs-bucket.
    • Crie tabelas usage e storage no conjunto de dados storageanalysis.
    • Ler dados de esquema (ficheiro .json) do mesmo diretório onde o comando bq é executado.
    • Ignore a primeira linha de cada ficheiro de registo, uma vez que contém descrições das colunas.

    Como foi a primeira vez que executou o comando load no exemplo aqui, as tabelas usage e storage foram criadas. Pode continuar a anexar dados a estas tabelas com comandos de carregamento subsequentes com diferentes nomes de ficheiros de registo de utilização ou usando carateres universais. Por exemplo, o seguinte comando anexa dados de todos os registos que começam por "bucket_usuage_2014" à tabela storage:

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

    Quando usar carateres universais, pode querer mover os registos já carregados para o BigQuery para outro diretório (por exemplo, gs://example-logs-bucket/processed) para evitar carregar dados de um registo mais do que uma vez.

Também pode aceder à funcionalidade do BigQuery através da ferramenta de navegador do BigQuery. Com a ferramenta de navegador, pode carregar dados através do processo de criação de tabelas.

Para mais informações sobre o carregamento de dados do Cloud Storage, incluindo o carregamento de dados por programação, consulte o artigo Carregar dados do Cloud Storage.

Modifique o esquema do registo de utilização

Em alguns cenários, pode ser útil pré-processar os registos de utilização antes de os carregar para o BigQuery. Por exemplo, pode adicionar informações adicionais aos registos de utilização para facilitar a análise de consultas no BigQuery. Nesta secção, vamos mostrar como pode adicionar o nome do ficheiro de cada registo de utilização do armazenamento ao registo. Isto requer a modificação do esquema existente e de cada ficheiro de registo.

  1. Modifique o esquema existente, cloud_storage_storage_schema_v0, para adicionar o nome do ficheiro, conforme mostrado abaixo. Atribua ao novo esquema um novo nome, por exemplo, cloud_storage_storage_schema_custom.json, para o distinguir 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 ficheiros de registo de utilização do armazenamento com base no novo esquema antes de os carregar para o BigQuery.

    Por exemplo, os seguintes comandos podem ser usados num 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 ficheiros para o seu diretório de trabalho. O segundo comando percorre os ficheiros de registo e adiciona "filename" à linha de descrição (primeira linha) e o nome do ficheiro real à linha de dados (segunda linha). Segue-se um exemplo de um ficheiro de registo modificado:

    "bucket","storage_byte_hours","filename"
    "example-bucket","5532482018","example-bucket_storage_2014_01_05_08_00_00_021fd_v0"
    
  3. Quando carrega os registos de utilização do armazenamento para o BigQuery, carregue os registos 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
    

Consulte registos no BigQuery

Depois de os registos serem carregados para o BigQuery, pode consultar os registos de utilização para devolver informações sobre os seus contentores registados. O exemplo seguinte mostra como usar a ferramenta bq num cenário em que tem registos de utilização de um contentor durante vários dias e carregou os registos, conforme mostrado em Carregar registos de utilização para o BigQuery. Também pode executar as consultas abaixo através da ferramenta de navegador do BigQuery.

  1. Na ferramenta bq, introduza o modo interativo.

    $ bq shell
    
  2. Executar uma consulta na tabela de registo de armazenamento.

    Por exemplo, a consulta seguinte mostra como o armazenamento de um contentor registado muda ao longo do tempo. Assume que modificou os registos de utilização de armazenamento conforme descrito em Modificar o esquema do registo de utilização e que os ficheiros de registo têm o nome "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 resultado 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 não modificou o esquema e está a usar o esquema predefinido, pode executar a seguinte consulta:

    project-name>SELECT storage_byte_hours FROM [storageanalysis.storage] LIMIT 100
    
  3. Execute uma consulta na tabela de registo de utilização.

    Por exemplo, a consulta seguinte mostra como resumir os métodos de pedido que os clientes usam para aceder aos recursos no contentor registado.

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

    Exemplo de resultado 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 da shell interativa da ferramenta bq.

    project-name> quit
    

Desative o registo

Linha de comandos

Desative o registo com o sinalizador --clear-log-bucket no comando buckets update:

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

Para verificar se o registo foi desativado com êxito, use o comando buckets describe:

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

Se o registo estiver desativado, é devolvido o seguinte:

null

APIs REST

API JSON

Desative o registo enviando um pedido PATCH para a configuração de registo do contentor, conforme mostrado no exemplo seguinte.

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

{
 "logging": null
}

API XML

Desative o registo enviando um pedido PUT para a configuração de registo do contentor, conforme mostrado no exemplo seguinte:

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

<Logging/>

Formato do registo de utilização e armazenamento

Os registos de utilização e os registos de armazenamento podem fornecer uma quantidade excessiva de informações. Pode usar as tabelas seguintes para ajudar a identificar todas as informações fornecidas nestes registos.

Campos do registo de utilização:

Campo Tipo Descrição
time_micros número inteiro A hora em que o pedido foi concluído, em microssegundos desde a época Unix.
c_ip de string O endereço IP a partir do qual o pedido foi feito. O prefixo "c" indica que se trata de 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 de string Reservado para utilização futura.
cs_method de string O método HTTP desta solicitação. O prefixo "cs" indica que estas informações foram enviadas do cliente para o servidor.
cs_uri de string O URI do pedido.
sc_status número inteiro O código de estado HTTP que o servidor enviou em resposta. O prefixo "sc" indica que estas informações foram enviadas do servidor para o cliente.
cs_bytes número inteiro O número de bytes enviados no pedido.
sc_bytes número inteiro O número de bytes enviados na resposta.
time_taken_micros número inteiro O tempo que demorou a publicar o pedido em microssegundos, medido desde o momento em que o primeiro byte é recebido até ao envio da resposta. Tenha em atenção que, para os carregamentos retomáveis, o ponto final é determinado pela resposta ao pedido de carregamento final que fez parte do carregamento retomável.
cs_host de string O anfitrião no pedido original.
cs_referer de string O referenciador HTTP para o pedido.
cs_user_agent de string O agente do utilizador do pedido. O valor é GCS Lifecycle Management para pedidos feitos pela gestão do ciclo de vida.
s_request_id de string O identificador do pedido.
cs_operation de string A operação do Cloud Storage, por exemplo, GET_Object. Este pode ser nulo.
cs_bucket de string O grupo especificado no pedido.
cs_object de string O objeto especificado nesta solicitação. Pode ser nulo.

Campos do registo de armazenamento:

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