Monitoraggio delle prestazioni della pipeline mediante Cloud Profiler

Cloud Profiler è un profiler statistico a basso overhead che raccoglie continuamente informazioni sull'utilizzo della CPU e sull'allocazione della memoria dalle applicazioni di produzione. Per maggiori dettagli, consulta Concetti di profilazione. Per risolvere i problemi o monitorare le prestazioni della pipeline, utilizza l'integrazione di Dataflow con Cloud Profiler per identificare le parti del codice della pipeline che consumano la maggior parte delle risorse.

Per suggerimenti per la risoluzione dei problemi e strategie di debug per la creazione o l'esecuzione della pipeline Dataflow, consulta Risoluzione dei problemi e debug delle pipeline.

Prima di iniziare

Comprendi i concetti di profilazione e acquisisci familiarità con l'interfaccia di Profiler. Per informazioni su come iniziare a utilizzare l'interfaccia Profiler, consulta Selezionare i profili da analizzare.

L'API Cloud Profiler deve essere abilitata per il tuo progetto prima dell'avvio del job. Viene attivata automaticamente la prima volta che visita la pagina Profiler. In alternativa, puoi abilitare l'API Cloud Profiler utilizzando lo strumento a riga di comando gcloud di Google Cloud CLI o la console Google Cloud.

Per utilizzare Cloud Profiler, il tuo progetto deve disporre di una quota sufficiente. Inoltre, l'account di servizio worker per il job Dataflow deve disporre delle autorizzazioni appropriate per Profiler. Ad esempio, per creare profili, l'account di servizio worker deve disporre dell'autorizzazione cloudprofiler.profiles.create, inclusa nel ruolo IAM Agente Cloud Profiler (roles/cloudprofiler.agent). Per maggiori informazioni, consulta Controllo dell'accesso con IAM.

Abilita Cloud Profiler per le pipeline Dataflow

Cloud Profiler è disponibile per le pipeline Dataflow scritte nell'SDK Apache Beam per Java e Python, versione 2.33.0 o successive. Le pipeline Python devono utilizzare Dataflow Runner v2. Cloud Profiler può essere abilitato all'inizio della pipeline. Il overhead ammortizzato di CPU e memoria dovrebbe essere inferiore all'1% per le pipeline.

Java

Per abilitare la profilazione della CPU, avvia la pipeline con l'opzione seguente.

--dataflowServiceOptions=enable_google_cloud_profiler

Per abilitare la profilazione dell'heap, avvia la pipeline con le opzioni seguenti. La profilazione heap richiede Java 11 o versioni successive.

--dataflowServiceOptions=enable_google_cloud_profiler

--dataflowServiceOptions=enable_google_cloud_heap_sampling

Python

Per utilizzare Cloud Profiler, la pipeline Python deve essere eseguita con Dataflow Runner v2.

Per abilitare la profilazione della CPU, avvia la pipeline con l'opzione seguente. La profilazione heap non è ancora supportata per Python.

--dataflow_service_options=enable_google_cloud_profiler

Go

Per abilitare la profilazione di CPU e heap, avvia la pipeline con l'opzione seguente.

--dataflow_service_options=enable_google_cloud_profiler

Se esegui il deployment delle tue pipeline da modelli Dataflow e vuoi attivare Cloud Profiler, specifica i flag enable_google_cloud_profiler e enable_google_cloud_heap_sampling come esperimenti aggiuntivi.

Console

Se utilizzi un modello fornito da Google, puoi specificare i flag nella pagina Crea job da modello di Dataflow nel campo Esperimenti aggiuntivi.

gcloud

Se utilizzi Google Cloud CLI per eseguire i modelli, gcloud dataflow jobs run o gcloud dataflow flex-template run, a seconda del tipo di modello, utilizza l'opzione --additional- experiments per specificare i flag.

API

Se utilizzi l'API REST per eseguire i modelli, a seconda del tipo di modello, specifica i flag utilizzando il campo additionalExperiments dell'ambiente di runtime, RuntimeEnvironment o FlexTemplateRuntimeEnvironment.

Visualizza i dati di profilazione

Se Cloud Profiler è abilitato, nella pagina del job viene visualizzato un link alla pagina Profiler.

La pagina Job con un link alla pagina Profiler.

Nella pagina Profiler puoi anche trovare i dati di profilazione per la pipeline Dataflow. Il Servizio è il nome del tuo job e la Versione è il tuo ID job.

Mostra i valori Servizio e Versione per la profilazione di un job Dataflow.

Utilizzo di Cloud Profiler

La pagina Profiler contiene un grafico a fiamme che mostra le statistiche per ogni frame in esecuzione su un worker. In direzione orizzontale, puoi vedere il tempo necessario per l'esecuzione di ogni frame in termini di tempo di CPU. In direzione verticale, puoi vedere le analisi dello stack e il codice in esecuzione in parallelo. Le analisi dello stack sono dominate dal codice dell'infrastruttura runner. A scopo di debug, in genere siamo interessati all'esecuzione del codice utente, che in genere si trova nella parte inferiore del grafico. Il codice utente può essere identificato cercando i frame degli indicatori, che rappresentano il codice runner che è noto per chiamare solo il codice utente. Nel caso del runner Beam ParDo, viene creato un livello adattatore dinamico per richiamare la firma del metodo DoFn fornita dall'utente. Questo livello può essere identificato come un frame con il suffisso invokeProcessElement. L'immagine seguente mostra come trovare una cornice dell'indicatore.

Esempio di grafico a fiamme di Profiler che mostra una cornice di indicatore.

Dopo aver fatto clic su un frame indicatore interessante, il grafico a fiamme si concentra sull'analisi dello stack, dando un'idea chiara del codice utente a lunga esecuzione. Le operazioni più lente possono indicare dove si sono formati i colli di bottiglia e presentare opportunità di ottimizzazione. Nell'esempio seguente, è possibile vedere che la finestra globale viene utilizzata con un ByteArrayCoder. In questo caso, il programmatore potrebbe essere una buona area per l'ottimizzazione perché sta richiedendo un tempo di CPU significativo rispetto alle operazioni ArrayList e HashMap.

Un'analisi dello stack di frame dell'indicatore di esempio che mostra le operazioni di esecuzione più lente.

Risolvere i problemi relativi a Cloud Profiler

Se abiliti Cloud Profiler e la pipeline non genera dati di profilazione, la causa potrebbe essere una delle seguenti condizioni.

  • La pipeline utilizza una versione precedente dell'SDK Apache Beam. Per utilizzare Cloud Profiler, devi usare l'SDK Apache Beam versione 2.33.0 o successive. Puoi visualizzare la versione dell'SDK Apache Beam della pipeline nella pagina del job. Se il job viene creato da modelli Dataflow, questi devono utilizzare le versioni SDK supportate.

  • Il progetto sta per esaurire la quota di Cloud Profiler. Puoi visualizzare l'utilizzo delle quote dalla pagina delle quote del progetto. Se la quota di Cloud Profiler viene superata, può verificarsi un errore come Failed to collect and upload profile whose profile type is WALL. Il servizio Cloud Profiler rifiuta i dati di profilazione se hai raggiunto la quota. Per ulteriori informazioni sulle quote di Cloud Profiler, consulta Quote e limiti.

L'agente Cloud Profiler viene installato durante l'avvio del worker di Dataflow. I messaggi di log generati da Cloud Profiler sono disponibili nel tipo di log dataflow.googleapis.com/worker-startup.

Una pagina che mostra i log di Cloud Profiler con un menu aperto che evidenzia il percorso di navigazione: dataflow.googleapis.com/worker-startup.

A volte esistono dati di profilazione, ma Cloud Profiler non visualizza alcun output. Profiler mostra un messaggio simile a There were profiles collected for the specified time range, but none match the current filters.

Per risolvere il problema, prova i seguenti passaggi per la risoluzione dei problemi.

  • Assicurati che l'intervallo di tempo e l'ora di fine in Profiler includano il tempo trascorso del job.

  • Verifica che sia selezionato il job corretto in Profiler. Il Servizio è il nome del tuo lavoro.

  • Verifica che l'opzione della pipeline job_name abbia lo stesso valore del nome del job nella pagina del job di Dataflow.

  • Se hai specificato un argomento nome-servizio quando hai caricato l'agente Profiler, verifica che il nome del servizio sia configurato correttamente.