Elaborazione su larga scala dei log mediante Cloud Dataflow

Last reviewed 2015-11-19 UTC

Google Cloud fornisce l'infrastruttura scalabile necessaria per gestire operazioni di analisi dei log di grandi dimensioni. Questo tutorial mostra come utilizzare Google Cloud per creare pipeline di analisi che elaborano voci di log da più origini. Combina i dati dei log in modo da aiutarti a estrarre informazioni significative e mantenere insight derivati dai dati, che possono essere utilizzati per analisi, revisione e generazione di report.

Panoramica

Man mano che la tua applicazione diventa più complessa, ricavare insight dai dati acquisiti nei tuoi log diventa più difficile. I log provengono da un numero crescente di origini, quindi possono essere difficili da raccogliere ed eseguire query per informazioni utili. Creare, gestire e gestire la tua infrastruttura per analizzare i dati di log su larga scala può richiedere una vasta esperienza nell'esecuzione di sistemi distribuiti e di archiviazione. Questo tipo di infrastruttura dedicata spesso rappresenta una spesa capitale una tantum, con conseguente capacità fissa, che rende difficile la scalabilità oltre l'investimento iniziale. Queste limitazioni possono influire sulla tua attività perché portano a rallentamenti nel generare insight significativi e strategici dai tuoi dati.

Questa soluzione mostra come superare queste limitazioni utilizzando i prodotti Google Cloud, come illustrato nel diagramma seguente.

La soluzione utilizza diversi componenti Google Cloud

In questa soluzione, un insieme di microservizi di esempio viene eseguito su Google Kubernetes Engine (GKE) per implementare un sito web. Cloud Logging raccogli i log da questi servizi e li salva nei bucket Cloud Storage. Dataflow elabora quindi i log estraendo metadati e aggregando i dati di base di computing. La pipeline Dataflow è progettata per elaborare gli elementi di log ogni giorno per generare metriche aggregate per i tempi di risposta del server, in base ai log per ciascun giorno. Infine, l'output di Dataflow viene caricato in tabelle BigQuery, dove possono essere analizzate per fornire business intelligence. Questa soluzione spiega anche come puoi modificare la pipeline in modo che venga eseguita in modalità di flusso, per un'elaborazione dei log asincrona a bassa latenza.

Questo tutorial fornisce una pipeline Dataflow di esempio, un'applicazione web di esempio, informazioni sulla configurazione e i passaggi per eseguire l'esempio.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

  • GKE per il deployment di microservizi.
  • Cloud Logging per ricevere ed esportare i log.
  • Cloud Storage per l'archiviazione dei log esportati in modalità batch.
  • Pub/Sub per lo streaming dei log esportati in modalità di streaming
  • Dataflow per l'elaborazione dei dati dei log.
  • BigQuery per l'archiviazione dell'output di elaborazione e il supporto di query avanzate su tale output.

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, Cloud Storage, Pub/Sub, Dataflow, GKE and Logging APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, Cloud Storage, Pub/Sub, Dataflow, GKE and Logging APIs.

    Enable the APIs

Configurazione dell'ambiente

In questo tutorial, utilizzerai Cloud Shell per inserire comandi. Cloud Shell ti dà accesso alla riga di comando nella console di Google Cloud e include Google Cloud CLI e altri strumenti che devi sviluppare in Google Cloud. Cloud Shell viene visualizzato come finestra nella parte inferiore della console Google Cloud. L'inizializzazione potrebbe richiedere alcuni minuti, ma la finestra viene visualizzata immediatamente.

Per utilizzare Cloud Shell per configurare il tuo ambiente e clonare il repository Git utilizzato in questo tutorial:

  1. In Cloud Console, apri Cloud Shell.

    Apri Cloud Shell

  2. Assicurati di lavorare al progetto che hai creato. Sostituisci [YOUR_PROJECT_ID] con il progetto Google Cloud che hai appena creato.

    gcloud config set project [YOUR_PROJECT_ID]
    
  3. Imposta la zona di Compute Engine predefinita. Ai fini di questo tutorial, è us-east1. Se esegui il deployment in un ambiente di produzione, esegui il deployment in un'area geografica a tua scelta.

    export REGION=us-east1
    gcloud config set compute/region $REGION
    

Clonazione del repository di esempio

  • Clona il repository contenente gli script e la logica dell'applicazione che utilizzi in questo tutorial.

    git clone https://github.com/GoogleCloudPlatform/processing-logs-using-dataflow.git
    cd processing-logs-using-dataflow/services
    

Configura variabili di ambiente

# name your bucket
export PROJECT_ID=[YOUR_PROJECT_ID]
# name your GKE cluster
export CLUSTER_NAME=cluster-processing-logs-using-dataflow

# name the bucket for this tutorial
export BUCKET_NAME=${PROJECT_ID}-processing-logs-using-dataflow

# name the logging sink for this tutorial
export SINK_NAME=sink-processing-logs-using-dataflow

# name the logging sink for this tutorial
export DATASET_NAME=processing_logs_using_dataflow

Esegui il deployment dell'applicazione di esempio in un nuovo cluster Google Kubernetes Engine

# create the cluster and deploy sample services
./cluster.sh $PROJECT_ID $CLUSTER_NAME up

Informazioni sul deployment delle applicazioni di esempio

Il deployment di esempio crea un'app di shopping. In questo esempio, gli utenti possono visitare la home page di un sito di vendita al dettaglio, cercare singoli prodotti e quindi provare a localizzare i prodotti nei vicini negozi fisici. L'app è composta da tre microservizi: HomeService, BrowseService e LocateService. Ogni servizio è disponibile a partire da un endpoint API in uno spazio dei nomi condiviso. Gli utenti accedono ai servizi aggiungendo /home, /browse e /locate all'URL di base.

L'applicazione è configurata per registrare le richieste HTTP in entrata in stdout.

Utilizzo di Google Kubernetes Engine con Cloud Logging

In questo esempio, i microservizi vengono eseguiti in un cluster Kubernetes Engine, che è un gruppo di istanze Compute Engine, o nodi, che eseguono Kubernetes. Per impostazione predefinita, GKE configura ciascun nodo in modo da fornire una serie di servizi, tra cui il monitoraggio, il controllo di integrità e il logging centralizzato. Questa soluzione utilizza il supporto integrato per Logging per inviare i log da ogni microservizio a Cloud Storage. In alternativa alle applicazioni che registrano informazioni nei file, non coperte da questa soluzione, puoi configurare il logging a livello di cluster con Kubernetes.

Ogni microservizio viene eseguito su un singolo pod nel cluster. Ogni pod viene eseguito su un nodo ed è esposto come un singolo endpoint HTTP utilizzando i servizi GKE.

I microservizi vengono eseguiti su singoli nodi.

Ogni nodo nel cluster esegue un agente Cloud Logging che acquisisce i messaggi di log. Una volta che i log sono disponibili in Logging, uno script indirizza automaticamente i log a un bucket Cloud Storage utilizzando il supporto Logging disponibile da gcloud CLI.

Puoi anche configurare i log da esportare in Cloud Storage utilizzando Esplora log. Questa soluzione utilizza l'interfaccia a riga di comando gcloud perché è necessaria durante l'esportazione di più log.

Quando utilizzi Cloud Storage come destinazione di esportazione dei log, le voci di tipo LogEntry vengono salvate in batch orari in singoli file JSON. Queste voci strutturate di logging includono metadati aggiuntivi che specificano quando è stato creato ciascun messaggio di log, quale risorsa o istanza lo ha generato, il suo livello di gravità e così via. Nell'esempio seguente di una voce di logging, nell'elemento structPayload.log puoi vedere il messaggio di log originale generato dal microservizio:

 {
    "insertId": "ugjuig3j77zdi",
    "labels": {
        "compute.googleapis.com/resource_name": "fluentd-gcp-v3.2.0-9q4tr",
        "container.googleapis.com/namespace_name": "default",
        "container.googleapis.com/pod_name": "browse-service-rm7v9",
        "container.googleapis.com/stream": "stdout"
    },
    "logName": "projects/processing-logs-at-scale/logs/browse-service",
    "receiveTimestamp": "2019-03-09T00:33:30.489218596Z",
    "resource": {
        "labels": {
            "cluster_name": "cluster-processing-logs-using-dataflow",
            "container_name": "browse-service",
            "instance_id": "640697565266753757",
            "namespace_id": "default",
            "pod_id": "browse-service-rm7v9",
            "project_id": "processing-logs-at-scale",
            "zone": "us-east1-d"
        },
        "type": "container"
    },
    "severity": "INFO",
    "textPayload": "[GIN] 2019/03/09 - 00:33:23 | 200 |     190.726µs |      10.142.0.6 | GET      /browse/product/1\n",
    "timestamp": "2019-03-09T00:33:23.743466177Z"
 }

Configura il logging

Dopo che il cluster è in esecuzione e dopo il deployment dei servizi, puoi configurare il logging per l'applicazione.

Innanzitutto, ottieni le credenziali per il cluster, poiché kubectl viene utilizzato per ottenere i nomi dei servizi per configurare i sink di esportazione di Cloud Logging.

gcloud container clusters get-credentials  $CLUSTER_NAME --region $REGION

Nel repository di codice, services/logging.sh configura i componenti necessari per la modalità flusso o batch. Lo script accetta i seguenti parametri:

logging.sh [YOUR_PROJECT_ID] [BUCKET_NAME] [streaming|batch] [up|down]

Ai fini di questo tutorial, avvia il logging in batch:

./logging.sh $PROJECT_ID $BUCKET_NAME batch up

I seguenti passaggi mostrano i comandi eseguiti per la modalità batch:

  1. Creare un bucket Cloud Storage.

    gsutil -q mb gs://[BUCKET_NAME]

  2. Consenti a Cloud Logging di accedere al bucket.

    gsutil -q acl ch -g cloud-logs@google.com:O gs://[BUCKET_NAME]

  3. Per ogni microservizio, configura le esportazioni di Cloud Logging utilizzando un sink.

    gcloud logging sinks create [SINK_NAME] \ storage.googleapis.com/[BUCKET_NAME] \ --log-filter="kubernetes.home_service..." --project=[YOUR_PROJECT_ID]

Aggiorna le autorizzazioni per la destinazione

Le autorizzazioni della destinazione, in questo caso il bucket Cloud Storage, non vengono modificate quando crei un sink. Devi modificare le impostazioni delle autorizzazioni del tuo bucket Cloud Storage per concedere l'autorizzazione in scrittura al tuo sink.

Per aggiornare le autorizzazioni per il bucket Cloud Storage:

  1. Identifica l'identità del creator del sink:

    1. Vai alla pagina Router di log:

      Vai alla pagina Router dei log

      La pagina Router di log contiene un riepilogo dei sink, inclusa l'identità dell'autore del sink.

    2. IMPORTANTE: per ciascuno dei tre (3) sink, è presente un'email dell'account di servizio separata a cui devono essere concesse le autorizzazioni per il bucket Cloud Storage

  2. Da Google Cloud Console, fai clic su Archiviazione > Browser:

    Vai al browser

  3. Per aprire la visualizzazione dettagliata, fai clic sul nome del bucket.

  4. Seleziona Autorizzazioni e fai clic su Aggiungi entità.

  5. Imposta il Ruolo su Storage Object Creator e inserisci l'identità dell'autore del sink.

Per ulteriori informazioni, consulta la sezione Autorizzazioni di destinazione.

È possibile verificare i percorsi degli oggetti log utilizzando il seguente comando:

gsutil ls gs://$BUCKET_NAME | grep service

Quando l'output contiene tutte e tre le voci, puoi procedere con i passaggi per eseguire la pipeline di dati:

 gs://$BUCKET_NAME/browse-service/
 gs://$BUCKET_NAME/home-service/
 gs://$BUCKET_NAME/locate-service/

Crea il set di dati BigQuery

bq mk $DATASET_NAME

Generare un carico sui servizi dell'applicazione

Installa le utilità del server HTTP Apache

Utilizzi lo strumento di benchmarking del server HTTP Apache (ab) per generare il carico sui servizi.

sudo apt-get update

sudo apt-get install -y apache2-utils

Lo script della shell load.sh genera un carico sui microservizi richiedendo risposte da HomeService, BrowseService e LocateService.

Un singolo set di caricamento comprende una richiesta al servizio home e 20 richieste (20) ciascuna ai servizi di navigazione e localizzazione.

L'opzione seguente genera mille (1000) set di carico (con contemporaneità impostata su 3 richieste simultanee)

cd ../services
./load.sh 1000 3

Lascia in esecuzione per alcuni minuti per creare una quantità sufficiente di log.

Avvia la pipeline di Dataflow

Dopo che una quantità sufficiente di traffico ha raggiunto i servizi, puoi avviare la pipeline di Dataflow.

Ai fini di questo tutorial, la pipeline di Dataflow viene eseguita in modalità batch. Lo script della shell pipeline.sh avvia manualmente la pipeline.

cd ../dataflow
./pipeline.sh $PROJECT_ID $DATASET_NAME $BUCKET_NAME run

Comprendere la pipeline Dataflow

Dataflow può essere utilizzato per molti tipi di attività di elaborazione dati. L'SDK Dataflow fornisce un modello di dati unificato che può rappresentare un set di dati di qualsiasi dimensione, incluso un set di dati illimitato o illimitato proveniente da un'origine dati che si aggiorna continuamente. È adatto per lavorare con i dati di log in questa soluzione. Il servizio gestito Dataflow può eseguire job batch e flussi. Ciò significa che puoi utilizzare un unico codebase per l'elaborazione basata su eventi basata su eventi in modo asincrono o sincrono.

L'SDK Dataflow fornisce rappresentazioni di dati semplici tramite una classe di raccolta specializzata denominata PCollection. L'SDK fornisce trasformazioni di dati integrate e personalizzate tramite la classe PTransform. In Dataflow, le trasformazioni rappresentano la logica di elaborazione di una pipeline. Le trasformazioni possono essere utilizzate per una serie di operazioni di elaborazione come l'unione dei dati, il calcolo matematico dei valori, il filtro dell'output dei dati o la conversione dei dati da un formato all'altro. Per ulteriori informazioni su pipeline, PCollection, trasformazioni e origini e sink di I/O, consulta il modello di programmazione Dataflow.

Il seguente diagramma mostra le operazioni della pipeline per i dati di log memorizzati in Cloud Storage:

I passaggi operativi per la pipeline.

Sebbene il diagramma possa sembrare complesso, Dataflow semplifica la creazione e l'utilizzo della pipeline. Le seguenti sezioni descrivono le operazioni specifiche in ogni fase della pipeline.

Ricezione dei dati

La pipeline inizia a utilizzare l'input dai bucket Cloud Storage che contengono i log dei tre microservizi. Ogni raccolta di log diventa un PCollection di elementi String, dove ogni elemento corrisponde a un singolo oggetto LogEntry. Nello snippet seguente, i tipi homeLogs, browseLogs e locateLogs sono di tipo PCollection<String>:

homeLogs = p.apply("homeLogsTextRead", TextIO.read().from(options.getHomeLogSource()));
browseLogs = p.apply("browseLogsTextRead", TextIO.read().from(options.getBrowseLogSource()));
locateLogs = p.apply("locateLogsTextRead", TextIO.read().from(options.getLocateLogSource()));

Per affrontare le sfide di un set di dati in continuo aggiornamento, l'SDK Dataflow utilizza una tecnica chiamata windowing. La funzionalità di suddivisione prevede la suddivisione logica dei dati in una PCollection in base ai timestamp dei singoli elementi. Poiché in questo caso il tipo di origine è TextIO, tutti gli oggetti vengono inizialmente letti in un'unica finestra globale, che è il comportamento predefinito.

Raccolta dei dati negli oggetti

Il passaggio successivo combina le singole PCollection di microservizi in una singola PCollection utilizzando l'operazione Flatten.

PCollection<String> allLogs = PCollectionList
  .of(homeLogs)
  .and(browseLogs)
  .and(locateLogs)
  .apply(Flatten.<String>pCollections());

Questa operazione è utile perché ogni PCollection di origine contiene lo stesso tipo di dati e utilizza la stessa strategia di Windowsing globale. Sebbene le origini e la struttura di ciascun log siano le stesse in questa soluzione, puoi estendere questo approccio in uno in cui l'origine e la struttura sono diverse.

Con una singola PCollection creata, ora puoi elaborare i singoli elementi String utilizzando una trasformazione personalizzata che esegue diversi passaggi nella voce di log. Ecco i passaggi illustrati nel diagramma seguente:

La trasformazione elabora i messaggi stringa per creare i messaggi di log.

  • Deserializzare la stringa JSON in un oggetto Java LogEntry di Cloud Logging.
  • Estrai il timestamp dai metadati LogEntry.
  • Estrai i seguenti singoli campi dal messaggio di log utilizzando le espressioni regolari: timestamp, responseTime, httpStatusCode, httpMethod, source indirizzo IP ed endpoint destination. Utilizza questi campi per creare un oggetto personalizzato LogMessage con timestamp.
  • Visualizza gli oggetti LogMessage in un nuovo PCollection.

Il seguente codice esegue i passaggi seguenti:

PCollection<LogMessage> allLogMessages = allLogs
  .apply("allLogsToLogMessage", ParDo.of(new EmitLogMessageFn(outputWithTimestamp, options.getLogRegexPattern())));

Aggregazione dei dati in base ai giorni

Ricorda che l'obiettivo è elaborare gli elementi ogni giorno per generare metriche aggregate in base ai log per ogni giorno. Per ottenere questa aggregazione è necessaria una funzione di finestre che suddivide i dati per giorno, il che è possibile perché ogni LogMessage nella PCollection ha un timestamp. Dopo che Dataflow partiziona la PCollection lungo i confini giornalieri, le operazioni che supportano le PCollection con finestra rispettano lo schema di Windowsing.

PCollection<LogMessage> allLogMessagesDaily = allLogMessages
  .apply("allLogMessageToDaily", Window.<LogMessage>into(FixedWindows.of(Duration.standardDays(1))));

Con una singola PCollection a finestre, ora puoi calcolare metriche giornaliere aggregate su tutte e tre le origini di log di più giorni eseguendo un singolo job Dataflow.

PCollection<KV<String,Double>> destMaxRespTime = destResponseTimeCollection
  .apply(Max.<String>doublesPerKey());
 // .apply(Combine.<String,Double,Double>perKey(new Max.doublesPerKey()));

PCollection<KV<String,Double>> destMeanRespTime = destResponseTimeCollection
  .apply(Mean.<String,Double>perKey());

In primo luogo, una trasformazione prende gli oggetti LogMessage come input e poi genera un PCollection di coppie chiave-valore che mappano gli endpoint di destinazione come chiavi ai valori del tempo di risposta, come illustrato nel diagramma seguente.

Calcolo delle metriche giornaliere aggregate.

Con questa PCollection, puoi calcolare due metriche aggregate: il tempo di risposta massimo per destinazione e il tempo medio di risposta per destinazione. Poiché la PCollection è ancora partizionata per giorno, l'output di ogni calcolo rappresenta i dati di log di un singolo giorno. Questo significa che hai due PCollection: una contenente il tempo di risposta massimo per destinazione al giorno e una contenente il tempo medio di risposta per destinazione al giorno.

Caricamento dei dati in BigQuery

Il passaggio finale della pipeline genera le PCollection derivanti in BigQuery per l'analisi e il data warehousing downstream.

Innanzitutto, la pipeline trasforma la PCollection che contiene oggetti LogMessage per tutte le origini log in una PCollection di oggetti TableRow BigQuery. Questo passaggio è necessario per utilizzare il supporto integrato in Dataflow per utilizzare BigQuery come sink per una pipeline.

PCollection<TableRow> logsAsTableRows = allLogMessagesDaily
  .apply("logMessageToTableRow", ParDo.of(new LogMessageTableRowFn()));

Le tabelle BigQuery richiedono schemi definiti. Per questa soluzione, gli schemi vengono definiti in LogAnalyticsPipelineOptions.java utilizzando un'annotazione con valore predefinito. Ad esempio, lo schema per la tabella del tempo massimo di risposta è definito come segue:

@Default.String("destination:STRING,aggResponseTime:FLOAT")

Un'operazione sulle PCollection che contengono i valori dei tempi di risposta aggregati le converte in PCollection di oggetti TableRow, applicando gli schemi appropriati e creando le tabelle, se non sono presenti.

logsAsTableRows.apply("allLogsToBigQuery", BigQueryIO.writeTableRows()
  .to(options.getAllLogsTableName())
  .withSchema(allLogsTableSchema)
  .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
  .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED));

Questa soluzione aggiunge sempre nuovi dati ai dati esistenti. È una scelta appropriata perché questa pipeline viene eseguita su base periodica per analizzare i nuovi dati di log. Tuttavia, è possibile troncare i dati della tabella esistente o scrivere nella tabella solo se è vuoto, se una di queste opzioni ha senso in uno scenario diverso.

Esecuzione di query sui dati da BigQuery

La console di BigQuery consente di eseguire query sui dati di output e connettersi a strumenti di business intelligence di terze parti come Tableau e QlikView per ulteriori analisi.

  1. In BigQuery, apri Google Cloud Console.

    Apri BigQuery

  2. Fai clic sul progetto processing-logs-at-scale e poi sul set di dati processing_logs_using_dataflow.

  3. Seleziona all_logs_table e nel riquadro dei dati seleziona Anteprima, per visualizzare un esempio dei dati nella tabella Tutti i log.

  4. Nell'Editor query inserisci la seguente query:

    SELECT *
    FROM `processing_logs_using_dataflow.max_response_time_table`
    ORDER BY aggResponseTime DESC
    LIMIT 100;
    
  5. Per eseguire la query, fai clic su Esegui.

    La console di BigQuery esegue una query sui dati di log.

Utilizzo di una pipeline in modalità flusso

L'esempio include il supporto per eseguire la pipeline in modalità flusso o batch. Bastano pochi passaggi per cambiare la pipeline da flusso in modalità flusso a flusso. Innanzitutto, la configurazione di Cloud Logging esporta le informazioni di logging in Pub/Sub anziché in Cloud Storage. Il passaggio successivo consiste nel modificare le origini di input nella pipeline Dataflow da Cloud Storage agli abbonamenti a argomenti Pub/Sub. È necessaria una sottoscrizione per ogni origine di input.

La pipeline Pub/Sub utilizza abbonamenti.

Puoi vedere i comandi SDK in uso in logging.sh.

Le raccolte create da dati di input Pub/Sub utilizzano una finestra globale senza limiti. Tuttavia, le singole voci includono già i timestamp. Ciò significa che non è necessario estrarre i dati del timestamp dall'oggetto Cloud Logging LogEntry, ma estrarre i timestamp del log per creare gli oggetti LogMessage personalizzati.

Quando utilizzi la pipeline Pub/Sub, puoi estrarre i timestamp dai log

Il resto della pipeline rimane invariato, incluse operazioni di Appiattimento, trasformazione, aggregazione e output a valle.

Monitoraggio della pipeline

Quando esegui il job Dataflow, puoi utilizzare la Google Cloud Console per monitorare l'avanzamento e visualizzare le informazioni su ogni fase della pipeline.

L'immagine seguente mostra Google Cloud Console durante l'esecuzione di una pipeline di esempio:

La console Google Cloud mostra un job Dataflow in esecuzione.

Eseguire la pulizia

Elimina il progetto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Elimina tutti i componenti

Assicurati che alcune variabili di ambiente siano ancora impostate sui valori utilizzati durante la configurazione

  1. Elimina il set di dati BigQuery:

    bq rm $DATASET_NAME
    
  2. Disattiva le esportazioni ((logging_name)). Questo passaggio elimina le esportazioni e il bucket Cloud Storage specificato:

    cd ../services
    ./logging.sh $PROJECT_ID $BUCKET_NAME batch down
    
  3. Elimina il cluster di Compute Engine utilizzato per eseguire le applicazioni web di esempio:

    /cluster.sh $PROJECT_ID $CLUSTER_NAME down
    

Ampliare la soluzione

La pipeline e l'insieme di operazioni descritti in questa soluzione possono essere estesi in vari modi. Le estensioni più evidenti sarebbero quelle di eseguire ulteriori aggregazioni nei dati di LogMessage. Ad esempio, se nell'output del log sono state incluse informazioni sugli utenti anonimizzate o relative alle sessioni, potresti creare aggregazioni relative alle attività degli utenti. Puoi anche utilizzare la trasformazione Approssimativo Quantianti per generare una distribuzione dei tempi di risposta.

Passaggi successivi