Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
En esta página se describe cómo monitorizar el estado y el rendimiento generales del entorno de Cloud Composer con métricas clave en el panel de control Monitoring.
Introducción
En este tutorial se explican las métricas de monitorización de Cloud Composer clave que pueden proporcionar una buena visión general del estado y el rendimiento a nivel de entorno.
Cloud Composer ofrece varias métricas que describen el estado general del entorno. Las directrices de monitorización de este tutorial se basan en las métricas expuestas en el panel de monitorización de tu entorno de Cloud Composer.
En este tutorial, aprenderá sobre las métricas clave que sirven como indicadores principales de los problemas con el rendimiento y el estado de su entorno, así como las directrices para interpretar cada métrica en acciones correctivas para mantener el entorno en buen estado. También configurarás reglas de alertas para cada métrica, ejecutarás el DAG de ejemplo y usarás estas métricas y alertas para optimizar el rendimiento de tu entorno.
Objetivos
Costes
En este tutorial se usan los siguientes componentes facturables de Google Cloud:
- Cloud Composer (consulta los costes adicionales).
- Cloud Monitoring
Cuando termines este tutorial, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta Limpiar.
Antes de empezar
En esta sección se describen las acciones que debes llevar a cabo antes de empezar el tutorial.
Crear y configurar un proyecto
Para este tutorial, necesitas un Google Cloud proyecto. Configura el proyecto de la siguiente manera:
En la Google Cloud consola, selecciona o crea un proyecto:
Comprueba que la facturación esté habilitada en tu proyecto. Consulta cómo comprobar si la facturación está habilitada en un proyecto.
Asegúrate de que el usuario de tu proyecto Google Cloud tenga los siguientes roles para crear los recursos necesarios:
- Administrador de objetos de entorno y almacenamiento
(
roles/composer.environmentAndStorageObjectAdmin
) - Administrador de Compute (
roles/compute.admin
) - Editor de monitorización (
roles/monitoring.editor
)
- Administrador de objetos de entorno y almacenamiento
(
Habilitar APIs en tu proyecto
Enable the Cloud Composer API.
Crear un entorno de Cloud Composer
Crea un entorno de Cloud Composer 2.
Como parte de este procedimiento,
asignas el rol Extensión del agente de servicio de la API de Cloud Composer v2
(roles/composer.ServiceAgentV2Ext
) a la cuenta del agente de servicio de Composer. Cloud Composer usa esta cuenta para realizar operaciones en tu proyecto Google Cloud .
Consultar métricas clave sobre el estado y el rendimiento a nivel de entorno
En este tutorial se explican las métricas clave que pueden ofrecerte una buena visión general del estado y el rendimiento de tu entorno.
El panel de control Monitoring de la consola deGoogle Cloud contiene varias métricas y gráficos que permiten monitorizar las tendencias de tu entorno e identificar problemas con los componentes de Airflow y los recursos de Cloud Composer.
Cada entorno de Cloud Composer tiene su propio panel de control de Monitoring.
Familiarízate con las métricas clave que se indican a continuación y localiza cada una de ellas en el panel de control Monitorización:
En la Google Cloud consola, ve a la página Entornos.
En la lista de entornos, haz clic en el nombre del entorno. Se abrirá la página Detalles del entorno.
Vaya a la pestaña Monitorización.
Selecciona la sección Vista general, busca el elemento Vista general del entorno en el panel de control y consulta la métrica Estado del entorno (DAG de monitorización de Airflow).
Esta cronología muestra el estado del entorno de Cloud Composer. El color verde de la barra de estado del entorno indica que el entorno está en buen estado, mientras que el color rojo indica que no lo está.
Cada pocos minutos, Cloud Composer ejecuta un DAG de actividad denominado
airflow_monitoring
. Si la ejecución del DAG de vivacidad finaliza correctamente, el estado de salud esTrue
. Si falla la ejecución del DAG de actividad (por ejemplo, debido a la expulsión de un pod, a la finalización de un proceso externo o al mantenimiento), el estado de salud esFalse
.
Selecciona la sección Base de datos SQL, busca el elemento Estado de la base de datos en el panel de control y observa la métrica Estado de la base de datos.
En esta cronología se muestra el estado de la conexión a la instancia de Cloud SQL de tu entorno. La barra de estado de la base de datos en verde indica que hay conectividad, mientras que los fallos de conexión se indican con el color rojo.
El pod de monitorización de Airflow hace ping a la base de datos periódicamente e informa del estado de salud como
True
si se puede establecer una conexión o comoFalse
si no.
En el elemento Estado de la base de datos, observa las métricas Uso de CPU de la base de datos y Uso de memoria de la base de datos.
El gráfico de uso de CPU de la base de datos indica el uso de los núcleos de CPU por parte de las instancias de base de datos de Cloud SQL de tu entorno en comparación con el límite total de CPU de la base de datos disponible.
El gráfico Uso de memoria de la base de datos indica el uso de memoria de las instancias de base de datos de Cloud SQL de tu entorno en comparación con el límite total de memoria de la base de datos disponible.
Selecciona la sección Programadores, busca el elemento Latido del programador en el panel de control y observa la métrica Latido del programador.
Esta cronología muestra el estado del programador de Airflow. Comprueba si hay zonas rojas para identificar problemas del programador de Airflow. Si tu entorno tiene más de un programador, el estado de latido será correcto siempre que al menos uno de los programadores responda.
El programador se considera incorrecto si el último latido se recibió más de 30 segundos (valor predeterminado) antes de la hora actual.
Selecciona la sección Estadísticas de DAG, busca el elemento Tareas fallidas en el panel de control y consulta la métrica Tareas fallidas.
Este gráfico indica el número de tareas inertes que se han terminado en un periodo breve. Las tareas inertes suelen deberse a la finalización externa de procesos de Airflow (por ejemplo, cuando se finaliza el proceso de una tarea).
El programador de Airflow termina las tareas inertes periódicamente, lo que se refleja en este gráfico.
Selecciona la sección Trabajadores, busca el elemento Reinicios del contenedor de trabajador en el panel de control y observa la métrica Reinicios del contenedor de trabajador.
- Un gráfico indica el número total de reinicios de contenedores de trabajadores individuales. Si se reinicia un contenedor demasiadas veces, puede afectar a la disponibilidad de tu servicio o de otros servicios posteriores que lo usen como dependencia.
Consulta las comparativas y las posibles medidas correctivas de las métricas clave
En la siguiente lista se describen los valores de referencia que pueden indicar problemas y se proporcionan las medidas correctivas que puede tomar para solucionarlos.
Estado del entorno (DAG de monitorización de Airflow)
Una tasa de éxito inferior al 90% en un periodo de 4 horas
Los errores pueden significar expulsiones de pods o finalizaciones de trabajadores porque el entorno está sobrecargado o funciona mal. Las zonas rojas de la cronología de salud del entorno suelen corresponderse con las zonas rojas de las otras barras de salud de los componentes del entorno. Identifica la causa principal consultando otras métricas en el panel de control Monitoring.
Estado de la base de datos
Porcentaje de éxito inferior al 95% en un periodo de 4 horas
Los errores significan que hay problemas con la conectividad a la base de datos de Airflow, lo que podría deberse a un fallo o a un tiempo de inactividad de la base de datos porque está sobrecargada (por ejemplo, debido a un uso elevado de la CPU o la memoria, o a una latencia mayor al conectarse a la base de datos). Estos síntomas se deben con mayor frecuencia a DAGs no óptimos, como cuando los DAGs usan muchas variables de entorno o de Airflow definidas de forma global. Identifica la causa principal revisando las métricas de uso de recursos de la base de datos SQL. También puedes inspeccionar los registros del programador para ver si hay errores relacionados con la conectividad de la base de datos.
Uso de CPU y memoria de la base de datos
Más del 80% de uso medio de CPU o memoria en un periodo de 12 horas
Puede que la base de datos esté sobrecargada. Analiza la correlación entre las ejecuciones de tu DAG y los picos en el uso de CPU o memoria de la base de datos.
Puedes reducir la carga de la base de datos con DAGs más eficientes con consultas y conexiones optimizadas o distribuyendo la carga de forma más uniforme a lo largo del tiempo.
También puedes asignar más CPU o memoria a la base de datos. Los recursos de la base de datos se controlan mediante la propiedad de tamaño del entorno de tu entorno, y el entorno debe escalarse a un tamaño mayor.
Señal de latido del programador
Una tasa de éxito inferior al 90% en un periodo de 4 horas
Asigna más recursos al programador o aumenta el número de programadores de 1 a 2 (recomendado).
Tareas fallidas
Más de una tarea zombi cada 24 horas
El motivo más habitual de que se produzcan tareas zombi es la escasez de recursos de CPU o de memoria en el clúster de tu entorno. Revisa los gráficos de uso de recursos de los trabajadores y asigna más recursos a tus trabajadores o aumenta el tiempo de espera de las tareas zombi para que el programador espere más tiempo antes de considerar que una tarea es zombi.
Reinicios de contenedores de trabajador
Más de un reinicio cada 24 horas
El motivo más habitual es la falta de memoria o almacenamiento de los trabajadores. Consulta el consumo de recursos de los trabajadores y asigna más memoria o almacenamiento a tus trabajadores. Si la falta de recursos no es el motivo, consulta cómo solucionar problemas de reinicios de workers y usa consultas de registro para descubrir los motivos de los reinicios de workers.
Crear canales de notificaciones
Sigue las instrucciones que se indican en Crear un canal de notificaciones para crear un canal de notificaciones por correo electrónico.
Para obtener más información sobre los canales de notificación, consulta el artículo Gestionar canales de notificación.
Crear políticas de alertas
Crea políticas de alertas basadas en los valores de referencia proporcionados en las secciones anteriores de este tutorial para monitorizar continuamente los valores de las métricas y recibir notificaciones cuando esas métricas incumplan una condición.
Consola
Puede configurar alertas para cada métrica que se muestra en el panel de control Monitorización haciendo clic en el icono de campana de la esquina del elemento correspondiente:

Busca cada métrica que quieras monitorizar en el panel de control Monitorización y haz clic en el icono de campana de la esquina del elemento de métrica. Se abrirá la página Crear política de alertas.
En la sección Transformar datos:
Configura la sección En cada serie temporal tal como se describe en la configuración de las políticas de alertas de la métrica.
Haga clic en Siguiente y, a continuación, configure la sección Configurar activador de alerta como se describe en la configuración de las políticas de alertas de la métrica.
Haz clic en Siguiente.
Configura las notificaciones. Despliega el menú Canales de notificación y selecciona los canales de notificación que has creado en el paso anterior.
Haz clic en Aceptar.
En la sección Dar nombre a la política de alertas, rellena el campo Nombre de política de alertas. Asigna un nombre descriptivo a cada métrica. Usa el valor "Nombre de la política de alertas" tal como se describe en la configuración de políticas de alertas de la métrica.
Haz clic en Siguiente.
Revisa la política de alertas y haz clic en Crear política.
Métrica de estado del entorno (DAG de monitorización de Airflow): configuraciones de políticas de alertas
- Nombre de la métrica: Cloud Composer Environment - Healthy
- API: composer.googleapis.com/environment/healthy
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transformar datos > En cada serie temporal:
- Ventana variable: personalizada
- Valor personalizado: 4
- Unidades personalizadas: hora(s)
- Función de ventana continua: fracción verdadera
Configura el activador de alertas:
- Tipos de condiciones: umbral
- Activador de alerta: Any time series violates
- Posición del umbral: por debajo del umbral
- Valor de umbral: 90
- Nombre de la condición: estado del entorno
Configura las notificaciones y finaliza la alerta:
- Asigna un nombre a la política de alertas: Airflow Environment Health.
Métrica de estado de la base de datos: configuraciones de políticas de alertas
- Nombre de la métrica: Cloud Composer Environment - Database Healthy
- API: composer.googleapis.com/environment/database_health
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transformar datos > En cada serie temporal:
- Ventana variable: personalizada
- Valor personalizado: 4
- Unidades personalizadas: hora(s)
- Función de ventana continua: fracción verdadera
Configura el activador de alertas:
- Tipos de condiciones: umbral
- Activador de alerta: Any time series violates
- Posición del umbral: por debajo del umbral
- Valor de umbral: 95
- Nombre de la condición: estado de la base de datos
Configura las notificaciones y finaliza la alerta:
- Asigna un nombre a la política de alertas: Airflow Database Health.
Métrica de uso de CPU de la base de datos: configuraciones de políticas de alertas
- Nombre de la métrica: Cloud Composer Environment - Database CPU Utilization
- API: composer.googleapis.com/environment/database/cpu/utilization
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transformar datos > En cada serie temporal:
- Ventana variable: personalizada
- Valor personalizado: 12
- Unidades personalizadas: hora(s)
- Función de ventana móvil: media
Configura el activador de alertas:
- Tipos de condiciones: umbral
- Activador de alerta: Any time series violates
- Posición del umbral: por encima del umbral
- Valor de umbral: 80
- Nombre de la condición: condición de uso de la CPU de la base de datos
Configura las notificaciones y finaliza la alerta:
- Asigna un nombre a la política de alertas: Uso de CPU de la base de datos de Airflow.
Métrica de uso de memoria de la base de datos: configuraciones de políticas de alertas
- Nombre de la métrica: Cloud Composer Environment - Database Memory Utilization
- API: composer.googleapis.com/environment/database/memory/utilization
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transformar datos > En cada serie temporal:
- Ventana variable: personalizada
- Valor personalizado: 12
- Unidades personalizadas: hora(s)
- Función de ventana móvil: media
Configura el activador de alertas:
- Tipos de condiciones: umbral
- Activador de alerta: Any time series violates
- Posición del umbral: por encima del umbral
- Valor de umbral: 80
- Nombre de la condición: condición de uso de memoria de la base de datos
Configura las notificaciones y finaliza la alerta:
- Asigna un nombre a la política de alertas: Airflow Database Memory Usage
Métrica de señales de latido del programador: configuraciones de políticas de alertas
- Nombre de la métrica: Entorno de Cloud Composer - Señales de latido del programador
- API: composer.googleapis.com/environment/scheduler_heartbeat_count
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transformar datos > En cada serie temporal:
- Ventana variable: personalizada
- Valor personalizado: 4
- Unidades personalizadas: hora(s)
- Función de ventana continua: recuento
Configura el activador de alertas:
- Tipos de condiciones: umbral
- Activador de alerta: Any time series violates
- Posición del umbral: por debajo del umbral
Valor de umbral: 216
- Para obtener este número, ejecute una consulta que agregue el valor
_scheduler_heartbeat_count_mean
en el editor de consultas del Explorador de métricas.
- Para obtener este número, ejecute una consulta que agregue el valor
Nombre de la condición: condición de señal de latido del programador
Configura las notificaciones y finaliza la alerta:
- Asigna un nombre a la política de alertas: Latido del programador de Airflow
Métrica de tareas fallidas: configuraciones de políticas de alertas
- Nombre de la métrica: Entorno de Cloud Composer - Tareas fallidas
- API: composer.googleapis.com/environment/zombie_task_killed_count
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transformar datos > En cada serie temporal:
- Ventana continua: 1 día
- Función de ventana continua: suma
Configura el activador de alertas:
- Tipos de condiciones: umbral
- Activador de alerta: Any time series violates
- Posición del umbral: por encima del umbral
- Valor de umbral: 1
- Nombre de la condición: Zombie tasks condition
Configura las notificaciones y finaliza la alerta:
- Ponle un nombre a la política de alertas: Airflow Zombie Tasks
Métrica de reinicios de contenedores de trabajadores: configuraciones de políticas de alertas
- Nombre de la métrica: Kubernetes Container - Restart Count
- API: kubernetes.io/container/restart_count
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION] pod_name =~ airflow-worker-.*|airflow-k8s-worker-.* container_name =~ airflow-worker|base cluster_name = [CLUSTER_NAME]
CLUSTER_NAME
es el nombre del clúster de tu entorno, que se encuentra en Configuración del entorno > Recursos > clúster de GKE en la consola de Google Cloud .Transformar datos > En cada serie temporal:
- Ventana continua: 1 día
- Función de ventana continua: tasa
Configura el activador de alertas:
- Tipos de condiciones: umbral
- Activador de alerta: Any time series violates
- Posición del umbral: por encima del umbral
- Valor de umbral: 1
- Nombre de la condición: reinicios de contenedores de trabajadores
Configura las notificaciones y finaliza la alerta:
- Ponle un nombre a la política de alertas: Airflow Worker Restarts
Terraform
Ejecuta una secuencia de comandos de Terraform que cree un canal de notificación por correo electrónico y suba políticas de alertas para las métricas clave proporcionadas en este tutorial en función de sus respectivos valores de referencia:
- Guarda el archivo de ejemplo de Terraform en tu ordenador.
Haz los cambios siguientes:
PROJECT_ID
: el ID de proyecto de tu proyecto. Por ejemplo,example-project
.EMAIL_ADDRESS
: la dirección de correo a la que se debe enviar una notificación si se activa una alerta.ENVIRONMENT_NAME
: el nombre de tu entorno de Cloud Composer. Por ejemplo,example-composer-environment
.CLUSTER_NAME
: el nombre del clúster de tu entorno, que se encuentra en Configuración del entorno > Recursos > clúster de GKE en la consola de Google Cloud .
resource "google_monitoring_notification_channel" "basic" {
project = "PROJECT_ID"
display_name = "Test Notification Channel"
type = "email"
labels = {
email_address = "EMAIL_ADDRESS"
}
# force_delete = false
}
resource "google_monitoring_alert_policy" "environment_health_metric" {
project = "PROJECT_ID"
display_name = "Airflow Environment Health"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Environment health condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/healthy\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_LT"
threshold_value = 0.9
aggregations {
alignment_period = "14400s"
per_series_aligner = "ALIGN_FRACTION_TRUE"
}
}
}
}
resource "google_monitoring_alert_policy" "database_health_metric" {
project = "PROJECT_ID"
display_name = "Airflow Database Health"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Database health condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database_health\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_LT"
threshold_value = 0.95
aggregations {
alignment_period = "14400s"
per_series_aligner = "ALIGN_FRACTION_TRUE"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_database_cpu_usage" {
project = "PROJECT_ID"
display_name = "Airflow Database CPU Usage"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Database CPU usage condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database/cpu/utilization\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 80
aggregations {
alignment_period = "43200s"
per_series_aligner = "ALIGN_MEAN"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_database_memory_usage" {
project = "PROJECT_ID"
display_name = "Airflow Database Memory Usage"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Database memory usage condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database/memory/utilization\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 80
aggregations {
alignment_period = "43200s"
per_series_aligner = "ALIGN_MEAN"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_scheduler_heartbeat" {
project = "PROJECT_ID"
display_name = "Airflow Scheduler Heartbeat"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Scheduler heartbeat condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/scheduler_heartbeat_count\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_LT"
threshold_value = 216 // Threshold is 90% of the average for composer.googleapis.com/environment/scheduler_heartbeat_count metric in an idle environment
aggregations {
alignment_period = "14400s"
per_series_aligner = "ALIGN_COUNT"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_zombie_task" {
project = "PROJECT_ID"
display_name = "Airflow Zombie Tasks"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Zombie tasks condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/zombie_task_killed_count\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 1
aggregations {
alignment_period = "86400s"
per_series_aligner = "ALIGN_SUM"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_worker_restarts" {
project = "PROJECT_ID"
display_name = "Airflow Worker Restarts"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Worker container restarts condition"
condition_threshold {
filter = "resource.type = \"k8s_container\" AND (resource.labels.cluster_name = \"CLUSTER_NAME\" AND resource.labels.container_name = monitoring.regex.full_match(\"airflow-worker|base\") AND resource.labels.pod_name = monitoring.regex.full_match(\"airflow-worker-.*|airflow-k8s-worker-.*\")) AND metric.type = \"kubernetes.io/container/restart_count\""
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 1
aggregations {
alignment_period = "86400s"
per_series_aligner = "ALIGN_RATE"
}
}
}
}
Probar las políticas de alertas
En esta sección se describe cómo probar las políticas de alertas creadas y cómo interpretar los resultados.
Subir un DAG de ejemplo
El DAG de ejemplo memory_consumption_dag.py
que se proporciona en este tutorial imita el uso intensivo de memoria de los trabajadores. El DAG contiene 4 tareas. Cada una de ellas escribe datos en una cadena de ejemplo, lo que consume 380 MB de memoria. El DAG de ejemplo está programado para ejecutarse cada 2 minutos y empezará a ejecutarse automáticamente cuando lo subas a tu entorno de Composer.
Sube el siguiente DAG de ejemplo al entorno que has creado en los pasos anteriores:
from datetime import datetime
import sys
import time
from airflow import DAG
from airflow.operators.python import PythonOperator
def ram_function():
data = ""
start = time.time()
for i in range(38):
data += "a" * 10 * 1000**2
time.sleep(0.2)
print(f"{i}, {round(time.time() - start, 4)}, {sys.getsizeof(data) / (1000 ** 3)}")
print(f"Size={sys.getsizeof(data) / (1000 ** 3)}GB")
time.sleep(30 - (time.time() - start))
print(f"Complete in {round(time.time() - start, 2)} seconds!")
with DAG(
dag_id="memory_consumption_dag",
start_date=datetime(2023, 1, 1, 1, 1, 1),
schedule="1/2 * * * *",
catchup=False,
) as dag:
for i in range(4):
PythonOperator(
task_id=f"task_{i+1}",
python_callable=ram_function,
retries=0,
dag=dag,
)
Interpretar alertas y métricas en Monitoring
Espera unos 10 minutos después de que empiece a ejecutarse el DAG de ejemplo y evalúa los resultados de la prueba:
Consulta tu buzón de correo para verificar que has recibido una notificación deGoogle Cloud Alerting con el asunto que empieza por
[ALERT]
. El contenido de este mensaje incluye los detalles del incidente de la política de alertas.Haz clic en el botón Ver incidencia de la notificación por correo. Se le redirigirá al explorador de métricas. Revisa los detalles del incidente de alerta:
Imagen 2. Detalles del incidente de alerta (haz clic para ampliar) El gráfico de métricas de incidentes indica que las métricas que ha creado han superado el umbral de 1, lo que significa que Airflow ha detectado y finalizado más de una tarea zombi.
En tu entorno de Cloud Composer, ve a la pestaña Monitorización, abre la sección Estadísticas de DAG y busca el gráfico Tareas zombi finalizadas:
Imagen 3. Gráfico de tareas zombi (haz clic para ampliar) El gráfico indica que Airflow ha terminado unas 20 tareas inertes en los primeros 10 minutos de ejecución del DAG de ejemplo.
Según las comparativas y las acciones correctivas, el motivo más habitual de las tareas zombi es la falta de memoria o CPU de los trabajadores. Identifica la causa principal de las tareas zombi analizando la utilización de los recursos de los trabajadores.
Abre la sección Workers (Trabajadores) de tu panel de control Monitoring y consulta las métricas de uso de CPU y memoria de los trabajadores:
Imagen 4. Métricas de uso de CPU y memoria de los workers (haz clic en la imagen para ampliarla) El gráfico Uso de CPU total de los trabajadores indica que el uso de CPU de los trabajadores siempre ha estado por debajo del 50% del límite total disponible, por lo que la CPU disponible es suficiente. El gráfico Uso de memoria total de los trabajadores muestra que, al ejecutar el DAG de ejemplo, se ha alcanzado el límite de memoria asignable, que equivale a casi el 75% del límite de memoria total que se muestra en el gráfico (GKE reserva el 25% de los primeros 4 GiB de memoria y 100 MiB de memoria adicionales en cada nodo para gestionar el desalojo de pods).
Puedes concluir que los trabajadores no tienen suficientes recursos de memoria para ejecutar el DAG de ejemplo correctamente.
Optimizar el entorno y evaluar su rendimiento
Según el análisis de la utilización de recursos de los trabajadores, debes asignar más memoria a tus trabajadores para que se completen todas las tareas de tu DAG.
En tu entorno de Composer, abre la pestaña DAGs (DAGs), haz clic en el nombre del DAG de ejemplo (
memory_consumption_dag
) y, a continuación, en Pause DAG (Pausar DAG).Asigna memoria de trabajador adicional:
En la pestaña Configuración del entorno, busca la configuración Recursos > Cargas de trabajo y haz clic en Editar.
En el elemento Trabajador, aumenta el límite de Memoria. En este tutorial, usa 3,25 GB.
Guarda los cambios y espera varios minutos a que se reinicie el trabajador.
Abre la pestaña DAGs, haz clic en el nombre del DAG de ejemplo (
memory_consumption_dag
) y, a continuación, en Unpause DAG (Reanudar DAG).
Ve a Monitorización y comprueba que no hayan aparecido nuevas tareas zombi después de actualizar los límites de recursos de los trabajadores:

Resumen
En este tutorial, has aprendido a consultar las métricas clave de estado y rendimiento a nivel de entorno, a configurar políticas de alertas para cada métrica y a interpretar cada métrica para tomar medidas correctivas. Después, has ejecutado un DAG de ejemplo, has identificado la causa principal de los problemas de estado del entorno con la ayuda de alertas y gráficos de Monitoring, y has optimizado tu entorno asignando más memoria a tus trabajadores. Sin embargo, te recomendamos que optimices tus DAGs para reducir el consumo de recursos de los trabajadores, ya que no es posible aumentar los recursos más allá de un determinado umbral.
Limpieza
Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en este tutorial, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Eliminar el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Eliminar recursos concretos
Si tienes previsto consultar varios tutoriales y guías de inicio rápido, reutilizar los proyectos puede ayudarte a no superar los límites de cuota de proyectos.
Consola
- Elimina el entorno de Cloud Composer. También eliminarás el contenedor del entorno durante este procedimiento.
- Elimina cada una de las políticas de alertas que hayas creado en Cloud Monitoring.
Terraform
- Asegúrate de que tu secuencia de comandos de Terraform no contenga entradas de recursos que tu proyecto siga necesitando. Por ejemplo, puede que quieras mantener algunas APIs habilitadas y permisos de gestión de identidades y accesos asignados (si has añadido esas definiciones a tu script de Terraform).
- Ejecuta
terraform destroy
. - Elimina manualmente el segmento del entorno. Cloud Composer no lo elimina automáticamente. Puedes hacerlo desde la Google Cloud consola o la CLI de Google Cloud.
Siguientes pasos
- Optimizar entornos
- Entornos de escalabilidad
- Gestionar las etiquetas de entorno y desglosar los costes de los entornos