Questo documento illustra come scaricare ed esaminare i log di utilizzo e le informazioni sullo spazio di archiviazione dei bucket Cloud Storage e 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 in un bucket specificato e vengono creati ogni ora. I log di archiviazione forniscono informazioni sul consumo di spazio di archiviazione del bucket nell'ultimo giorno e vengono creati ogni giorno.
Una volta configurati, i log di utilizzo e di archiviazione vengono creati automaticamente come nuovi oggetti in un bucket da te specificato.
I log di utilizzo e di archiviazione sono soggetti agli stessi pricing degli altri oggetti archiviati in Cloud Storage.
Dovresti utilizzare i log di utilizzo o Cloud Audit Logs?
Nella maggior parte dei casi, Cloud Audit Logs è il metodo consigliato per generare log che tracciano le operazioni API eseguite in Cloud Storage:
- Cloud Audit Logs monitora l'accesso in modo continuativo, fornendo gli eventi entro pochi secondi dall'evento.
- Cloud Audit Logs produce log più facili da utilizzare.
- Cloud Audit Logs può monitorare molti dei servizi Google Cloud, non solo Cloud Storage.
- Cloud Audit Logs può, facoltativamente, registrare informazioni dettagliate relative a richieste e risposte.
In alcuni casi, è possibile utilizzare i log sull'utilizzo anziché o oltre a utilizzare Cloud Audit Logs. È molto probabile che tu voglia utilizzare i log sull'utilizzo se:
- Vuoi monitorare l'accesso che si verifica perché una risorsa ha
allUsers
oallAuthenticatedUsers
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.
- Prevedi di utilizzare i download dei browser autenticati per accedere agli oggetti nel bucket.
- Vuoi che i log includano informazioni sulla latenza, le dimensioni di richieste e risposte delle singole richieste HTTP o il percorso dell'URL completo e ogni parametro di query.
- Vuoi monitorare l'accesso solo a determinati bucket nel tuo progetto e quindi non vuoi abilitare gli audit log di accesso ai dati, che monitorano l'accesso a tutti i bucket nel tuo progetto.
Tieni presente che i log di utilizzo vengono generati solo su base oraria e possono subire ritardi, in particolare durante la generazione di report su bucket con tassi di richieste elevati.
Come utilizzare i log di archiviazione o Monitoring?
In genere, non dovresti utilizzare i log di archiviazione. Lo strumento consigliato per misurare il consumo dello spazio di archiviazione è Monitoring, che fornisce strumenti di visualizzazione e metriche aggiuntive relative al consumo dello spazio di archiviazione a differenza dei log di archiviazione. Per istruzioni dettagliate sull'utilizzo di Monitoring, consulta la scheda Console per determinare le dimensioni di un bucket.
Configura la consegna dei log
Quando configuri la consegna dei log, per il bucket specificato vengono generati sia i log di utilizzo sia i log di archiviazione. I passaggi seguenti descrivono come configurare la consegna dei log per un bucket. Se non hai ancora un bucket che intendi utilizzare per l'archiviazione dei log, crea il bucket.
Riga di comando
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 per creare e archiviare i log come nuovi oggetti.Gli oggetti log hanno l'oggetto predefinito acl del bucket di log, a meno che l'accesso uniforme a livello di bucket non sia abilitato nel bucket.
Abilita il logging per il tuo 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]
Facoltativamente, puoi impostare un prefisso degli oggetti per gli oggetti di log utilizzando il flag
--log-object-prefix
. Il prefisso dell'oggetto costituisce l'inizio del nome dell'oggetto di 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 il quale sono abilitati i log.
API REST
API JSON
Concedi a Cloud Storage il ruolo
roles/storage.objectCreator
per il bucket. Se esistono altre associazioni IAM a livello di bucket per il bucket, assicurati di includerle 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 per creare e archiviare i log come nuovi oggetti.Gli oggetti log hanno l'oggetto predefinito acl del bucket di log, a meno che l'accesso uniforme a livello di bucket non sia abilitato nel bucket.
Abilita il logging per il tuo 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
Imposta le autorizzazioni per concedere l'autorizzazione
WRITE
di Cloud Storage 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 scritturacloud-storage-analytics@google.com
. Assicurati di includere nella richiesta tutti gli ACL esistenti per il bucket, oltre al nuovo 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>
Abilita il logging per il tuo 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>
Controlla stato di logging
Riga di comando
Controlla il logging 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 il logging è abilitato, il server restituisce la configurazione di logging nella risposta:
logging: logBucket: example-logs-bucket logObjectPrefix: log_object_prefix
Se il logging non è abilitato, 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 il logging non è abilitato, viene restituita una configurazione vuota:
{}
API XML
Invia una richiesta GET Bucket per la configurazione di 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 il logging non è abilitato, 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 utilizzata nel giorno precedente. In genere vengono creati prima delle 10:00 PST.
I log di utilizzo vengono generati ogni ora quando c'è 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 sull'utilizzo e sui log di archiviazione dal bucket in cui sono archiviati è tramite la console Google Cloud o l'interfaccia a riga di comando gcloud storage
. I log di utilizzo sono in formato CSV e hanno la seguente convenzione di denominazione:
OBJECT_PREFIX_usage_TIMESTAMP_ID_v0
Analogamente, i log di archiviazione vengono denominati utilizzando la convenzione seguente:
OBJECT_PREFIX_storage_TIMESTAMP_ID_v0
Ad esempio, di seguito è riportato il nome di un oggetto di log sull'utilizzo che utilizza il prefisso predefinito dell'oggetto, riporta l'utilizzo per il bucket denominato example-bucket
ed è 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 di log di Storage 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
- Nella console Google Cloud, vai alla pagina Bucket di Cloud Storage.
Seleziona il bucket in cui sono archiviati i tuoi log.
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 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
.
Analizza i log in BigQuery
Per eseguire query sui log di archiviazione e utilizzo di Cloud Storage, puoi utilizzare Google BigQuery, che consente query rapide di tipo SQL su tabelle di sola aggiunta. Lo strumento a riga di comando di BigQuery, bq
, è uno strumento basato su Python che
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.
Carica i log in BigQuery
Seleziona un progetto predefinito.
Per maggiori dettagli sulla selezione di un progetto, vedi Utilizzo dei progetti.
Crea un nuovo set di dati.
$ bq mk storageanalysis Dataset 'storageanalysis' successfully created.
Elenca i set di dati nel progetto:
$ bq ls datasetId
-----------------
storageanalysisSalva gli schemi di utilizzo e archiviazione sul tuo 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.
Carica i log sull'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:
- Carica i log di utilizzo e archiviazione dal bucket
example-logs-bucket
. - Crea le tabelle
usage
estorage
nel set di datistorageanalysis
. - 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é questa era la prima volta che hai eseguito il comando di caricamento nell'esempio qui, sono state create le tabelle
usage
estorage
. Puoi continuare ad aggiungere elementi 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 alla tabellastorage
i dati di tutti i log che iniziano con "bucket_usuage_2014":$ bq load --skip_leading_rows=1 storageanalysis.usage \ gs://example-logs-bucket/bucket_usage_2014* \ ./cloud_storage_usage_schema.json
Quando utilizzi i caratteri jolly, puoi 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.- Carica i log di utilizzo e archiviazione dal bucket
È possibile accedere alla funzionalità di BigQuery anche tramite lo Strumento di navigazione 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 di dati da Cloud Storage.
Modifica lo schema del log di utilizzo
In alcuni scenari, potrebbe essere utile pre-elaborare i log di utilizzo prima del caricamento in BigQuery. Ad esempio, puoi aggiungere ulteriori informazioni ai log di utilizzo per semplificare l'analisi delle query in BigQuery. In questa sezione, mostreremo come aggiungere al log il nome file di ciascun log relativo all'utilizzo dello spazio di archiviazione. Ciò richiede la modifica dello schema esistente e di ciascun file di log.
Modifica lo schema esistente, cloud_storage_storage_schema_v0, per aggiungere il nome del file come mostrato di seguito. Assegna un nuovo nome al nuovo schema, ad esempio cloud_storage_storage_schema_custom.json, per distinguerlo dall'originale.
[ {"name": "bucket", "type": "string", "mode": "REQUIRED"}, {"name": "storage_byte_hours","type": "integer","mode": "REQUIRED"}, {"name": "filename","type": "string","mode": "REQUIRED"} ]
Pre-elabora i file di log sull'utilizzo dello spazio di archiviazione in base al nuovo schema, prima di caricarli in BigQuery.
Ad esempio, i comandi seguenti 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 esegue un loop dei file di log e aggiunge "filename" alla riga di descrizione (prima riga) e il nome effettivo del file alla riga di 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"
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 su più giorni e hai caricato i log come mostrato in Caricare i log di utilizzo in BigQuery. Puoi anche eseguire le query di seguito utilizzando lo strumento browser BigQuery.
Nello strumento bq, attiva la modalità interattiva.
$ bq shell
Eseguire una query sulla tabella dei log di archiviazione.
Ad esempio, la seguente query mostra come cambia nel tempo lo spazio di 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 dalla 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
Eseguire una query sulla tabella dei log di utilizzo.
Ad esempio, la seguente query mostra come riassumere i metodi di richiesta utilizzati dai client 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 dalla query:
Waiting on bqjob_r1a6b4596bd9c29fb_000001437d6f8a52_1 ... (0s) Current status: DONE +-----------+-------+ | cs_method | count | +-----------+-------+ | PUT | 8002 | | GET | 12631 | | POST | 2737 | | HEAD | 2173 | | DELETE | 7290 | +-----------+-------+
Esci dalla shell interattiva dello strumento bq.
project-name> quit
Disabilita logging
Riga di comando
Disabilita il logging con il flag --clear-log-bucket
nel comando buckets update
:
gcloud storage buckets update gs://example-bucket --clear-log-bucket
Per verificare che il logging sia stato disabilitato correttamente, utilizza il comando buckets describe
:
gcloud storage buckets describe gs://example-bucket --format="default(logging_config)"
Se il logging è disabilitato, viene restituito quanto segue:
null
API REST
API JSON
Disabilita il logging inviando una richiesta PATCH alla configurazione di logging del bucket, come mostrato nell'esempio seguente.
PATCH /example-bucket?logging HTTP/1.1 Host: storage.googleapis.com { "logging": null }
API XML
Disabilita il logging inviando una richiesta PUT alla configurazione di logging del bucket, come mostrato nell'esempio seguente:
PUT /example-bucket?logging HTTP/1.1 Host: storage.googleapis.com <Logging/>
Formato dei log su utilizzo e archiviazione
I log sull'utilizzo e sull'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 la richiesta è stata completata, 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:
|
c_ip_region |
string | Riservato per un 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 necessario per gestire la richiesta in microsecondi, misurato da quando viene ricevuto il primo byte a quando viene inviata la risposta. Tieni presente che, per i caricamenti ripristinabili, il punto finale è determinato dalla risposta alla richiesta di caricamento finale 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 | Lo 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 di Cloud Storage, ad esempio GET_Object . Può essere nullo. |
cs_bucket |
string | Il bucket specificato nella richiesta. |
cs_object |
string | L'oggetto specificato in questa richiesta. Può essere nullo. |
Campi dei log di archiviazione:
Campo | Tipo | Descrizione |
---|---|---|
bucket |
string | Il nome del bucket. |
storage_byte_hours |
integer | Dimensioni medie in byte/ora in un periodo di 24 ore del bucket. Per ottenere la dimensione totale del bucket, dividi il numero di byte-ore per 24. |