Monitore a integridade e o desempenho do ambiente com as principais métricas no painel do Monitoring

Cloud Composer 1 | Cloud Composer 2

Nesta página, descrevemos como monitorar a integridade e o desempenho geral do ambiente do Cloud Composer com as principais métricas no painel do Monitoring.

Introdução

Neste tutorial, o foco são as principais métricas de monitoramento do Cloud Composer. Elas oferecem uma boa visão geral da integridade e do desempenho no nível do ambiente.

O Cloud Composer oferece várias métricas que descrevem o estado geral do ambiente. As diretrizes de monitoramento deste tutorial são baseadas nas métricas expostas no painel do Monitoring do ambiente do Cloud Composer.

Neste tutorial, você aprenderá sobre as métricas principais que servem como os indicadores principais de problemas com o desempenho e a integridade do ambiente, além das diretrizes para interpretar cada métrica em ações corretivas para manter a integridade do ambiente. Você também vai configurar regras de alerta para cada métrica, executar o DAG de exemplo e usar essas métricas e alertas para otimizar o desempenho do ambiente.

Objetivos

Custos

Neste tutorial, usamos o seguinte componente faturável do Google Cloud:

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais detalhes, consulte Limpeza.

Antes de começar

Nesta seção, descrevemos as ações necessárias antes de iniciar o tutorial.

Criar e configurar um projeto

Para este tutorial, você precisa de um projeto do Google Cloud. Configure o projeto desta maneira:

  1. No console do Google Cloud, selecione ou crie um projeto:

    Acessar o seletor de projetos

  2. Verifique se o faturamento foi ativado para o projeto. Saiba como verificar se o faturamento está ativado em um projeto.

  3. Verifique se o usuário do projeto do Google Cloud tem os papéis a seguir para criar os recursos necessários:

    • Administrador de ambientes e de objetos do Storage (roles/composer.environmentAndStorageObjectAdmin)
    • Administrador do Compute (roles/compute.admin)
    • Editor do Monitoring (roles/monitoring.editor)

Ativar as APIs do projeto

Ative a API Cloud Composer.

Ative a API

criar o ambiente do Cloud Composer

Crie um ambiente do Cloud Composer 2.

Como parte desse procedimento, conceda o papel Extensão do agente de serviço da API Cloud Composer v2 (roles/composer.ServiceAgentV2Ext) à conta do agente de serviço do Composer. O Cloud Composer usa essa conta para realizar operações no seu projeto do Google Cloud.

Conheça as principais métricas de integridade e desempenho no nível do ambiente

Este tutorial se concentra nas principais métricas que podem oferecer uma boa visão geral da integridade e do desempenho geral do seu ambiente.

O painel do Monitoring no console do Google Cloud contém várias métricas e gráficos que permitem monitorar tendências no ambiente e identificar problemas com os componentes do Airflow e recursos do Cloud Composer.

Cada ambiente do Cloud Composer tem o próprio painel do Monitoring.

Familiarize-se com as principais métricas abaixo e localize cada uma no painel do Monitoring:

  1. No console do Google Cloud, acesse a página Ambientes.

    Acessar "Ambientes"

  2. Na lista de ambientes, clique no nome do seu ambiente. A página Detalhes do ambiente é aberta.

  3. Acesse a guia Monitoramento.

  4. Selecione a seção Visão geral, localize o item Visão geral do ambiente no painel e observe a métrica Integridade do ambiente (DAG de monitoramento do Airflow).

    • Ela mostra a integridade do ambiente do Cloud Composer. A cor verde da barra de integridade do ambiente indica que o ambiente é íntegro, enquanto o status não íntegro é indicado em vermelho.

    • Em intervalos de poucos minutos, o Cloud Composer executa um DAG de atividade chamado airflow_monitoring. Se a execução do DAG de atividade for concluída com êxito, o status de integridade será True. Se a execução do DAG de atividade falhar, por exemplo, devido à remoção do pod, ao encerramento do processo externo ou à manutenção, o status de integridade será False.

  5. Selecione a seção banco de dados SQL, localize o item Integridade do banco de dados no painel e observe a métrica Integridade do banco de dados.

    • Esta linha do tempo mostra o status da conexão com a instância do Cloud SQL do seu ambiente. A barra de integridade do banco de dados verde indica conectividade, enquanto as falhas de conexão são indicadas em cor vermelha.

    • O pod de monitoramento do Airflow dá um ping no banco de dados periodicamente e informa o status de integridade como True, se uma conexão puder ser estabelecida, ou como False, caso não seja.

  6. No item Integridade do banco de dados, observe as métricas Uso da CPU do banco de dados e Uso da memória do banco de dados.

    • O gráfico de uso de CPU do banco de dados indica o uso de núcleos da CPU pelas instâncias de banco de dados do Cloud SQL no seu ambiente em comparação com o limite total de CPU do banco de dados disponível.

    • O gráfico de uso de memória do banco de dados indica o uso de memória pelas instâncias de banco de dados do Cloud SQL no seu ambiente em relação ao limite total de memória do banco de dados disponível.

  7. Selecione a seção Programadores, localize o item Frequência de funcionamento do programador no painel e observe a métrica Pulsação do programador.

    • Esta linha do tempo mostra a integridade do programador do Airflow. Verifique se há áreas vermelhas para identificar problemas do agendador do Airflow. Se o ambiente tiver mais de um programador, o status do sinal de funcionamento estará íntegro, desde que pelo menos um dos programadores esteja respondendo.

    • O programador será considerado não íntegro se o último sinal de funcionamento tiver sido recebido mais de 30 segundos (valor padrão) antes do horário atual.

  8. Selecione a seção Estatísticas do DAG, localize o item Tarefas zumbis eliminadas no painel e observe a métrica Tarefas zumbis eliminadas.

    • Esse gráfico indica o número de tarefas zumbi eliminadas em uma pequena janela de tempo. As tarefas zumbi geralmente são causadas pelo encerramento externo de processos do Airflow (como quando o processo de uma tarefa é eliminado).

    • O programador do Airflow elimina tarefas zumbi periodicamente, o que é refletido neste gráfico.

  9. Selecione a seção Workers, localize o item Reinicializações do contêiner do worker no painel e observe a métrica Reinicializações do contêiner do worker.

    • Um gráfico indica o número total de reinicializações para contêineres de worker individuais. Muitas reinicializações do contêiner podem afetar a disponibilidade do seu serviço ou de outros serviços downstream que o usam como uma dependência.

Conheça os comparativos de mercado e as possíveis ações corretivas para as principais métricas

A lista a seguir descreve os valores de comparação que podem indicar problemas e fornece ações corretivas que podem ser realizadas para resolvê-los.

  • Integridade do ambiente (DAG de monitoramento do Airflow)

    • Taxa de sucesso de menos de 90% em uma janela de quatro horas

    • As falhas podem significar remoções de pods ou encerramentos de workers porque o ambiente está sobrecarregado ou com problemas. As áreas vermelhas na linha do tempo de integridade do ambiente geralmente estão relacionadas a áreas vermelhas nas outras barras de integridade dos componentes do ambiente individuais. Identifique a causa raiz analisando outras métricas no painel do Monitoring.

  • Integridade do banco de dados

    • Taxa de sucesso de menos de 95% em uma janela de quatro horas

    • As falhas significam que há problemas com a conectividade com o banco de dados do Airflow. Isso pode ser resultado de uma falha ou inatividade do banco de dados devido a uma sobrecarga. Por exemplo, devido ao alto uso de CPU ou memória ou latência maior durante a conexão. Esses sintomas são causados com mais frequência por DAGs abaixo do ideal, como quando eles usam muitas variáveis de ambiente ou do Airflow definidas globalmente. Identifique a causa raiz analisando as métricas de uso de recursos do banco de dados SQL. Também é possível inspecionar os registros do programador em busca de erros relacionados à conectividade do banco de dados.

  • Uso de memória e CPU do banco de dados

    • Mais de 80% do uso médio de CPU ou memória em uma janela de 12 horas

    • O banco de dados pode estar sobrecarregado. Analise a correlação entre as execuções e picos do DAG no uso da CPU ou da memória do banco de dados.

  • Sinal de funcionamento do programador

    • Taxa de sucesso de menos de 90% em uma janela de quatro horas

    • Atribua mais recursos ao programador ou aumente o número de programadores de um para dois (recomendado).

  • Tarefas zumbi excluídas

    • Mais de uma tarefa zumbi a cada 24 horas

    • O motivo mais comum para as tarefas zumbi é a falta de recursos de CPU ou memória no cluster do ambiente. Analise os gráficos de uso de recursos do worker e atribua mais recursos a eles ou aumente o tempo limite das tarefas zumbi para que o programador espere mais antes de considerar uma tarefa zumbi.

  • Reinicializações do contêiner do worker

Criar canais de notificação

Siga as instruções descritas em Criar um canal de notificação para criar um canal de notificação por e-mail.

Para saber mais sobre os canais de notificação, consulte Gerenciar canais de notificação.

Criar políticas de alerta

Crie políticas de alertas com base nos comparativos de mercado fornecidos nas seções anteriores deste tutorial para monitorar continuamente os valores das métricas e receber notificações quando elas violarem uma condição.

Console

É possível configurar alertas para cada métrica apresentada no painel do Monitoring clicando no ícone de sino no canto do item correspondente:

Crie um alerta para uma métrica que aparece no painel do Monitoring.
Figura 1. Crie um alerta para uma métrica exibida no painel de monitoramento (clique para ampliar)
  1. Encontre cada métrica que você quer monitorar no painel do Monitoring e clique no ícone de sino no canto do item de métrica. A página Criar política de alertas é aberta.

  2. Na seção Transformar dados:

    1. Configure a seção Em cada série temporal conforme descrito na configuração de políticas de alertas para a métrica.

    2. Clique em Próxima e configure a seção Configurar o gatilho de alerta, conforme descrito na configuração de políticas de alertas para a métrica.

  3. Clique em Próxima.

  4. Configure as notificações. Expanda o menu Canais de notificação e selecione os canais de notificação que você criou na etapa anterior.

  5. Clique em OK.

  6. Na seção Nomear a política de alertas, preencha o campo Nome da política de alertas. Use um nome descritivo para cada métrica. Use o valor "Nomear a política de alertas" conforme descrito na configuração de políticas de alertas para a métrica.

  7. Clique em Próxima.

  8. Revise a política de alertas e clique em Criar política.

Métrica de integridade do ambiente (DAG de monitoramento do Airflow): configurações de política de alertas

  • Nome da métrica: ambiente do Cloud Composer — íntegro
  • API: composer.googleapis.com/environment/healthy
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformar dados > Em cada série temporal:

    • Janela contínua: personalizada
    • Valor personalizado: 4
    • Unidades personalizadas: horas
    • Função de janela contínua: fração "true"
  • Configure o acionador de alerta:

    • Tipos de condição: limite
    • Acionador de alerta: qualquer série temporal viola
    • Posição do limite: abaixo do limite
    • Valor limite: 90
    • Nome da condição: Condição de integridade do ambiente
  • Configure as notificações e finalize o alerta:

    • Nomeie a política de alertas: "Integridade do ambiente do Airflow"

Métrica de integridade do banco de dados: configurações de política de alertas

  • Nome da métrica: Ambiente do Cloud Composer - Integridade do banco de dados
  • API: composer.googleapis.com/environment/database_health
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformar dados > Em cada série temporal:

    • Janela contínua: personalizada
    • Valor personalizado: 4
    • Unidades personalizadas: horas
    • Função de janela contínua: fração "true"
  • Configure o acionador de alerta:

    • Tipos de condição: limite
    • Acionador de alerta: qualquer série temporal viola
    • Posição do limite: abaixo do limite
    • Valor limite: 95
    • Nome da condição: Condição de integridade do banco de dados
  • Configure as notificações e finalize o alerta:

    • Nomeie a política de alertas: integridade do banco de dados do Airflow

Métrica de uso da CPU do banco de dados: configurações da política de alertas

  • Nome da métrica: Ambiente do Cloud Composer - Uso da CPU do banco de dados
  • API: composer.googleapis.com/environment/database/cpu/utilization
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformar dados > Em cada série temporal:

    • Janela contínua: personalizada
    • Valor personalizado: 12
    • Unidades personalizadas: horas
    • Função de janela contínua: mean
  • Configure o acionador de alerta:

    • Tipos de condição: limite
    • Acionador de alerta: qualquer série temporal viola
    • Posição do limite: acima do limite
    • Valor limite: 80
    • Nome da condição: condição de uso da CPU do banco de dados
  • Configure as notificações e finalize o alerta:

    • Nomeie a política de alertas: Uso da CPU do banco de dados do Airflow

Métrica de uso da CPU do banco de dados: configurações da política de alertas

  • Nome da métrica: Ambiente do Cloud Composer - Uso da memória do banco de dados
  • API: composer.googleapis.com/environment/database/memory/utilization
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformar dados > Em cada série temporal:

    • Janela contínua: personalizada
    • Valor personalizado: 12
    • Unidades personalizadas: horas
    • Função de janela contínua: mean
  • Configure o acionador de alerta:

    • Tipos de condição: limite
    • Acionador de alerta: qualquer série temporal viola
    • Posição do limite: acima do limite
    • Valor limite: 80
    • Nome da condição: condição de uso da memória do banco de dados
  • Configure as notificações e finalize o alerta:

    • Nomeie a política de alertas: uso da memória do banco de dados do Airflow

Métrica de sinal de funcionamento do programador: configurações de política de alertas

  • Nome da métrica: ambiente do Cloud Composer - sinais de funcionamento do programador
  • API: composer.googleapis.com/environment/scheduler_heartbeat_count
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformar dados > Em cada série temporal:

    • Janela contínua: personalizada
    • Valor personalizado: 4
    • Unidades personalizadas: horas
    • Função de janela contínua: count
  • Configure o acionador de alerta:

    • Tipos de condição: limite
    • Acionador de alerta: qualquer série temporal viola
    • Posição do limite: abaixo do limite
    • Valor do limite: 216

      1. Para conseguir esse número, execute uma consulta que agrega o valor _scheduler_heartbeat_count_mean no Editor de consultas do Metrics Explorer.
    • Nome da condição: condição de sinal de funcionamento do programador

  • Configure as notificações e finalize o alerta:

    • Nomeie a política de alertas: Heartbeat do programador do Airflow

Métrica de tarefas zumbis eliminadas: configurações de política de alertas

  • Nome da métrica: Ambiente do Cloud Composer - Tarefas zumbis encerradas
  • API: composer.googleapis.com/environment/zombie_task_killed_count
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformar dados > Em cada série temporal:

    • Janela contínua: 1 dia
    • Função de janela contínua: soma
  • Configure o acionador de alerta:

    • Tipos de condição: limite
    • Acionador de alerta: qualquer série temporal viola
    • Posição do limite: acima do limite
    • Valor limite: 1
    • Nome da condição: condição de tarefas zumbi
  • Configure as notificações e finalize o alerta:

    • Nomeie a política de alertas: tarefas zumbis do Airflow

Métrica de reinicializações do contêiner de worker: configurações de política de alertas

  • Nome da métrica: Ambiente do Cloud Composer - Tarefas zumbis encerradas
  • API: composer.googleapis.com/environment/zombie_task_killed_count
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformar dados > Em cada série temporal:

    • Janela contínua: 1 dia
    • Função de janela contínua: soma
  • Configure o acionador de alerta:

    • Tipos de condição: limite
    • Acionador de alerta: qualquer série temporal viola
    • Posição do limite: acima do limite
    • Valor limite: 1
    • Nome da condição: condição de tarefas zumbi
  • Configure as notificações e finalize o alerta:

    • Nomeie a política de alertas: tarefas zumbis do Airflow

Terraform

Execute um script do Terraform que cria um canal de notificação por e-mail e faz upload de políticas de alertas para as principais métricas fornecidas neste tutorial com base nos respectivos comparativos de mercado:

  1. Salve o arquivo de exemplo do Terraform no computador local.
  2. Substitua:

    • PROJECT_ID: o ID do seu projeto. Por exemplo, example-project.
    • EMAIL_ADDRESS: o endereço de e-mail que precisa ser notificado caso um alerta seja acionado.
    • ENVIRONMENT_NAME: o nome do ambiente do Cloud Composer. Por exemplo, example-composer-environment.
    • CLUSTER_NAME: o nome do cluster de ambiente que pode ser encontrado em Configuração do ambiente > Recursos > Cluster do GKE no console do 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"
      }
    }
  }
}

Testar as políticas de alertas

Nesta seção, descrevemos como testar as políticas de alertas criadas e interpretar os resultados.

Fazer upload de um DAG de amostra

O DAG de amostra memory_consumption_dag.py fornecido neste tutorial imita a utilização intensiva da memória do worker. O DAG contém quatro tarefas. Cada uma grava dados em uma string de amostra, consumindo 380 MB de memória. O DAG de amostra está programado para ser executado a cada dois minutos e começará a ser executado automaticamente assim que você fizer upload dele para o ambiente do Composer.

Faça o upload do seguinte DAG de amostra para o ambiente que você criou nas etapas 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 e métricas no Monitoring

Aguarde cerca de 10 minutos após o início da execução do DAG de amostra e avalie os resultados do teste:

  1. Verifique sua caixa de e-mails para confirmar se você recebeu uma notificação do Google Cloud Alerting com a linha de assunto que começa com [ALERT]. O conteúdo desta mensagem contém os detalhes do incidente da política de alertas.

  2. Clique no botão Ver incidente na notificação por e-mail. Você será redirecionado para o Metrics Explorer. Revise os detalhes do incidente de alerta:

    Detalhes do incidente de alerta
    Figura 2. Detalhes do incidente de alerta (clique para ampliar)

    O gráfico de métricas de incidentes indica que as métricas que você criou excederam o limite de 1, o que significa que o Airflow detectou e eliminou mais de uma tarefa zumbi.

  3. No ambiente do Cloud Composer, acesse a guia Monitoramento, abra a seção Estatísticas do DAG e encontre o gráfico Tarefas zumbis eliminadas:

    Gráfico de tarefas zumbi
    Figura 3. Gráfico de tarefas zumbi (clique para ampliar)

    O gráfico indica que o Airflow eliminou cerca de 20 tarefas zumbi apenas nos primeiros 10 minutos de execução do DAG de amostra.

  4. De acordo com os comparativos de mercado e as ações corretivas, a razão mais comum para tarefas zumbi é a falta de memória ou CPU do worker. Identifique a causa raiz das tarefas zumbi analisando a utilização de recursos do worker.

    Abra a seção "Workers" no painel do Monitoring e analise as métricas de uso de CPU e memória do worker:

    Métricas de uso de CPU e memória do worker
    Figura 4.Métricas de uso da CPU e da memória do worker (clique para ampliar)

    O gráfico de uso da CPU "Total de workers" indica que o uso da CPU estava abaixo de 50% do limite total disponível em todos os momentos, portanto, a CPU disponível é suficiente. O gráfico de uso de memória total dos workers mostra que executar o DAG de amostra resultou em um limite de memória alocável, o que equivale a quase 75% do limite total mostrado no gráfico. O GKE reserva 25% dos primeiros 4 GiB de memória e mais 100 MiB de memória em cada nó para lidar com a remoção de pods.

    É possível concluir que os workers não têm os recursos de memória para executar o DAG de amostra.

Otimizar o ambiente e avaliar o desempenho dele

Com base na análise da utilização de recursos do worker, você precisa alocar mais memória para seus workers para que todas as tarefas no DAG sejam bem-sucedidas.

  1. No ambiente do Composer, abra a guia DAGs, clique no nome do DAG de amostra (memory_consumption_dag) e clique em Pausar DAG.

  2. Aloque mais memória do worker:

    1. Na guia de configuração do ambiente, encontre a configuração Recursos > Cargas de trabalho e clique em Editar.

    2. No item Worker, aumente o limite de Memória. Neste tutorial, use 3,25 GB.

    3. Salve as mudanças e aguarde alguns minutos até que o worker seja reiniciado.

  3. Abra a guia "DAGs", clique no nome do DAG de amostra (memory_consumption_dag) e depois em Retomar DAG.

Acesse o Monitoring e verifique se nenhuma nova tarefa zumbi apareceu depois que você atualizou os limites de recursos do worker:

Gráfico de tarefas zumbi após mudar o limite de memória
Figura 5. Gráfico de tarefas zumbis após a mudança do limite de memória (clique para ampliar)

Resumo

Neste tutorial, você aprendeu sobre as principais métricas de integridade e desempenho no nível do ambiente, como configurar políticas de alertas para cada métrica e como interpretar cada métrica em ações corretivas. Em seguida, você executou um DAG de amostra, identificou a causa raiz dos problemas de integridade do ambiente com a ajuda de alertas e gráficos do Monitoring e otimizou o ambiente alocando mais memória aos workers. No entanto, é recomendável otimizar os DAGs para reduzir o consumo de recursos do worker, porque não é possível aumentar os recursos além de um determinado limite.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Excluir o projeto

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Excluir recursos individuais

Se você planeja ver vários tutoriais e guias de início rápido, a reutilização de projetos pode evitar que você exceda os limites da cota do projeto.

Console

  1. Exclua o ambiente do Cloud Composer. Você também exclui o bucket do ambiente durante esse procedimento.
  2. Exclua cada uma das políticas de alertas criadas no Cloud Monitoring.

Terraform

  1. Verifique se o script do Terraform não contém entradas para recursos que ainda são exigidos pelo seu projeto. Por exemplo, caso você tenha adicionado essas definições ao seu script do Terraform, é possível manter algumas APIs ativadas e as permissões do IAM ainda atribuídas.
  2. Execute terraform destroy.
  3. Exclua manualmente o bucket do ambiente. O Cloud Composer não o exclui automaticamente. É possível fazer isso no console do Google Cloud ou na Google Cloud CLI.

A seguir