Monitorização do desempenho do pipeline com o Cloud Profiler

O Cloud Profiler é um profiler estatístico de baixa sobrecarga que recolhe continuamente informações de utilização da CPU e de atribuição de memória das suas aplicações de produção. Para mais detalhes, consulte o artigo Conceitos de criação de perfis. Para resolver problemas ou monitorizar o desempenho do pipeline, use a integração do Dataflow com o Cloud Profiler para identificar as partes do código do pipeline que consomem mais recursos.

Para ver sugestões de resolução de problemas e estratégias de depuração para criar ou executar o pipeline do Dataflow, consulte o artigo Resolução de problemas e depuração de pipelines.

Antes de começar

Compreenda os conceitos de criação de perfis e familiarize-se com a interface do Profiler. Para ver informações sobre como começar a usar a interface do Profiler, consulte o artigo Selecione os perfis a analisar.

A API Cloud Profiler tem de estar ativada para o seu projeto antes de o trabalho ser iniciado. É ativado automaticamente na primeira vez que visita a página do Profiler. Em alternativa, pode ativar a API Cloud Profiler através da ferramenta de linha de comandos CLI gcloud gcloud ou da Google Cloud consola.

Para usar o Cloud Profiler, o seu projeto tem de ter quota suficiente. Além disso, a conta de serviço do trabalhador para a tarefa do Dataflow tem de ter as autorizações adequadas para o Profiler. Por exemplo, para criar perfis, a conta de serviço do trabalhador tem de ter a autorização cloudprofiler.profiles.create, que está incluída na função do IAM do agente do Cloud Profiler (roles/cloudprofiler.agent). Para mais informações, consulte o artigo Controlo de acesso com a IAM.

Ative o Cloud Profiler para pipelines do Dataflow

O Cloud Profiler está disponível para pipelines do Dataflow escritos no SDK do Apache Beam para Java e Python, versão 2.33.0 ou posterior. Os pipelines Python têm de usar o Dataflow Runner v2. O Cloud Profiler pode ser ativado na hora de início do pipeline. Espera-se que a sobrecarga de memória e CPU amortizada seja inferior a 1% para os seus pipelines.

Java

Para ativar a criação de perfis da CPU, inicie o pipeline com a seguinte opção.

--dataflowServiceOptions=enable_google_cloud_profiler

Para ativar a criação de perfis de memória, inicie o pipeline com as seguintes opções. A criação de perfis de memória requer o Java 11 ou superior.

--dataflowServiceOptions=enable_google_cloud_profiler

--dataflowServiceOptions=enable_google_cloud_heap_sampling

Python

Para usar o Cloud Profiler, o seu pipeline Python tem de ser executado com o Dataflow Runner v2.

Para ativar a criação de perfis da CPU, inicie o pipeline com a seguinte opção. A criação de perfis de memória dinâmica ainda não é suportada para Python.

--dataflow_service_options=enable_google_cloud_profiler

Go

Para ativar a criação de perfis de CPU e memória, inicie o pipeline com a seguinte opção.

--dataflow_service_options=enable_google_cloud_profiler

Se implementar os seus pipelines a partir de modelos do Dataflow e quiser ativar o Cloud Profiler, especifique as flags enable_google_cloud_profiler e enable_google_cloud_heap_sampling como experiências adicionais.

Consola

Se usar um modelo fornecido pela Google, pode especificar as flags na página Criar tarefa a partir do modelo do Dataflow no campo Experiências adicionais.

gcloud

Se usar a CLI do Google Cloud para executar modelos, use gcloud dataflow jobs run ou gcloud dataflow flex-template run, consoante o tipo de modelo, use a opção --additional-experiments para especificar as flags.

API

Se usar a API REST para executar modelos, consoante o tipo de modelo, especifique os sinalizadores através do campo additionalExperiments do ambiente de execução, RuntimeEnvironment ou FlexTemplateRuntimeEnvironment.

Veja os dados de criação de perfis

Se o Cloud Profiler estiver ativado, é apresentado um link para a página do Profiler na página de tarefas.

A página Tarefa com um link para a página Profiler.

Na página do criador de perfis, também pode encontrar os dados de criação de perfis para o pipeline do Dataflow. O Serviço é o nome da tarefa e a Versão é o ID da tarefa.

Mostra os valores de serviço e versão para a criação de perfis de uma tarefa do Dataflow.

Usar o Cloud Profiler

A página Profiler contém um gráfico de chamas que apresenta estatísticas para cada frame em execução num trabalhador. Na direção horizontal, pode ver quanto tempo cada fotograma demorou a ser executado em termos de tempo da CPU. Na direção vertical, pode ver rastreios de pilha e código em execução em paralelo. Os rastreios de pilha são dominados pelo código da infraestrutura do executor. Para fins de depuração, estamos normalmente interessados na execução do código do utilizador, que se encontra normalmente perto das pontas inferiores do gráfico. O código do utilizador pode ser identificado através da procura de frames de marcadores, que representam o código do executor que se sabe que só chama o código do utilizador. No caso do executor do Beam ParDo, é criada uma camada de adaptador dinâmico para invocar a assinatura do método DoFn fornecida pelo utilizador. Esta camada pode ser identificada como um frame com o sufixo invokeProcessElement. A imagem seguinte mostra uma demonstração da localização de um frame de marcador.

Um exemplo de um gráfico de chamas do Profiler que mostra um frame de marcador.

Depois de clicar num frame de marcador interessante, o gráfico de chamas foca-se nesse rastreio da pilha, dando uma boa ideia do código do utilizador de execução prolongada. As operações mais lentas podem indicar onde se formaram restrições e apresentar oportunidades de otimização. No exemplo seguinte, é possível ver que o Global Windowing está a ser usado com um ByteArrayCoder. Neste caso, o programador pode ser uma boa área para otimização, uma vez que está a ocupar um tempo significativo da CPU em comparação com as operações ArrayList e HashMap.

Um exemplo de um rastreio da pilha de frames de marcadores que mostra as operações de execução mais lentas.

Resolva problemas do Cloud Profiler

Se ativar o Cloud Profiler e o seu pipeline não gerar dados de criação de perfis, uma das seguintes condições pode ser a causa.

  • O seu pipeline usa uma versão mais antiga do Apache Beam SDK. Para usar o Cloud Profiler, tem de usar a versão 2.33.0 ou posterior do SDK do Apache Beam. Pode ver a versão do SDK Apache Beam do seu pipeline na página do trabalho. Se o seu trabalho for criado a partir de modelos do Dataflow, os modelos têm de usar as versões do SDK suportadas.

  • O seu projeto está a ficar sem quota do Cloud Profiler. Pode ver a utilização da quota na página de quota do seu projeto. Pode ocorrer um erro, como Failed to collect and upload profile whose profile type is WALL, se a quota do Cloud Profiler for excedida. O serviço Cloud Profiler rejeita os dados de criação de perfis se tiver atingido a sua quota. Para mais informações sobre as quotas do Cloud Profiler, consulte o artigo Quotas e limites.

  • A sua tarefa não foi executada durante tempo suficiente para gerar dados para o Cloud Profiler. As tarefas executadas durante períodos curtos, como menos de cinco minutos, podem não fornecer dados de criação de perfis suficientes para o Cloud Profiler gerar resultados.

O agente do Cloud Profiler é instalado durante o arranque do worker do Dataflow. As mensagens de registo geradas pelo Cloud Profiler estão disponíveis no tipo de registo dataflow.googleapis.com/worker-startup.

Uma página que mostra os registos do Cloud Profiler com um menu aberto que realça o caminho de navegação: dataflow.googleapis.com/worker-startup.

Por vezes, existem dados de criação de perfis, mas o Cloud Profiler não apresenta qualquer resultado. O Profiler apresenta uma mensagem semelhante a There were profiles collected for the specified time range, but none match the current filters.

Para resolver este problema, experimente os seguintes passos de resolução de problemas.

  • Certifique-se de que o período e a hora de fim no Profiler incluem o tempo decorrido da tarefa.

  • Confirme se a tarefa correta está selecionada no criador de perfis. O Serviço é o nome do seu trabalho.

  • Confirme que a opção de pipeline job_name tem o mesmo valor que o nome do trabalho na página do trabalho do Dataflow.

  • Se especificou um argumento service-name quando carregou o agente do Profiler, confirme se o nome do serviço está configurado corretamente.