Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
En esta página, se describe cómo supervisar el entorno general de Cloud Composer y el rendimiento del entorno con métricas clave en el panel de Monitoring.
Introducción
Este instructivo se enfoca en las métricas de supervisión clave de Cloud Composer que proporcione una buena descripción general del estado y rendimiento a nivel del entorno.
Cloud Composer ofrece múltiples métricas que describen del entorno. Los lineamientos de supervisión de este instructivo se basan en las métricas expuestas en el panel de Monitoring de tu entorno de Cloud Composer.
En este instructivo, aprenderás sobre las métricas clave que funcionan como los principales indicadores de problemas con el rendimiento y el estado del entorno, como así como los lineamientos para interpretar cada métrica en medidas correctivas mantener el entorno saludable. También configurarás reglas de alerta para cada ejecuta el DAG de ejemplo y usa estas métricas y alertas para optimizar de tu entorno.
Objetivos
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
- Cloud Composer (consulta costos adicionales)
- Cloud Monitoring
Cuando finalices este instructivo, puedes borrar los recursos creados para evitar que se te siga facturando. Para obtener más detalles, consulta Realiza una limpieza.
Antes de comenzar
En esta sección, se describen las acciones necesarias antes de comenzar el instructivo.
Crea y configura un proyecto
Para este instructivo, necesitas Google Cloud proyecto. Configura el proyecto de la siguiente manera:
En la consola de Google Cloud, selecciona o crea un proyecto:
Asegúrate de tener habilitada la facturación para tu proyecto. Obtén más información para verificar si la facturación está habilitada en un proyecto.
Asegúrate de que el usuario de tu proyecto de Google Cloud tenga los siguientes roles para crear los recursos necesarios:
- Administrador de objetos de almacenamiento y entorno
(
roles/composer.environmentAndStorageObjectAdmin
) - Administrador de Compute (
roles/compute.admin
) - Editor de Monitoring (
roles/monitoring.editor
)
- Administrador de objetos de almacenamiento y entorno
(
Habilita las API para tu proyecto.
Enable the Cloud Composer API.
Crea tu entorno de Cloud Composer
Crea un entorno de Cloud Composer 2.
Como parte de este procedimiento,
otorgas la extensión de agente de servicio de la API de Cloud Composer v2
(roles/composer.ServiceAgentV2Ext
) para el agente de servicio de Composer
de servicio predeterminada. Cloud Composer usa esta cuenta para realizar operaciones
en tu proyecto de Google Cloud.
Explora las métricas clave del estado y el rendimiento a nivel del entorno
Este tutorial se centra en las métricas clave que pueden darle un buen resumen de el estado y rendimiento general de tu entorno.
El panel de Monitoring en La consola de Google Cloud contiene una variedad de métricas y gráficos que permiten supervisar tendencias en tu entorno e identificar problemas con Airflow componentes y recursos de Cloud Composer.
Cada entorno de Cloud Composer tiene su propio Monitoring o un panel dinámico más robusto.
Familiarízate con las métricas clave que se muestran a continuación y ubica cada una de ellas en el panel de Monitoring:
En la consola de Google Cloud, ve a la página Entornos.
En la lista de entornos, haz clic en el nombre de tu entorno. Se abrirá la página Detalles del entorno.
Ve a la pestaña Monitoring.
Selecciona la sección Descripción general, localiza el elemento Descripción general del entorno en el panel y observar la Estado del entorno (DAG de supervisión de Airflow).
En este cronograma se muestra el estado de Cloud Composer en un entorno de nube. El color verde de la barra de estado del entorno indica que el entorno está en buen estado, mientras que el de mal estado se indica con color rojo.
Cada pocos minutos, Cloud Composer ejecuta un DAG de funcionamiento llamado
airflow_monitoring
Si la ejecución del DAG de funcionamiento finaliza correctamente, el el estado esTrue
. Si la ejecución del DAG en funcionamiento falla (por ejemplo, debido a la expulsión del Pod, la finalización del proceso externo o el mantenimiento). el estado esFalse
.
Selecciona la sección Base de datos SQL y busca el Estado de la base de datos. del panel y observa la métrica Estado de la base de datos.
En este cronograma, se muestra el estado de la conexión con la Instancia de Cloud SQL de tu entorno. La base de datos verde la barra de estado indica que la conectividad, mientras que las fallas de conexión se indicado en color rojo.
El Pod de supervisión de Airflow hace ping a la base de datos periódicamente y realiza informes estado como
True
si se puede establecer una conexión o comoFalse
si no es así.
En el elemento Estado de la base de datos, observa el Uso de CPU de la base de datos y Métricas de uso de memoria de la base de datos.
El gráfico de uso de CPU de la base de datos indica el uso de núcleos de CPU por parte de instancias de base de datos de Cloud SQL de tu entorno en comparación límite total de CPU disponible para la base de datos.
El gráfico de uso de memoria de la base de datos indica el uso de memoria por parte del instancias de base de datos de Cloud SQL de tu entorno en comparación límite total de memoria disponible de la base de datos.
Selecciona la sección Programadores y busca la Señal de monitoreo de funcionamiento del programador. del panel y observa la métrica Señal de monitoreo de funcionamiento del programador.
En esta línea de tiempo, se muestra estado del programador de Airflow. Verifica las áreas rojas para identificar los problemas del programador de Airflow. Si el tiene más de un programador, el estado de la señal de monitoreo de funcionamiento es siempre y cuando al menos uno de los programadores responda.
Se considera que el programador está en mal estado si se recibió la última señal de monitoreo de funcionamiento más de 30 segundos (valor predeterminado) antes de la hora actual.
Selecciona la sección Estadísticas de DAG y busca Tareas zombi que se eliminaron. en el panel. Luego, observa la métrica Tareas zombi finalizadas.
Este gráfico indica la cantidad de tareas zombi que se destruyeron en un pequeño durante la ventana de tiempo. Las tareas zombi suelen deberse al cierre externo de los procesos de Airflow (como cuando se cierra el proceso de una tarea).
El programador de Airflow finaliza las tareas zombi periódicamente, lo que se refleja en este gráfico.
Selecciona la sección Workers y ubica la sección Worker container restarts. en el panel. Observa la métrica Reinicios de contenedor de trabajadores.
- Un gráfico indica la cantidad total de reinicios de trabajadores individuales contenedores. Demasiados reinicios del contenedor pueden afectar la disponibilidad de tu servicio u otros servicios downstream que lo usen como dependencia.
Conoce comparativas y posibles medidas correctivas para métricas clave
En la siguiente lista, se describen los valores comparativos que pueden indicar problemas y se proporcionan medidas correctivas que puedes tomar para abordar estos problemas.
Estado del entorno (DAG de supervisión de Airflow)
Tasa de éxito inferior al 90% en un período de 4 horas
Las fallas pueden significar expulsiones de Pods o cierres de trabajadores debido a que el entorno está sobrecargado o funciona mal. Áreas rojas en el entorno la línea de tiempo de salud generalmente se correlaciona con áreas rojas en las otras barras de salud. de los componentes individuales del entorno. Identifica la causa raíz mediante revisando otras métricas en el panel de Monitoring.
Estado de la base de datos
Tasa de éxito inferior al 95% en un período de 4 horas
Las fallas significan que hay problemas con la conectividad a Airflow. en la base de datos, lo que podría ser el resultado de una falla o tiempo de inactividad en la base de datos Si la base de datos está sobrecargada (por ejemplo, debido a un alto consumo de CPU o memoria o una latencia mayor durante la conexión a la base de datos). Estos síntomas con mayor frecuencia son causados por DAG subóptimos, como cuando los DAG usan muchas variables de entorno o Airflow definidas globalmente. Identifica la raíz si revisas las métricas de uso de recursos de la base de datos SQL. También puedes inspeccionar los registros del programador en busca de errores relacionados con la conectividad de la base de datos.
Uso de memoria y CPU de la base de datos
Más del 80% en el uso promedio de CPU o memoria en un período de 12 horas
Es posible que la base de datos esté sobrecargada. Analiza la correlación entre tu DAG y aumentos repentinos en el uso de memoria o de CPU de la base de datos.
Puedes reducir la carga de la base de datos DAG más eficientes con consultas y conexiones en ejecución optimizadas o a través de la distribución cargar de manera más uniforme con el tiempo.
Como alternativa, puedes asignar más CPU o memoria a la base de datos. Los recursos de la base de datos son controlados por la propiedad de tamaño del entorno de tu entorno y este debe estar a un tamaño mayor.
Señal de monitoreo de funcionamiento del programador
Tasa de éxito inferior al 90% en un período de 4 horas
Asignar más recursos al programador o aumentar la cantidad de programadores de 1 a 2 (recomendado).
Procesos zombi eliminados
Más de una tarea zombi por 24 horas
El motivo más común de las tareas zombis es la escasez de CPU o memoria. recursos en el clúster de tu entorno. Revisa el uso de recursos de los trabajadores gráficos y asignar más recursos a tus trabajadores, o aumentar el tiempo de espera de las tareas zombi para que el programador espere más tiempo antes de considerar que una tarea es un zombi.
Reinicios del contenedor de trabajadores
Más de un reinicio cada 24 horas
El motivo más común es la falta de memoria o almacenamiento de los trabajadores. Observa consumo de recursos de los trabajadores y asignar más memoria o almacenamiento a tus trabajadores. Si la falta de recursos no es la razón, analiza solución de problemas de incidentes de reinicio de trabajadores y utiliza Consultas de Logging para descubrir los motivos de los reinicios de los trabajadores.
Crea canales de notificaciones
Sigue las instrucciones que se describen en Crea un canal de notificaciones para crear un canal de notificaciones por correo electrónico.
Para obtener más información sobre los canales de notificaciones, consulta Administra los canales de notificaciones.
Crea políticas de alertas
Crear políticas de alertas basadas en las comparativas proporcionadas en la diapositiva anterior de este instructivo para supervisar continuamente los valores de las métricas y recibir notificaciones cuando esas métricas infrinjan una condición.
Console
Puedes configurar alertas para cada métrica que se presenta en el panel de Monitoring. Haz clic en el ícono de campana ubicado en la esquina del elemento correspondiente.
Encuentre cada métrica que desea supervisar en Monitoring y haz clic en el ícono de campana en la esquina del elemento de métrica. El Se abrirá la página Crear política de alertas.
En la sección Transforma los datos, sigue estos pasos:
Configura la sección Dentro de cada serie temporal como se describe en configuración de políticas de alertas para la métrica.
Haz clic en Siguiente y, luego, configura la sección Configurar activador de alertas como se describe en la configuración de políticas de alertas de la métrica.
Haz clic en Siguiente.
Configura las notificaciones. Expande el menú Canales de notificaciones y selecciona los canales de notificación que creaste paso anterior.
Haz clic en Aceptar.
En la sección Nombre de la política de alertas, completa el campo Nombre de la política de alertas. . Usa un nombre descriptivo para cada métrica. Usa el comando "Name the política de alertas" de salida, como se describe en la configuración de las políticas de alertas para 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 supervisión de Airflow): parámetros de configuración de políticas de alertas
- Nombre de la métrica: Entorno de Cloud Composer: en buen estado
- API: composer.googleapis.com/environment/healthy
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transforma los datos > Dentro de cada serie temporal:
- Ventana progresiva: Personalizado
- Valor personalizado: 4
- Unidades personalizadas: horas
- Función analítica progresiva: fracción verdadera
Configura el activador de alertas:
- Tipos de condiciones: Umbral
- Activador de la alerta: Cualquier serie temporal es una infracción
- Posición del umbral: Por debajo del umbral
- Valor del umbral: 90
- Nombre de la condición: Condición de estado del entorno
Configura las notificaciones y finaliza la alerta:
- Asígnale un nombre a la política de alertas: Estado del entorno de Airflow
Métrica de estado de la base de datos: parámetros de configuración de políticas de alertas
- Nombre de la métrica: Entorno de Cloud Composer: base de datos en buen estado
- API: composer.googleapis.com/environment/database_health
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transforma los datos > Dentro de cada serie temporal:
- Ventana progresiva: Personalizado
- Valor personalizado: 4
- Unidades personalizadas: horas
- Función analítica progresiva: fracción verdadera
Configura el activador de alertas:
- Tipos de condiciones: Umbral
- Activador de la alerta: Cualquier serie temporal es una infracción
- Posición del umbral: Por debajo del umbral
- Valor del 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: Estado de la base de datos de Airflow
Métrica de uso de CPU de la base de datos: parámetros de configuración de la política de alertas
- Nombre de la métrica: Entorno de Cloud Composer - Uso de CPU de la base de datos
- API: composer.googleapis.com/environment/database/cpu/utilization
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transforma los datos > Dentro de cada serie temporal:
- Ventana progresiva: Personalizado
- Valor personalizado: 12
- Unidades personalizadas: horas
- Función analítica progresiva: media
Configura el activador de alertas:
- Tipos de condiciones: Umbral
- Activador de la alerta: Cualquier serie temporal es una infracción
- Posición del umbral: por encima del umbral
- Valor del umbral: 80
- Nombre de la condición: Condición de uso de 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 CPU de la base de datos: parámetros de configuración de la política de alertas
- Nombre de la métrica: Entorno de Cloud Composer - Uso de memoria de la base de datos
- API: composer.googleapis.com/environment/database/memory/utilization
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transforma los datos > Dentro de cada serie temporal:
- Ventana progresiva: Personalizado
- Valor personalizado: 12
- Unidades personalizadas: horas
- Función analítica progresiva: media
Configura el activador de alertas:
- Tipos de condiciones: Umbral
- Activador de la alerta: Cualquier serie temporal es una infracción
- Posición del umbral: por encima del umbral
- Valor del 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: Uso de memoria de la base de datos de Airflow
Métrica de señales de monitoreo del programador: configuración de la política de alertas
- Nombre de la métrica: Entorno de Cloud Composer: señales de monitoreo de funcionamiento del programador
- API: composer.googleapis.com/environment/scheduler_heartbeat_count
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transforma los datos > Dentro de cada serie temporal:
- Ventana progresiva: Personalizado
- Valor personalizado: 4
- Unidades personalizadas: horas
- Función analítica progresiva: count
Configura el activador de alertas:
- Tipos de condiciones: Umbral
- Activador de la alerta: Cualquier serie temporal es una infracción
- Posición del umbral: Por debajo del umbral
Valor del umbral: 216
- Para obtener esta cantidad, ejecuta una consulta que agregue valor
_scheduler_heartbeat_count_mean
en Editor de consultas del Explorador de métricas.
- Para obtener esta cantidad, ejecuta una consulta que agregue valor
Nombre de la condición: Condición de señal de monitoreo de funcionamiento del programador
Configura las notificaciones y finaliza la alerta:
- Asigna un nombre a la política de alertas: Señal de monitoreo de funcionamiento de Airflow Scheduler
Métrica de tareas zombi que finalizaron: configuración de la política de alertas
- Nombre de la métrica: Entorno de Cloud Composer: tareas zombi finalizadas
- API: composer.googleapis.com/environment/zombie_task_killed_count
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transforma los datos > Dentro de cada serie temporal:
- Período móvil: 1 día
- Función analítica progresiva: sum
Configura el activador de alertas:
- Tipos de condiciones: Umbral
- Activador de la alerta: Cualquier serie temporal es una infracción
- Posición del umbral: por encima del umbral
- Valor del umbral: 1
- Nombre de la condición: Condición de tareas zombi
Configura las notificaciones y finaliza la alerta:
- Asigna un nombre a la política de alertas: Airflow Zombie Tasks
El contenedor de trabajadores reinicia métricas: configuraciones de políticas de alertas
- Nombre de la métrica: Entorno de Cloud Composer: tareas zombi finalizadas
- API: composer.googleapis.com/environment/zombie_task_killed_count
Filtros:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Transforma los datos > Dentro de cada serie temporal:
- Período móvil: 1 día
- Función analítica progresiva: sum
Configura el activador de alertas:
- Tipos de condiciones: Umbral
- Activador de la alerta: Cualquier serie temporal es una infracción
- Posición del umbral: por encima del umbral
- Valor del umbral: 1
- Nombre de la condición: Condición de tareas zombi
Configura las notificaciones y finaliza la alerta:
- Asigna un nombre a la política de alertas: Airflow Zombie Tasks
Terraform
Ejecutar una secuencia de comandos de Terraform que cree un canal de notificaciones por correo electrónico y que suba políticas de alertas para las métricas clave proporcionadas en este instructivo, según sus respectivas comparativas:
- Guarda el archivo de Terraform de ejemplo en tu computadora local.
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto de tu proyecto. Por ejemplo,example-project
.EMAIL_ADDRESS
: Es la dirección de correo electrónico a la que se debe notificar en caso de que un se activa una alerta específica.ENVIRONMENT_NAME
: Es el nombre de tu entorno de Cloud Composer. Por ejemplo,example-composer-environment
CLUSTER_NAME
: Es el nombre del clúster de tu entorno que se puede encontrar en Configuración del entorno > Recursos > GKE clúster 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"
}
}
}
}
Prueba las políticas de alertas
En esta sección, se describe cómo probar las políticas de alertas creadas y cómo interpretarlas resultados.
Sube un DAG de muestra
El DAG de muestra memory_consumption_dag.py
que se proporciona en este instructivo imita
un uso intensivo de la memoria. El DAG contiene 4 tareas, cada una de las
escribe datos en una string de muestra y consume 380 MB de memoria. La muestra
El DAG está programado para ejecutarse cada 2 minutos y comenzará a ejecutarse automáticamente
una vez que lo subas a tu entorno de Composer.
Sube el siguiente DAG de muestra al entorno que creaste 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 el DAG de muestra comience a ejecutarse y evalúa el resultados de la prueba:
Revisa tu buzón de correo electrónico para verificar que recibiste una notificación de Alertas de Google Cloud con el asunto que comienza con
[ALERT]
El contenido de este mensaje incluye los detalles del incidente de la política de alertas.Haz clic en el botón Ver incidente en la notificación por correo electrónico. Eres al Explorador de métricas. Revisa los detalles de las alertas incidente:
El gráfico de métricas del incidente indica que las métricas que creaste superaron las el umbral de 1, lo que significa que Airflow detectó y mató a más de 1 zombi tarea.
En tu entorno de Cloud Composer, ve a la pestaña Supervisión. abre la sección Estadísticas de DAG y busca las Tareas zombi eliminadas gráfico:
El gráfico indica que Airflow acaba de eliminar unas 20 tareas zombis en tan solo durante los primeros 10 minutos de ejecutar el DAG de muestra.
Según las comparativas y las medidas correctivas, el motivo más común para tareas zombies es la falta de memoria o CPU de trabajador. Identifica la causa raíz de tareas innecesarias mediante el análisis del uso de recursos de trabajadores.
Abre la sección Trabajadores en tu panel de Monitoring y revisa el trabajador. Métricas de uso de memoria y CPU:
El gráfico Uso total de trabajadores de la CPU indica que el uso de CPU del trabajador fue por debajo del 50% del límite total disponible en todo momento, por lo que la capacidad es suficiente. El gráfico de uso de memoria Total de trabajadores muestra que ejecutar la DAG de muestra alcanzó el límite de memoria asignable, que es igual a casi el 75% del límite total de memoria que se muestra en el gráfico (GKE reserva el 25% de los primeros 4 GiB de memoria y una 100 MiB de memoria adicionales en cada nodo para controlar la expulsión del Pod).
Se puede concluir que los trabajadores no tienen los recursos de memoria para ejecutar el DAG de muestra correctamente.
Optimiza tu entorno y evalúa su rendimiento
Según el análisis del uso de recursos de los trabajadores, debes asignar más memoria a tus trabajadores para que todas las tareas del DAG tengan éxito.
En tu entorno de Composer, abre la pestaña DAG y haz clic en el nombre del DAG de muestra (
memory_consumption_dag
) y, luego, haz clic en Pausar DAG.Asigna memoria de trabajador adicional:
En la pestaña Configuración del entorno (Environment configuration), busca Recursos. > Configuración de Cargas de trabajo y haz clic en Editar.
En el elemento Worker, aumenta el límite de Memory. En este instructivo, usan 3.25 GB.
Guarda los cambios y espera varios minutos para que se reinicie el trabajador.
Abre la pestaña DAGs, haz clic en el nombre del DAG de muestra (
memory_consumption_dag
) y haz clic en Reanudar DAG.
Ve a Monitoring y verifica que no haya aparecidos nuevas tareas zombi después de que actualizó los límites de recursos de trabajadores:
Resumen
En este instructivo, aprendiste sobre los estados clave de entorno y las métricas de rendimiento, cómo configurar políticas de alertas para cada métrica y cómo para interpretar cada métrica en medidas correctivas. Luego, ejecutaste un DAG de muestra, identificó la causa raíz de los problemas de estado del entorno con la ayuda de alertas y Monitoring, y optimizó su entorno asignando más memoria a tus trabajadores. Sin embargo, se recomienda optimizar tus DAG reducir el consumo de recursos de los trabajadores, ya que no es lo que es posible aumentar los recursos más allá de cierto umbral.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conservarlo y borrar los recursos individuales.
Borra el proyecto
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra los recursos individuales
Si planeas explorar varios instructivos y guías de inicio rápido, la reutilización de proyectos puede ayudarte a evitar exceder los límites de las cuotas del proyecto.
Console
- Borra el entorno de Cloud Composer. También borrar el bucket del entorno durante el procedimiento.
- Borra cada una de las políticas de alertas que creaste en Cloud Monitoring.
Terraform
- Asegúrate de que tu secuencia de comandos de Terraform no contenga entradas para recursos que aún necesita tu proyecto. Por ejemplo, es posible que quieras mantener algunas APIs habilitadas y,IAM permisos aún asignados (si agregaste esas definiciones a tu de Terraform).
- Ejecuta
terraform destroy
. - Borra el bucket del entorno de forma manual. Cloud Composer no lo borra automáticamente. Puedes hacerlo desde la consola de Google Cloud o Google Cloud CLI.