Supervisa el rendimiento de la canalización con Cloud Profiler

Cloud Profiler es un generador de perfiles estadístico y de baja sobrecarga que recopila de manera continua información de las aplicaciones de producción sobre la asignación de memoria y el uso de la CPU. Para obtener más detalles, consulta Conceptos sobre la generación de perfiles. Para solucionar problemas o supervisar el rendimiento de la canalización, usa la integración de Dataflow con Cloud Profiler a fin de identificar las partes del código de la canalización que consumen más recursos.

Si deseas obtener sugerencias para solucionar problemas y estrategias de depuración a fin de compilar o ejecutar tu canalización de Dataflow, consulta Soluciona problemas y depura canalizaciones.

Antes de comenzar

Comprende los conceptos de generación de perfiles y familiarízate con la interfaz de Profiler. Si deseas obtener información para comenzar a usar la interfaz de Profiler, consulta Selecciona los perfiles que se analizarán.

Se debe habilitar la API de Cloud Profiler en tu proyecto antes de que comience el trabajo. Se habilita de forma automática la primera vez que visitas la página de Profiler. Como alternativa, puedes habilitar la API de Cloud Profiler con la CLI de Google Cloud la herramienta de línea de comandos gcloud de la CLI de Google Cloud o la consola de Google Cloud.

Para usar Cloud Profiler, el proyecto debe tener una cuota suficiente. Además, la cuenta de servicio de trabajador del trabajo de Dataflow debe tener los permisos adecuados para Profiler. Por ejemplo, para crear perfiles, la cuenta de servicio de trabajador debe tener el permiso cloudprofiler.profiles.create, que se incluye en el rol de IAM de agente de Cloud Profiler (roles/cloudprofiler.agent). Para obtener más información, consulta Control de acceso con la IAM.

Habilita Cloud Profiler para las canalizaciones de Dataflow

Cloud Profiler está disponible para las canalizaciones de Dataflow escritas en el SDK de Apache Beam para Java y Python, versión 2.33.0 o posterior. Las canalizaciones de Python deben usar Dataflow Runner v2. Cloud Profiler se puede habilitar en el momento del inicio de la canalización. Se espera que la CPU amortizada y la sobrecarga de la memoria sean inferiores al 1% para las canalizaciones.

Java

Para habilitar la generación de perfiles de CPU, inicia la canalización con la siguiente opción.

--dataflowServiceOptions=enable_google_cloud_profiler

Para habilitar la generación de perfiles del montón, inicia la canalización con las siguientes opciones. Para la generación de perfiles del montón se necesita Java 11 o una versión posterior.

--dataflowServiceOptions=enable_google_cloud_profiler

--dataflowServiceOptions=enable_google_cloud_heap_sampling

Python

Para usar Cloud Profiler, la canalización de Python debe ejecutarse con Runner v2 de Dataflow.

Para habilitar la generación de perfiles de CPU, inicia la canalización con la siguiente opción. La creación de perfiles del montón aún no es compatible con Python.

--dataflow_service_options=enable_google_cloud_profiler

Go

Para habilitar la generación de perfiles del montón y de CPU, inicia la canalización con la siguiente opción.

--dataflow_service_options=enable_google_cloud_profiler

Si implementas las canalizaciones desde las plantillas de Dataflow y deseas habilitar Cloud Profiler, especifica las marcas enable_google_cloud_profiler y enable_google_cloud_heap_sampling como experimentos adicionales.

Console

Si usas una plantilla proporcionada por Google, puedes especificar las marcas en el flujo de datos Crear trabajo a partir de una plantilla en la página Experimentos adicionales.

gcloud

Si usas la CLI de Google Cloud para ejecutar plantillas, gcloud dataflow jobs run o gcloud dataflow flex-template run, según el tipo de plantilla, usa la opción --additional- experiments para especificar las marcas.

API

Si usas la API de REST para ejecutar plantillas, según el tipo de plantilla, especifica las marcas con el campo additionalExperiments del entorno de ejecución, ya sea RuntimeEnvironment o FlexTemplateRuntimeEnvironment.

Ve los datos de creación de perfiles

Si Cloud Profiler está habilitado, se muestra un vínculo a la página de Profiler en la página de trabajo.

La página de trabajos con un vínculo a la página de Profiler.

En la página de Profiler, también puedes encontrar los datos de creación de perfiles para tu canalización de Dataflow. El servicio es el nombre de tu trabajo y la versión es el ID del trabajo.

Muestra los valores de servicio y versión para generar perfiles de un trabajo de Dataflow.

Usa Cloud Profiler

La página de Profiler contiene un gráfico tipo llama que muestra estadísticas para cada marco que se ejecuta en un trabajador. En la dirección horizontal, puedes ver cuánto tiempo tardó cada marco en ejecutarse en términos de tiempo de CPU. En la dirección vertical, puedes ver seguimientos de pila y código que se ejecuta en paralelo. El código de infraestructura de ejecutores domina los seguimientos de pila. Para fines de depuración, generalmente nos interesa la ejecución del código de usuario, que se suele encontrar cerca de las puntas inferiores del gráfico. El código de usuario se puede identificar buscando marcos de marcador, que representan el código de ejecutor que solo llama al código de usuario. En el caso del ejecutor de ParDo de Beam, se crea una capa de adaptador dinámico para invocar la firma del método DoFn suministrada por el usuario. Esta capa se puede identificar como un marco con el sufijo invokeProcessElement. En la siguiente imagen, se muestra cómo encontrar un marco de marcador.

Un ejemplo de gráfico tipo llama de Profiler que muestra un marco de marcador.

Después de que se hace clic en un marco de marcador interesante, el gráfico tipo llama se enfoca en ese seguimiento de pila y proporciona una buena idea del código de usuario de larga duración. Las operaciones más lentas pueden indicar dónde se formaron los cuellos de botella y presentan oportunidades de optimización. En el siguiente ejemplo, es posible ver que el sistema de ventanas global se está usando con ByteArrayCoder. En este caso, el codificador puede ser una buena área de optimización, ya que ocupa un tiempo de CPU considerable en comparación con las operaciones ArrayList y HashMap.

Ejemplo de seguimiento de pila del marco de marcador que muestra las operaciones más lentas.

Soluciona problemas de Cloud Profiler

Si habilitas Cloud Profiler y la canalización no genera datos de creación de perfiles, una de las siguientes condiciones podría ser la causa.

  • Tu canalización usa una versión anterior del SDK de Apache Beam. Para usar Cloud Profiler, debes usar la versión 2.33.0 o una posterior del SDK de Apache Beam. Puedes ver la versión del SDK de Apache Beam de tu canalización en la página de trabajos. Si tu trabajo se crea a partir de plantillas de Dataflow, estas deben usar las versiones compatibles del SDK.

  • Tu proyecto se está quedando sin cuota de Cloud Profiler. Puedes ver el uso de la cuota desde la página de cuota de tu proyecto. Un error como Failed to collect and upload profile whose profile type is WALL puede ocurrir si se excede la cuota de Cloud Profiler. El servicio de Cloud Profiler rechaza los datos de creación de perfiles si alcanzaste tu cuota. Para obtener más información sobre las cuotas de Cloud Profiler, consulta Cuotas y límites.

El agente de Cloud Profiler se instala durante el inicio del trabajador de Dataflow. Los mensajes de registro que genera Cloud Profiler están disponibles en los tipos de registro dataflow.googleapis.com/worker-startup.

Una página que muestra los registros de Cloud Profiler con un menú abierto que destaca la ruta de navegación: dataflow.googleapis.com/worker-startup.

A veces, hay datos de creación de perfiles, pero Cloud Profiler no muestra ningún resultado. El generador de perfiles muestra un mensaje similar a There were profiles collected for the specified time range, but none match the current filters.

Para resolver este problema, realiza las siguientes acciones.

  • Asegúrate de que el período y la hora de finalización en el generador de perfiles incluyan el tiempo transcurrido del trabajo.

  • Confirma que el trabajo correcto esté seleccionado en Profiler. El servicio es el nombre de tu trabajo.

  • Confirma que la opción de canalización job_name tenga el mismo valor que el nombre del trabajo en la página de trabajo de Dataflow.

  • Si especificaste un argumento de nombre de servicio cuando cargaste el agente de Profiler, confirma que el nombre de servicio esté configurado de forma correcta.