Monitoraggio delle prestazioni della pipeline con Cloud Profiler

Cloud Profiler è un profiler statistico a basso costo generale raccoglie informazioni sull'utilizzo della CPU e sull'allocazione della memoria dalla tua produzione diverse applicazioni. Per ulteriori dettagli, consulta i 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 più risorse.

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

Prima di iniziare

Comprendi i concetti di profilazione e familiarizati con l'interfaccia di Profiler. Per informazioni su come iniziare a utilizzare Profiler dell'interfaccia, vedi Seleziona i profili da analizzare.

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

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

Abilita Cloud Profiler per le pipeline Dataflow

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

Java

Per abilitare il profiling della CPU, avvia la pipeline con la seguente opzione.

--dataflowServiceOptions=enable_google_cloud_profiler

Per abilitare la profilazione heap, avvia la pipeline con le opzioni seguenti. La profilazione dell'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 il profiling della CPU, avvia la pipeline con la seguente opzione. La profilazione dell'heap non è ancora supportata per Python.

--dataflow_service_options=enable_google_cloud_profiler

Vai

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

--dataflow_service_options=enable_google_cloud_profiler

Se esegui il deployment delle pipeline da modelli Dataflow e vuoi abilitare Cloud Profiler, specificare i enable_google_cloud_profiler e enable_google_cloud_heap_sampling segnalazioni 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 Sperimenti 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 REST API per eseguire i modelli, a seconda del tipo di modello, specifica i flag utilizzando Campo additionalExperiments dell'ambiente di runtime, RuntimeEnvironment o FlexTemplateRuntimeEnvironment.

Visualizzare i dati di profilazione

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

La pagina Job con un link alla pagina Profiler.

Nella pagina Profiler puoi anche trovare i dati di profilazione per la tua pipeline Dataflow. Service è il nome del job e Version è l'ID del job.

Mostra i valori Service e Version per la profilazione di un job Dataflow.

Utilizzo di Cloud Profiler

La pagina Profiler contiene un grafico a fiamme che mostra le statistiche per ciascun frame in esecuzione su un worker. In orizzontale, puoi vedere il tempo di esecuzione di ogni frame in termini di tempo di CPU. In verticale, puoi vedere le tracce dello stack e il codice in esecuzione in parallelo. Le tracce dello stack sono dominate dal codice dell'infrastruttura del runner. Per scopi di debug, in genere ci interessa l'esecuzione del codice utente, che in genere si trova vicino alle estremità inferiori 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 dell'utente. Nel caso del runner ParDo di Beam, viene creato un livello di adattatore dinamico per invocare la firma del metodo DoFn fornita dall'utente. Questo livello può essere identificato come frame con il suffisso invokeProcessElement. L'immagine seguente mostra una dimostrazione di come trovare un riquadro dell'indicatore.

Esempio di grafico a fiamme di Profiler che mostra un frame degli indicatori.

Dopo aver fatto clic su un frame dell'indicatore interessante, il grafico a forma di fiamma si concentra sulla traccia dello stack, fornendo una buona idea del codice utente a esecuzione prolungata. Le operazioni più lente possono indicare dove si sono formati colli di bottiglia e presentano opportunità di ottimizzazione. Nell'esempio seguente, è possibile vedere che il windowing globale viene utilizzato con un ByteArrayCoder. In questo caso, il codice potrebbe essere un'area ottimale per l'ottimizzazione perché occupa molto tempo della CPU rispetto alle operazioni di ArrayList e HashMap.

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

Risolvi i problemi di Cloud Profiler

Se abiliti Cloud Profiler e la tua pipeline non genera profilazione la causa potrebbe essere una delle seguenti.

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

  • Il progetto sta per esaurire la quota di Cloud Profiler. Puoi visualizzare l'utilizzo della quota dalla pagina delle quote del progetto. Se viene superata la quota di Cloud Profiler, 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 tua quota. Per ulteriori informazioni sulle quote di Cloud Profiler, consulta Quote e limiti.

  • Il job non è stato eseguito abbastanza a lungo per generare dati per Cloud Profiler. I job che vengono eseguiti per brevi durate, ad esempio meno di cinque minuti, potrebbero non fornire dati di profilazione sufficienti per consentire a Cloud Profiler di generare risultati.

L'agente Cloud Profiler viene installato durante il worker Dataflow avvio automatico. I messaggi di log generati da Cloud Profiler sono disponibili nel log digita 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 esiste la profilazione dei dati, ma Cloud Profiler non ne mostra nessuno. come output. Il 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 a seguire la procedura di risoluzione dei problemi riportata di seguito.

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

  • Verifica che nel Profiler sia selezionato il job corretto. Servizio è il nome del tuo job.

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

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