Indirizzare le voci di log

Questo documento spiega come Cloud Logging instrada le voci di log ricevute da Google Cloud. Esistono diversi tipi di destinazioni di routing. Ad esempio, puoi indirizzare le voci di log a una destinazione come un bucket di log, che le memorizza. Se vuoi esportare i dati di log in una destinazione di terze parti, puoi eseguire il routing delle voci di log a Pub/Sub. Inoltre, una voce di log può essere indirizzata a più destinazioni.

A livello generale, ecco come Cloud Logging instrada e archivia le voci di log:

Figura che illustra come Cloud Logging instrada le voci di log.

Informazioni sui router dei log

Ogni Google Cloud progetto, account di fatturazione, cartella e organizzazione ha un router dei log, che gestisce il flusso delle voci di log tramite i sink a livello di risorsa. Un router dei log gestisce anche il flusso di una voce di log attraverso i sink che si trovano nella gerarchia delle risorse della voce. I sink controllano il modo in cui le voci di log vengono indirizzate alle destinazioni.

Un router dei log archivia temporaneamente una voce di log. Questo comportamento protegge da interruzioni temporanee e interruzioni che potrebbero verificarsi quando una voce di log passa attraverso i sink. Lo spazio di archiviazione temporaneo non protegge dagli errori di configurazione.

Lo spazio di archiviazione temporaneo di un router dei log è diverso dallo spazio di archiviazione a lungo termine fornito dai bucket Logging.

Le voci di log in entrata con timestamp precedenti al periodo di conservazione dei log o successivi alla data odierna di più di 24 ore vengono eliminate.

Informazioni sui sink di log

Quando un sink di log riceve una voce di log, determina se deve ignorarla o indirizzarla. Questa decisione viene presa confrontando la voce di log con i filtri nel sink di log. Quando la voce di log viene indirizzata, il sink di log la invia alla destinazione specificata dal sink di log. La destinazione può essere un progetto, una posizione di archiviazione o un servizio.

I sink di log appartengono a una determinata Google Cloud risorsa Google Cloud :progetti, account di fatturazione, cartelle e organizzazioni. Queste risorse contengono anche più sink di log. Quando una risorsa riceve una voce di log, ogni sink di log nella risorsa valuta la voce di log in modo indipendente. Di conseguenza, più sink di log possono instradare la stessa voce di log.

Per impostazione predefinita, i dati di log vengono archiviati nel progetto di origine. Tuttavia, esistono diversi motivi per cui potresti voler modificare questa configurazione:

  • Per centralizzare l'archiviazione dei dati di log.
  • Per unire i dati dei log ad altri dati aziendali.
  • Per organizzare i dati di log in modo utile.
  • Per trasmettere i log ad altre applicazioni, altri repository o terze parti. Ad esempio, potresti voler esportare i log da Google Cloud per visualizzarli su una piattaforma di terze parti. Per esportare le voci di log, crea un sink di log che le indirizzi a Pub/Sub.

Un sink di log configurato in modo errato non esegue il routing delle voci di log. Quando una destinazione è configurata in modo errato, vengono scritte voci di log che segnalano i dettagli dell'errore. Inoltre, viene inviata un'email ai contatti essenziali per la risorsa. Per saperne di più, vedi Risoluzione dei problemi: visualizzare gli errori.

I sink di log non possono eseguire il routing retroattivo delle voci di log. ovvero, un sink di log non può instradare una voce di log ricevuta prima della creazione del sink. Allo stesso modo, se un sink è configurato in modo errato, instrada solo le voci di log che arrivano dopo la risoluzione dell'errore di configurazione. Tuttavia, puoi copiare retroattivamente i dati di log da un bucket di log a Cloud Storage. Per ulteriori informazioni, consulta la sezione Copia dei log.

Supporto di organizzazioni e cartelle

Per aiutarti a gestire i dati di log in un'organizzazione o in una cartella, puoi svolgere le seguenti operazioni:

  • Puoi creare sink aggregati, che indirizzano le voci di log per un'organizzazione o una cartella e i relativi elementi secondari alla destinazione specificata dal sink. Esistono due tipi di sink aggregati:

    • Sink aggregati non di intercettazione
    • Intercettazione dei sink aggregati

    La differenza tra questi due tipi di sink è che l'intercettazione dei sink a un livello della gerarchia delle risorse può influire sul routing delle risorse ai livelli inferiori della gerarchia. I sink non intercettanti non influiscono sul routing per altre risorse. Quando un sink di intercettazione in una risorsa corrisponde a una voce di log, la voce di log non viene inviata ai sink nelle risorse figlio, con l'eccezione che la voce di log viene sempre inviata al sink di log _Required nella risorsa in cui ha origine la voce di log.

  • Puoi configurare le impostazioni predefinite delle risorse per specificare la configurazione del sink _Default creato dal sistema per le nuove risorse in un'organizzazione o una cartella. Ad esempio, puoi utilizzare queste impostazioni per disattivare il sink _Default o specificare i filtri in quel sink.

Esempi di routing

Questa sezione illustra come una voce di log che ha origine in un progetto potrebbe fluire attraverso i sink nella sua gerarchia delle risorse.

Esempio: non esistono sink aggregati

Se non esistono sink aggregati nella gerarchia delle risorse della voce di log, la voce di log viene inviata ai sink di log nel progetto di origine. Un sink a livello di progetto indirizza la voce di log alla destinazione del sink quando la voce di log corrisponde al filtro di inclusione del sink, ma non corrisponde a nessuno dei filtri di esclusione del sink.

Esempio: esiste un sink aggregato non intercettante

Supponi che esista un sink aggregato non intercettante nella gerarchia delle risorse per una voce di log. Dopo che Log Router invia la voce di log al sink aggregato non intercettante, si verifica quanto segue:

  1. La route del sink aggregato non intercettante indirizza la voce di log alla destinazione del sink quando la voce di log corrisponde al filtro di inclusione, ma non corrisponde ad alcun filtro di esclusione.

  2. Il router di log invia la voce di log ai sink di log nel progetto in cui ha avuto origine la voce di log.

    Un sink a livello di progetto indirizza la voce di log alla destinazione del sink quando la voce di log corrisponde al filtro di inclusione del sink, ma non corrisponde a nessuno dei filtri di esclusione del sink.

Esempio: esiste un sink aggregato di intercettazione

Supponi che esista un sink aggregato di intercettazione nella gerarchia delle risorse per una voce di log. Dopo che Log Router invia la voce di log al sink aggregato di intercettazione, si verifica una delle seguenti situazioni:

  • La voce di log corrisponde al filtro di inclusione, ma non a nessun filtro di esclusione:

    1. La voce di log viene indirizzata alla destinazione del sink aggregato di intercettazione.
    2. La voce di log viene inviata al sink _Required nel progetto in cui è stata creata.
  • La voce di log non corrisponde al filtro di inclusione o corrisponde ad almeno un filtro di esclusione:

    1. La voce di log non viene instradata dal sink aggregato di intercettazione.
    2. Il router di log invia la voce di log ai sink di log nel progetto in cui ha avuto origine la voce di log.

      Un sink a livello di progetto indirizza la voce di log alla destinazione del sink quando la voce di log corrisponde al filtro di inclusione del sink, ma non corrisponde a nessuno dei filtri di esclusione del sink.

Filtri del sink di log

Ogni sink di log contiene un filtro di inclusione e può contenere più filtri di esclusione. Questi filtri determinano se il sink di log indirizza una voce di log alla destinazione del sink. Se non specifichi alcun filtro, ogni voce di log viene indirizzata alla destinazione del sink.

Una voce di log viene indirizzata da un sink di log in base a queste regole:

  • Se la voce di log non corrisponde al filtro di inclusione, non viene instradata. Quando un sink non specifica un filtro di inclusione, ogni voce di log corrisponde a quel filtro.

  • Se la voce di log corrisponde al filtro di inclusione e ad almeno un filtro di esclusione, non viene instradata.

  • Se la voce di log corrisponde al filtro di inclusione e non corrisponde ad alcun filtro di esclusione, viene indirizzata alla destinazione del sink.

I filtri in un sink di log vengono specificati utilizzando il linguaggio di query di Logging.

Non puoi utilizzare i filtri di esclusione per ridurre il consumo della tua quota API entries.write o il numero di chiamate API entries.write. I filtri di esclusione vengono applicati dopo che le voci di log vengono ricevute dall'API Logging.

Sink di log creati dal sistema

Per ogni progetto, account di fatturazione, cartella e organizzazione Google Cloud , Cloud Logging crea due sink di log, uno denominato _Required e l'altro denominato _Default. I filtri di inclusione ed esclusione per questi sink verificano che ogni voce di log che raggiunge la risorsa venga indirizzata da uno di questi sink. Entrambi i sink indirizzano i dati di log a un bucket di log che si trova nella stessa risorsa del sink di log.

Il resto di questa sezione fornisce informazioni sui filtri e sulle destinazioni dei sink di log creati dal sistema.

Sink di log _Required

Il sink di log _Required in una risorsa esegue il routing di un sottoinsieme di audit log al bucket di log _Required della risorsa. Questo sink non specifica filtri di esclusione e il filtro di inclusione è il seguente:

LOG_ID("cloudaudit.googleapis.com/activity") OR
LOG_ID("externalaudit.googleapis.com/activity") OR
LOG_ID("cloudaudit.googleapis.com/system_event") OR
LOG_ID("externalaudit.googleapis.com/system_event") OR
LOG_ID("cloudaudit.googleapis.com/access_transparency") OR
LOG_ID("externalaudit.googleapis.com/access_transparency")

Il sink di log _Required corrisponde solo alle voci di log che hanno origine nella risorsa in cui è definito il sink di log _Required. Ad esempio, supponiamo che un sink di log indirizzi unavoce di logg delle attività dal progetto A al progetto B. Poiché la voce di log non ha origine nel progetto B, il sink di log _Required nel progetto B non instrada questa voce di log al bucket di log _Required.

Non puoi modificare o eliminare il sink di log _Required.

Sink di log _Default

Il sink di log _Default in una risorsa indirizza tutte le voci di log tranne quelle che corrispondono al filtro del sink di log _Required al bucket di log _Default della risorsa. Poiché il filtro di inclusione per questo sink è vuoto, corrisponde a tutte le voci di log. Tuttavia, il filtro di esclusione è configurato nel seguente modo:

NOT LOG_ID("cloudaudit.googleapis.com/activity") AND
NOT LOG_ID("externalaudit.googleapis.com/activity") AND
NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND
NOT LOG_ID("externalaudit.googleapis.com/system_event") AND
NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND
NOT LOG_ID("externalaudit.googleapis.com/access_transparency")

Puoi modificare e disabilitare il sink di log _Default. Ad esempio, puoi modificare il sink di log _Default e cambiare la destinazione. Puoi anche modificare qualsiasi filtro esistente e aggiungere filtri di esclusione.

Destinazioni sink

La destinazione di un sink può trovarsi in una risorsa diversa dal sink. Ad esempio, puoi utilizzare un sink di log per indirizzare le voci di log da un progetto a un bucket di log archiviato in un progetto diverso.

Sono supportate le seguenti destinazioni:

Google Cloud project

Seleziona questa destinazione quando vuoi che i sink di log nel progetto di destinazione reindirizzino le voci di log oppure quando hai creato un sink aggregato di intercettazione. I sink di log nel progetto che è la destinazione del sink possono reindirizzare le voci di log a qualsiasi destinazione supportata, tranne un progetto.

Bucket di log

Seleziona questa destinazione quando vuoi archiviare i dati dei log in risorse gestite da Cloud Logging. I dati dei log archiviati nei bucket dei log possono essere visualizzati e analizzati utilizzando servizi come Esplora log e Analisi dei log.

Se vuoi unire i dati di log ad altri dati aziendali, puoi archiviarli in un bucket di log e creare un set di dati BigQuery collegato. Un set di dati collegato è un set di dati di sola lettura su cui è possibile eseguire query come su qualsiasi altro set di dati BigQuery.

Set di dati BigQuery
Seleziona questa destinazione quando vuoi unire i dati di log con altri dati aziendali. Il set di dati specificato deve essere abilitato alla scrittura. Non impostare la destinazione di un sink su un set di dati BigQuery collegato. I set di dati collegati sono di sola lettura.
Bucket Cloud Storage
Seleziona questa destinazione quando vuoi archiviare i dati di log a lungo termine. Il bucket Cloud Storage può trovarsi nello stesso progetto in cui hanno origine le voci di log o in un progetto diverso. Le voci di log vengono archiviate come file JSON.
Argomento Pub/Sub
Seleziona questa destinazione quando vuoi esportare i dati di log da Google Cloud e poi utilizzare integrazioni di terze parti come Splunk o Datadog. Le voci di log vengono formattate in JSON e poi indirizzate a un argomento Pub/Sub.

Limitazioni delle destinazioni

Questa sezione descrive le limitazioni specifiche per la destinazione:

  • Se indirizzi le voci di log a un bucket di log in un progetto diverso, Error Reporting non le analizza. Google Cloud Per saperne di più, consulta la panoramica di Error Reporting.
  • Se indirizzi le voci di log a un set di dati BigQuery, questo deve essere abilitato alla scrittura. Non puoi indirizzare le voci di log a set di dati collegati, che sono di sola lettura.
  • Potrebbero essere necessarie diverse ore per l'avvio del routing delle voci di log per i nuovi sink che indirizzano i dati di log ai bucket Cloud Storage. Questi sink vengono elaborati ogni ora.
  • Si applicano le seguenti limitazioni quando la destinazione di un sink di log è un progetto Google Cloud :

    • Esiste un limite di un hop.
    • Le voci di log che corrispondono al filtro del sink di log _Required vengono instradate al bucket di log _Required del progetto di destinazione solo se hanno origine nel progetto di destinazione.
    • Solo i sink aggregati che si trovano nella gerarchia delle risorse di una voce di log elaborano la voce di log.

    Ad esempio, supponiamo che la destinazione di un sink di log nel progetto A sia il progetto B. Quindi, sono vere le seguenti affermazioni:

    • A causa del limite di un hop, i sink di log nel progetto B non possono reindirizzare le voci di log a un progetto Google Cloud .
    • Il bucket di log _Required del progetto B archivia solo le voci di log che hanno origine nel progetto B. Questo bucket di log non archivia voci di log provenienti da altre risorse, incluse quelle provenienti dal progetto A.
    • Se la gerarchia delle risorse del progetto A e del progetto B è diversa, una voce di log che un sink di log nel progetto A indirizza al progetto B non viene inviata ai sink aggregati nella gerarchia delle risorse del progetto B.
    • Se il progetto A e il progetto B hanno la stessa gerarchia delle risorse, le voci di log vengono inviate ai sink aggregati in quella gerarchia. Se una voce di log non viene intercettata da un sink aggregato, il router dei log la invia ai sink nel progetto A.

In che modo il routing delle voci di log influisce sulle metriche basate su log

Le metriche basate su log sono metriche di Cloud Monitoring derivate dal contenuto delle voci di log. Ad esempio, puoi utilizzare una metrica basata sui log per conteggiare il numero di voci di log che contengono un messaggio specifico o per estrarre le informazioni sulla latenza registrate nelle voci di log. Puoi visualizzare le metriche basate sui log nei grafici di Cloud Monitoring e le norme di avviso possono monitorare queste metriche.

Le metriche basate su log definite dal sistema si applicano a livello di progetto. Le metriche basate su log definite dall'utente possono essere applicate a livello di progetto o di bucket di log. Le metriche basate su log con ambito di bucket sono utili quando utilizzi sink aggregati per instradare le voci di log a un bucket di log e quando instradi le voci di log da un progetto a un bucket di log in un altro progetto.

Metriche basate su log definite dal sistema
Il router dei log conteggia una voce di log quando sono vere tutte le seguenti condizioni:
  • La voce di log passa attraverso i sink di log del progetto in cui è definita la metrica basata su log.
  • La voce di log è archiviata in un bucket di log. Il bucket di log può trovarsi in qualsiasi progetto.

    Ad esempio, supponiamo che il progetto A abbia un sink di log la cui destinazione è il progetto B. Supponi inoltre che i sink di log nel progetto B indirizzino le voci di log a un bucket di log. In questo scenario, le voci di log instradate dal progetto A al progetto B contribuiscono alle metriche basate su log definite dal sistema del progetto A. Queste voci di log contribuiscono anche alle metriche basate su log definite dal sistema del progetto B.

Metriche basate su log definite dall'utente
Il router dei log conteggia una voce di log quando sono vere tutte le seguenti condizioni:
  • La fatturazione è abilitata nel progetto in cui è definita la metrica basata su log.
  • Per le metriche con ambito di bucket, la voce di log viene archiviata nel bucket di log in cui è definita la metrica basata su log.
  • Per le metriche con ambito di progetto, la voce di log passa attraverso i sink di log del progetto in cui è definita la metrica basata su log.

Per ulteriori informazioni, consulta la panoramica delle metriche basate su log.

Best practice

Per le best practice sull'utilizzo del routing per la governance dei dati o per i casi d'uso comuni, consulta i seguenti documenti:

Esempi: centralizzare l'archiviazione dei log

Questa sezione descrive come potresti configurare l'archiviazione centralizzata. L'archiviazione centralizzata fornisce un unico punto in cui eseguire query sui dati dei log, il che semplifica le query quando cerchi tendenze o indaghi su problemi. Dal punto di vista della sicurezza, hai anche una posizione di archiviazione, che può semplificare le attività dei tuoi analisti della sicurezza.

Se centralizzi l'archiviazione dei log, valuta se inserire un vincolo nel progetto che archivia i dati di log. Un blocco può impedire l'eliminazione accidentale di un progetto. Per scoprire di più, consulta l'articolo Protezione dei progetti con blocchi.

Centralizzare l'archiviazione dei log per i progetti in una cartella

Supponiamo che tu gestisca una cartella e voglia centralizzare l'archiviazione delle voci di log. Per questo caso d'uso, puoi procedere nel seguente modo:

  1. Nella cartella, crea un progetto denominato CentralStorage.
  2. Crea un sink aggregato di intercettazione per la tua cartella e configuralo per indirizzare tutte le voci di log. Hai impostato la destinazione del sink in modo che sia il progetto denominato CentralStorage.

Quando arriva una voce di log che ha origine nella cartella o in una delle sue risorse secondarie, questa voce di log viene inviata al sink aggregato di intercettazione che hai creato. Questo sink instrada le voci di log al progetto denominato CentralStorage. I sink di log in questo progetto elaborano le voci di log:

  • Il sink di log _Default indirizza al bucket di log _Default tutte le voci di log che corrispondono al filtro del sink. Questo bucket di log è la tua posizione di archiviazione centralizzata.

  • Il sink di log _Required indirizza al bucket di log _Required le voci di log che corrispondono ai filtri del sink e che hanno origine nel progetto CentralStorage. Questo bucket di log non è una posizione di archiviazione centralizzata. Tuttavia, puoi archiviare centralmente tutti i tuoi dati di log. Per un esempio, vedi Memorizzare i log di controllo in una posizione centrale.

Al termine dell'elaborazione del sink aggregato, la voce di log viene inviata al sink di log _Required nella risorsa in cui è stata creata la voce di log. Quando la voce di log corrisponde al filtro nel sink di log _Required, viene indirizzata al bucket di log _Required della risorsa. Di conseguenza, ogni progetto Google Cloud nella tua cartella archivia le voci di log nel proprio bucket di log _Required.

Centralizzare l'archiviazione dei log per un insieme di progetti

Puoi anche archiviare le voci di log in un'unica posizione quando non hai un'organizzazione o una cartella. Ad esempio, potresti:

  1. Crea un progetto denominato CentralStorage.
  2. Per ogni progetto, tranne CentralStorage, modifica il sink di log _Default e imposta la destinazione sul progetto denominato CentralStorage.

Potresti chiederti perché l'esempio precedente imposta la destinazione dei sink di log _Default su un progetto anziché sul bucket di log _Default in quel progetto. I motivi principali sono la semplicità e la coerenza. Quando instradi le voci di log a un progetto, i sink di log nel progetto di destinazione controllano quali voci di log vengono archiviate e dove vengono archiviate. ovvero centralizzi la funzionalità di filtro e destinazione. Se vuoi modificare le voci di log archiviate o la loro posizione, devi modificare solo i sink di log in un progetto.

Centralizza l'archiviazione dei log per gli audit log

Puoi archiviare centralmente le voci di log che corrispondono al sink di log _Required. Se vuoi archiviare queste voci di log in un'unica posizione, esegui una delle seguenti operazioni:

  • Crea sink di log che indirizzano le voci di log corrispondenti al sink di log _Required a un bucket di log centralizzato.

  • Configura i sink di log come nei due esempi precedenti, quindi aggiungi un sink di log nel progetto di destinazione che indirizza le voci di log che corrispondono al sink di log _Required a un bucket di log. Puoi anche modificare i filtri nel sink di log _Default.

Prima di implementare una strategia di questo tipo, consulta le linee guida sui prezzi.

Prezzi

Per informazioni sui prezzi di Cloud Logging, consulta la pagina Prezzi di Google Cloud Observability.

Passaggi successivi

Per informazioni su come instradare e archiviare i dati di Cloud Logging, consulta i seguenti documenti: