Log di utilizzo e log di archiviazione

Questo documento descrive come scaricare e rivedere i log di utilizzo e le informazioni di archiviazione per i bucket Cloud Storage e come analizzare i log utilizzando Google BigQuery.

Introduzione

Cloud Storage offre log di utilizzo e log di archiviazione sotto forma di file CSV che puoi scaricare e visualizzare. I log di utilizzo forniscono informazioni per tutte le richieste effettuate per un bucket specificato e vengono creati ogni ora. I log di archiviazione forniscono informazioni sul consumo di spazio di archiviazione del bucket per l'ultimo giorno e vengono creati giornalmente.

Una volta configurati, i log di utilizzo e di archiviazione vengono generati automaticamente per il bucket specificato e archiviati come nuovi oggetti in un bucket specificato.

I log di utilizzo e di archiviazione sono soggetti agli stessi prezzi degli altri oggetti archiviati in Cloud Storage.

Devi utilizzare i log di utilizzo o Cloud Audit Logs?

Nella maggior parte dei casi, Cloud Audit Logs è il metodo consigliato per generare log che monitorano le operazioni API eseguite in Cloud Storage:

  • Cloud Audit Logs monitora l'accesso in modo continuo, con la distribuzione degli eventi entro pochi secondi dal loro verificarsi.
  • Cloud Audit Logs produce log più facili da utilizzare.
  • Cloud Audit Logs può monitorare molti dei tuoi servizi Google Cloud , non solo Cloud Storage.
  • Cloud Audit Logs può, facoltativamente, registrare informazioni dettagliate su richieste e risposte.

In alcuni casi, potresti voler utilizzare i log di utilizzo al posto o in aggiunta all'utilizzo di Cloud Audit Logs. Probabilmente ti conviene utilizzare i log di utilizzo se:

  • Vuoi monitorare l'accesso che si verifica perché una risorsa ha allUsers o allAuthenticatedUsers nelle impostazioni di controllo dell'accesso dell'accesso, ad esempio l'accesso agli asset in un bucket che hai configurato come sito web statico.
  • Vuoi monitorare le modifiche apportate dalle funzionalità Gestione del ciclo di vita degli oggetti o Autoclass.
  • Vuoi che i log includano informazioni sulla latenza, le dimensioni della richiesta e della risposta delle singole richieste HTTP o il percorso URL completo e ogni parametro di query.
  • Vuoi monitorare l'accesso solo a determinati bucket del tuo progetto e quindi non vuoi attivare i log di controllo dell'accesso ai dati, che monitorano l'accesso a tutti i bucket del tuo progetto.

Tieni presente che i log di utilizzo vengono generati solo ogni ora e possono essere ritardati, in particolare quando vengono generati report sui bucket che registrano tassi di richieste elevati.

Devi utilizzare i log di archiviazione o Monitoring?

In genere, non devi utilizzare i log di archiviazione. Lo strumento consigliato per misurare il consumo di spazio di archiviazione è Monitoring, che fornisce strumenti di visualizzazione e metriche aggiuntive relative al consumo di spazio di archiviazione che i log di archiviazione non forniscono. Consulta la scheda Console per determinare le dimensioni di un bucket per istruzioni passo passo sull'utilizzo di Monitoring.

Configurare la distribuzione dei log

Prima di configurare la distribuzione dei log, devi disporre di un bucket per archiviarli. Questo bucket deve soddisfare i seguenti requisiti, altrimenti la registrazione non va a buon fine:

  • Il bucket che archivia i log deve esistere nella stessa organizzazione del bucket di cui vengono registrati i log.

    • Se il bucket di cui vengono registrati i log non è contenuto in alcuna organizzazione, il bucket che archivia i log deve esistere nello stesso progetto del bucket di cui vengono registrati i log.
  • Se utilizzi o abiliti Controlli di servizio VPC, il bucket che archivia i log deve trovarsi all'interno dello stesso perimetro di sicurezza del bucket di cui vengono registrati i log.

Se non hai già un bucket che soddisfa questi requisiti, crealo.

I seguenti passaggi descrivono come configurare la distribuzione dei log per un bucket:

Riga di comando

  1. Concedi a Cloud Storage il ruolo roles/storage.objectCreator per il bucket:

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

    Il ruolo concede a Cloud Storage, sotto forma di gruppo cloud-storage-analytics@google.com, l'autorizzazione a creare e archiviare i log come nuovi oggetti.

    Gli oggetti log hanno l'ACL oggetto predefinita del bucket log, a meno che non sia abilitato l'accesso uniforme a livello di bucket sul bucket.

  2. Abilita la registrazione per il bucket utilizzando il flag --log-bucket:

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

    Se vuoi, puoi impostare un prefisso dell'oggetto per gli oggetti log utilizzando il flag --log-object-prefix. Il prefisso dell'oggetto forma l'inizio del nome dell'oggetto log. Può contenere al massimo 900 caratteri e deve essere un nome oggetto valido. Per impostazione predefinita, il prefisso dell'oggetto è il nome del bucket per cui sono attivati i log.

API REST

API JSON

  1. Concedi a Cloud Storage il ruolo roles/storage.objectCreator per il bucket. Se sono presenti altri binding IAM a livello di bucket, assicurati di includerli nella richiesta.

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

    Il ruolo concede a Cloud Storage, sotto forma di gruppo cloud-storage-analytics@google.com, l'autorizzazione a creare e archiviare i log come nuovi oggetti.

    Gli oggetti log hanno l'ACL oggetto predefinita del bucket log, a meno che non sia abilitato l'accesso uniforme a livello di bucket sul bucket.

  2. Attiva la registrazione per il bucket utilizzando la seguente richiesta:

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

API XML

  1. Imposta le autorizzazioni per consentire l'autorizzazione Cloud Storage WRITE al bucket per creare e archiviare i log come nuovi oggetti. Devi aggiungere una voce ACL per il bucket che concede al gruppo l'accesso in scrittura cloud-storage-analytics@google.com. Assicurati di includere nella richiesta tutte le ACL esistenti per il bucket, oltre alla nuova 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>
    
  2. Abilita la registrazione per il bucket utilizzando il parametro di query di logging:

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

Controllare lo stato della registrazione

Riga di comando

Controlla la registrazione utilizzando il comando buckets describe con il flag --format:

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

Puoi anche salvare le configurazioni di logging in un file:

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

Se la registrazione è abilitata, il server restituisce la configurazione di registrazione nella risposta:

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

Se la registrazione non è abilitata, viene restituito quanto segue:

null

API REST

API JSON

Invia una richiesta GET per la configurazione del logging del bucket come mostrato nell'esempio seguente:

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

Se il logging è abilitato, il server invia la configurazione nella risposta. Una risposta potrebbe essere simile alla seguente:

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

Se la registrazione non è abilitata, viene restituita una configurazione vuota:

{}

API XML

Invia una richiesta GET Bucket per la configurazione del logging del bucket come mostrato nell'esempio seguente:

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

Se il logging è abilitato, il server invia la configurazione nella risposta. Una risposta potrebbe essere simile alla seguente:

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

Se la registrazione non è abilitata, viene restituita una configurazione vuota:

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

Scarica i log

I log di archiviazione vengono generati una volta al giorno e contengono la quantità di spazio di archiviazione utilizzato il giorno precedente. In genere vengono creati prima delle 10:00 PST.

I log di utilizzo vengono generati ogni ora quando sono presenti attività da segnalare nel bucket monitorato. I log di utilizzo vengono in genere creati 15 minuti dopo la fine dell'ora.

Il modo più semplice per scaricare i log di utilizzo e di archiviazione dal bucket in cui sono archiviati è tramite la consoleGoogle Cloud o la CLIgcloud storage. I log di utilizzo sono in formato CSV e seguono la convenzione di denominazione seguente:

OBJECT_PREFIX_usage_TIMESTAMP_ID_v0

Analogamente, i log di archiviazione vengono denominati utilizzando la seguente convenzione:

OBJECT_PREFIX_storage_TIMESTAMP_ID_v0

Ad esempio, di seguito è riportato il nome di un oggetto log di utilizzo che utilizza il prefisso oggetto predefinito, riporta l'utilizzo per il bucket denominato example-bucket e è stato creato il 18 giugno 2022 alle 14:00 UTC:

example-bucket_usage_2022_06_18_14_00_00_1702e6_v0

Analogamente, di seguito è riportato il nome dell'oggetto log di archiviazione che utilizza il prefisso dell'oggetto predefinito ed è stato creato il 18 giugno 2022 per lo stesso bucket:

example-bucket_storage_2022_06_18_07_00_00_1702e6_v0

Per scaricare i log:

Console

  1. Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Seleziona il bucket in cui sono archiviati i log.

  3. Scarica o visualizza i log facendo clic sull'oggetto log appropriato.

Riga di comando

Esegui questo comando:

gcloud storage cp gs://BUCKET_NAME/LOGS_OBJECT DESTINATION

Dove:

  • BUCKET_NAME è il nome del bucket in cui sono archiviati i log. Ad esempio, example-logs-bucket.

  • LOGS_OBJECT è il nome del log di utilizzo o del log di archiviazione che stai scaricando. Ad esempio, example-bucket_usage_2022_06_18_14_00_00_1702e6_v0.

  • DESTINATION è la posizione in cui viene scaricato il log. Ad esempio, Desktop/Logs.

Analizzare i log in BigQuery

Per eseguire query sui log di utilizzo e archiviazione di Cloud Storage, puoi utilizzare Google BigQuery, che consente di eseguire query rapide di tipo SQL su tabelle di sola aggiunta. Lo strumento a riga di comando BigQuery, bq, è uno strumento basato su Python che ti consente di accedere a BigQuery dalla riga di comando. Per informazioni sul download e sull'utilizzo di bq, consulta la pagina di riferimento dello strumento a riga di comando bq.

Caricare i log in BigQuery

  1. Seleziona un progetto predefinito.

    Per informazioni dettagliate sulla selezione di un progetto, vedi Utilizzo dei progetti.

  2. Crea un nuovo set di dati.

    $ bq mk storageanalysis
    Dataset 'storageanalysis' successfully created.
    
  3. Elenca i set di dati nel progetto:

    $ bq ls
     
    datasetId
    -----------------
    storageanalysis
    
  4. Salva gli schemi di utilizzo e archiviazione sul computer locale per utilizzarli nel comando di caricamento.

    Puoi trovare gli schemi da utilizzare in queste posizioni: cloud_storage_usage_schema_v0 e cloud_storage_storage_schema_v0. Gli schemi sono descritti anche nella sezione Formato dei log di utilizzo e archiviazione.

  5. Carica i log di utilizzo nel set di dati.

    $ 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
    

    Questi comandi eseguono le seguenti operazioni:

    • Carica i log di utilizzo e di archiviazione dal bucket example-logs-bucket.
    • Crea le tabelle usage e storage nel set di dati storageanalysis.
    • Leggi i dati dello schema (file .json) dalla stessa directory in cui viene eseguito il comando bq.
    • Salta la prima riga di ogni file di log perché contiene le descrizioni delle colonne.

    Poiché è la prima volta che esegui il comando di caricamento nell'esempio qui, sono state create le tabelle usage e storage. Puoi continuare ad aggiungere dati a queste tabelle con comandi di caricamento successivi con nomi di file di log di utilizzo diversi o utilizzando caratteri jolly. Ad esempio, il seguente comando aggiunge i dati di tutti i log che iniziano con "bucket_usuage_2014" alla tabella storage:

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

    Quando utilizzi i caratteri jolly, potresti voler spostare i log già caricati in BigQuery in un'altra directory (ad es. gs://example-logs-bucket/processed) per evitare di caricare i dati da un log più di una volta.

È possibile accedere alle funzionalità di BigQuery anche tramite lo strumento browser BigQuery. Con lo strumento del browser, puoi caricare i dati tramite il processo di creazione della tabella.

Per ulteriori informazioni sul caricamento dei dati da Cloud Storage, incluso il caricamento programmatico dei dati, consulta Caricamento dei dati da Cloud Storage.

Modificare lo schema del log di utilizzo

In alcuni scenari, potrebbe essere utile pre-elaborare i log di utilizzo prima di caricarli in BigQuery. Ad esempio, puoi aggiungere ulteriori informazioni ai log di utilizzo per semplificare l'analisi delle query in BigQuery. In questa sezione, ti mostreremo come aggiungere il nome file di ogni log di utilizzo dello spazio di archiviazione al log. Ciò richiede la modifica dello schema esistente e di ogni file di log.

  1. Modifica lo schema esistente, cloud_storage_storage_schema_v0, per aggiungere il nome del file come mostrato di seguito. Assegna al nuovo schema un nuovo nome, ad esempio cloud_storage_storage_schema_custom.json, per distinguerlo da quello originale.

    [  {"name": "bucket", "type": "string", "mode": "REQUIRED"},
    {"name": "storage_byte_hours","type": "integer","mode": "REQUIRED"},
    {"name": "filename","type": "string","mode": "REQUIRED"}
    ]
    
  2. Preelabora i file di log di utilizzo dello spazio di archiviazione in base al nuovo schema prima di caricarli in BigQuery.

    Ad esempio, i seguenti comandi possono essere utilizzati in un ambiente 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
    

    Il comando gcloud storage copia i file nella directory di lavoro. Il secondo comando scorre i file di log e aggiunge "filename" alla riga della descrizione (prima riga) e il nome del file effettivo alla riga dei dati (seconda riga). Ecco un esempio di file di log modificato:

    "bucket","storage_byte_hours","filename"
    "example-bucket","5532482018","example-bucket_storage_2014_01_05_08_00_00_021fd_v0"
    
  3. Quando carichi i log di utilizzo dello spazio di archiviazione in BigQuery, carica i log modificati localmente e utilizza lo schema personalizzato.

    for f in example-bucket_storage\*; \
    do ./bq.py load --skip_leading_rows=1 storageanalysis.storage $f ./cloud_storage_storage_schema_custom.json; done
    

Esegui query sui log in BigQuery

Una volta caricati i log in BigQuery, puoi eseguire query sui log di utilizzo per restituire informazioni sui bucket registrati. L'esempio seguente mostra come utilizzare lo strumento bq in uno scenario in cui hai log di utilizzo per un bucket per più giorni e hai caricato i log come mostrato in Caricamento dei log di utilizzo in BigQuery. Puoi anche eseguire le query di seguito utilizzando lo strumento di esplorazione BigQuery.

  1. Nello strumento bq, inserisci la modalità interattiva.

    $ bq shell
    
  2. Esegui una query sulla tabella dei log di archiviazione.

    Ad esempio, la seguente query mostra come cambia nel tempo l'archiviazione di un bucket registrato. Presuppone che tu abbia modificato i log di utilizzo dello spazio di archiviazione come descritto in Modifica dello schema dei log di utilizzo e che i file di log siano denominati "logstorage*".

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

    Output di esempio della query:

    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 non hai modificato lo schema e utilizzi quello predefinito, puoi eseguire la seguente query:

    project-name>SELECT storage_byte_hours FROM [storageanalysis.storage] LIMIT 100
    
  3. Esegui una query sulla tabella dei log di utilizzo.

    Ad esempio, la seguente query mostra come riepilogare i metodi di richiesta che i client utilizzano per accedere alle risorse nel bucket registrato.

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

    Output di esempio della query:

    Waiting on bqjob_r1a6b4596bd9c29fb_000001437d6f8a52_1 ... (0s) Current status: DONE
    +-----------+-------+
    | cs_method | count |
    +-----------+-------+
    | PUT       |  8002 |
    | GET       | 12631 |
    | POST      |  2737 |
    | HEAD      |  2173 |
    | DELETE    |  7290 |
    +-----------+-------+
    
  4. Esci dalla shell interattiva dello strumento bq.

    project-name> quit
    

Disattivare la registrazione

Riga di comando

Disattiva la registrazione con il flag --clear-log-bucket nel comando buckets update:

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

Per verificare che la registrazione sia stata disattivata correttamente, utilizza il comando buckets describe:

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

Se la registrazione è disattivata, viene restituito quanto segue:

null

API REST

API JSON

Disattiva la registrazione inviando una richiesta PATCH alla configurazione della registrazione del bucket, come mostrato nell'esempio seguente.

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

{
 "logging": null
}

API XML

Disattiva la registrazione inviando una richiesta PUT alla configurazione del logging del bucket, come mostrato nell'esempio seguente:

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

<Logging/>

Formato dei log di utilizzo e archiviazione

I log di utilizzo e di archiviazione possono fornire una quantità eccessiva di informazioni. Puoi utilizzare le seguenti tabelle per identificare tutte le informazioni fornite in questi log.

Campi del log di utilizzo:

Campo Tipo Descrizione
time_micros integer L'ora in cui è stata completata la richiesta, in microsecondi dall'epoca di Unix.
c_ip string L'indirizzo IP da cui è stata effettuata la richiesta. Il prefisso "c" indica che si tratta di informazioni sul client.
c_ip_type integer Il tipo di IP nel campo c_ip:
  • Un valore pari a 1 indica un indirizzo IPV4.
  • Un valore di 2 indica un indirizzo IPv6.
c_ip_region string Riservato per l'uso futuro.
cs_method string Il metodo HTTP di questa richiesta. Il prefisso "cs" indica che queste informazioni sono state inviate dal client al server.
cs_uri string L'URI della richiesta.
sc_status integer Il codice di stato HTTP inviato dal server in risposta. Il prefisso "sc" indica che queste informazioni sono state inviate dal server al client.
cs_bytes integer Il numero di byte inviati nella richiesta.
sc_bytes integer Il numero di byte inviati nella risposta.
time_taken_micros integer Il tempo impiegato per gestire la richiesta in microsecondi, misurato dal momento in cui viene ricevuto il primo byte al momento dell'invio della risposta. Tieni presente che per i caricamenti ripristinabili, il punto finale è determinato dalla risposta all'ultima richiesta di caricamento che faceva parte del caricamento ripristinabile.
cs_host string L'host nella richiesta originale.
cs_referer string Il referrer HTTP per la richiesta.
cs_user_agent string L'User-Agent della richiesta. Il valore è GCS Lifecycle Management per le richieste effettuate dalla gestione del ciclo di vita.
s_request_id string L'identificatore della richiesta.
cs_operation string L'operazione Cloud Storage, ad esempio GET_Object. Questo può essere nullo.
cs_bucket string Il bucket specificato nella richiesta.
cs_object string L'oggetto specificato in questa richiesta. Può essere nullo.

Campi log di archiviazione:

Campo Tipo Descrizione
bucket string Il nome del bucket.
storage_byte_hours integer Dimensione media in byte-ora in un periodo di 24 ore del bucket. Per ottenere le dimensioni totali del bucket, dividi le ore-byte per 24.