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.

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.
  • Quer acompanhar as alterações feitas pelas funcionalidades de gestão do ciclo de vida de objetos ou Autoclass.
  • 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 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 usando a 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 de 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.
    {
      "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.
    
    {
     "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.
    
    <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.
    
    <Logging>
        <LogBucket>example-logs-bucket</LogBucket>
        <LogObjectPrefix>log_object_prefix</LogObjectPrefix>
    </Logging>
    

Verifique o estado do 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.

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.

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 estã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 como selecionar 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, foram criadas as tabelas usage e storage. 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 um novo nome ao novo esquema, 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, entre no 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.

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

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