Monitorize o estado e o desempenho do ambiente com as principais métricas no painel de controlo de monitorização

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Esta página descreve como monitorizar o estado e o desempenho gerais do ambiente do Cloud Composer com as principais métricas no painel de controlo de monitorização.

Introdução

Este tutorial foca-se nas principais métricas de monitorização do Cloud Composer que podem fornecer uma boa vista geral do estado e do desempenho ao nível do ambiente.

O Cloud Composer oferece várias métricas que descrevem o estado geral do ambiente. As diretrizes de monitorização neste tutorial baseiam-se nas métricas expostas no painel de controlo de monitorização do seu ambiente do Cloud Composer.

Neste tutorial, vai saber mais sobre as principais métricas que servem como indicadores principais de problemas com o desempenho e o estado do seu ambiente, bem como as diretrizes para interpretar cada métrica em ações corretivas para manter o ambiente em bom estado. Também vai configurar regras de alerta para cada métrica, executar o DAG de exemplo e usar estas métricas e alertas para otimizar o desempenho do seu ambiente.

Objetivos

Custos

Este tutorial usa os seguintes componentes faturáveis do Google Cloud:

Quando terminar este tutorial, pode evitar a faturação contínua eliminando os recursos que criou. Para mais detalhes, consulte o artigo Limpe.

Antes de começar

Esta secção descreve as ações necessárias antes de iniciar o tutorial.

Crie e configure um projeto

Para este tutorial, precisa de um Google Cloud projeto. Configure o projeto da seguinte forma:

  1. Na Google Cloud consola, selecione ou crie um projeto:

    Aceder ao seletor de projetos

  2. Certifique-se de que a faturação está ativada para o seu projeto. Saiba como verificar se a faturação está ativada num projeto.

  3. Certifique-se de que o utilizador do Google Cloud projeto tem as seguintes funções para criar os recursos necessários:

    • Administrador de objetos de ambiente e armazenamento (roles/composer.environmentAndStorageObjectAdmin)
    • Administrador do Compute (roles/compute.admin)
    • Editor de monitorização (roles/monitoring.editor)

Ative APIs para o seu projeto

Enable the Cloud Composer API.

Enable the API

Crie o seu ambiente do Cloud Composer

Crie um ambiente do Cloud Composer 2.

Como parte deste procedimento, concede a função 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 esta conta para realizar operações no seu Google Cloud projeto.

Explore as principais métricas de desempenho e estado ao nível do ambiente

Este tutorial foca-se nas principais métricas que podem dar-lhe uma boa vista geral do estado geral e do desempenho do seu ambiente.

O painel de controlo de monitorização na Google Cloud consola contém várias métricas e gráficos que permitem monitorizar tendências no seu ambiente e identificar problemas com os componentes do Airflow e os recursos do Cloud Composer.

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

Familiarize-se com as principais métricas abaixo e localize cada métrica no painel de controlo de monitorização:

  1. Na Google Cloud consola, aceda à página Ambientes.

    Aceder a Ambientes

  2. Na lista de ambientes, clique no nome do seu ambiente. É apresentada a página Detalhes do ambiente.

  3. Aceda ao separador Monitorização.

  4. Selecione a secção Vista geral, localize o item Vista geral do ambiente no painel de controlo e observe a métrica Estado do ambiente (monitorização de DAGs do Airflow).

    • Esta cronologia mostra o estado do ambiente do Cloud Composer. A cor verde da barra de estado do ambiente indica que o ambiente está em bom estado, enquanto o estado de ambiente não saudável é indicado com a cor vermelha.

    • A cada poucos minutos, o Cloud Composer executa um DAG de atividade denominado airflow_monitoring. Se a execução do DAG de atividade for concluída com êxito, o estado de funcionamento é True. Se a execução do DAG de atividade falhar (por exemplo, devido à remoção de pods, à terminação de processos externos ou à manutenção), o estado de saúde é False.

  5. Selecione a secção Base de dados SQL, localize o item Estado da base de dados no painel de controlo e observe a métrica Estado da base de dados.

    • Esta cronologia mostra o estado da ligação à instância do Cloud SQL do seu ambiente. A barra de estado verde da base de dados indica a conetividade, enquanto as falhas de ligação são indicadas com a cor vermelha.

    • O pod de monitorização do Airflow envia pings periodicamente para a base de dados e comunica o estado de funcionamento como True se for possível estabelecer uma ligação ou como False caso contrário.

  6. No item Estado da base de dados, observe as métricas Utilização da CPU da base de dados e Utilização da memória da base de dados.

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

    • O gráfico de utilização de memória da base de dados indica a utilização de memória pelas instâncias da base de dados do Cloud SQL do seu ambiente em comparação com o limite total de memória da base de dados disponível.

  7. Selecione a secção Agendadores, localize o item Sinal de vida do agendador no painel de controlo e observe a métrica Sinal de vida do agendador.

    • Esta cronologia mostra o estado do programador do Airflow. Verifique se existem áreas vermelhas para identificar problemas do programador do Airflow. Se o seu ambiente tiver mais do que um programador, o estado de sinal de presença é considerado bom desde que pelo menos um dos programadores esteja a responder.

    • O programador é considerado não saudável se a última pulsação tiver sido recebida mais de 30 segundos (valor predefinido) antes da hora atual.

  8. Selecione a secção Estatísticas de DAG, localize o item Tarefas órfãs terminadas no painel de controlo e observe a métrica Tarefas órfãs terminadas.

    • Este gráfico indica o número de tarefas zombie terminadas num pequeno período. As tarefas zombie são frequentemente causadas pela terminação externa dos processos do Airflow (por exemplo, quando o processo de uma tarefa é terminado).

    • O programador do Airflow termina as tarefas zombie periodicamente, o que se reflete neste gráfico.

  9. Selecione a secção Trabalhadores, localize o item Reinícios do contentor de trabalhadores no painel de controlo e observe a métrica Reinícios do contentor de trabalhadores.

    • Um gráfico indica o número total de reinícios de contentores de trabalho individuais. Demasiados reinícios do contentor podem afetar a disponibilidade do seu serviço ou de outros serviços a jusante que o usam como dependência.

Conheça as referências e as possíveis ações corretivas para as principais métricas

A lista seguinte descreve os valores de referência que podem indicar problemas e apresenta ações corretivas que pode tomar para resolver estes problemas.

  • Estado de funcionamento do ambiente (DAG de monitorização do fluxo de ar)

    • Rácio de êxito inferior a 90% durante um período de 4 horas

    • As falhas podem significar despejos de pods ou rescisões de trabalhadores porque o ambiente está sobrecarregado ou com mau funcionamento. As áreas vermelhas na cronologia de saúde do ambiente geralmente estão correlacionadas com as áreas vermelhas nas outras barras de saúde dos componentes ambientais individuais. Identifique a causa principal revendo outras métricas no painel de controlo de monitorização.

  • Estado da base de dados

    • Relação de sucesso inferior a 95% durante um período de 4 horas

    • As falhas significam que existem problemas de conetividade com a base de dados do Airflow, o que pode ser o resultado de uma falha do sistema ou de um tempo de inatividade da base de dados porque esta está sobrecarregada (por exemplo, devido a uma utilização elevada da CPU ou da memória, ou a uma latência mais elevada durante a ligação à base de dados). Estes sintomas são causados com maior frequência por DAGs abaixo do ideal, como quando os DAGs usam muitas variáveis de ambiente ou do Airflow definidas globalmente. Identifique a causa principal revendo as métricas de utilização de recursos da base de dados SQL. Também pode inspecionar os registos do agendador para ver erros relacionados com a conetividade da base de dados.

  • Utilização da CPU e da memória da base de dados

    • Mais de 80% na utilização média da CPU ou da memória num período de 12 horas

    • A base de dados pode estar sobrecarregada. Analise a correlação entre as execuções do DAG e os picos na utilização de memória ou CPU da base de dados.

  • Ritmo do programador

    • Rácio de êxito inferior a 90% durante um período de 4 horas

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

  • Tarefas zombie terminadas

    • Mais de uma tarefa zombie por cada 24 horas

    • O motivo mais comum para as tarefas zombie é a escassez de recursos de CPU ou memória no cluster do seu ambiente. Reveja os gráficos de utilização de recursos dos trabalhadores e atribua mais recursos aos seus trabalhadores ou aumente o limite de tempo das tarefas inativas para que o programador espere mais tempo antes de considerar uma tarefa inativa.

  • Reinícios do contentor de trabalho

    • Mais de um reinício por 24 horas

    • O motivo mais comum é a falta de memória ou armazenamento do trabalhador. Analise o consumo de recursos dos trabalhadores e atribua mais memória ou armazenamento aos seus trabalhadores. Se a falta de recursos não for o motivo, investigue a resolução de problemas de incidentes de reinício do trabalhador e use as consultas de registo para descobrir os motivos dos reinícios do trabalhador.

Crie canais de notificação

Siga as instruções descritas no artigo Crie um canal de notificação para criar um canal de notificação por email.

Para mais informações sobre os canais de notificação, consulte o artigo Faça a gestão dos canais de notificação.

Crie políticas de alerta

Crie políticas de alerta com base nas referências fornecidas nas secções anteriores deste tutorial para monitorizar continuamente os valores das métricas e receber notificações quando essas métricas violarem uma condição.

Consola

Pode configurar alertas para cada métrica apresentada no painel de controlo de monitorização clicando no ícone de sino no canto do item correspondente:

Crie um alerta para uma métrica apresentada no painel de controlo de monitorização
Figura 1. Crie um alerta para uma métrica apresentada no painel de controlo de monitorização (clique para aumentar)
  1. Encontre cada métrica que quer monitorizar no painel de controlo de monitorização e clique no ícone de sino no canto do item de métrica. É apresentada a página Criar política de alertas.

  2. Na secção Transformar dados:

    1. Configure a secção Em cada série cronológica conforme descrito na configuração das políticas de alerta para a métrica.

    2. Clique em Seguinte e, de seguida, configure a secção Configurar acionador de alerta, conforme descrito na configuração das políticas de alerta para a métrica.

  3. Clicar em Seguinte.

  4. Configure as notificações. Expanda o menu Canais de notificação e selecione os canais de notificação que criou no passo anterior.

  5. Clique em OK.

  6. Na secção Atribua um nome à política de alertas, preencha o campo Nome da política de alertas. Use um nome descritivo para cada uma das métricas. Use o valor "Nome da política de alerta" conforme descrito na configuração das políticas de alerta para a métrica.

  7. Clicar em Seguinte.

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

Métrica de estado do ambiente (DAG de monitorização do Airflow) – configurações de políticas de alerta

  • Nome da métrica: ambiente do Cloud Composer – Em bom estado
  • API: composer.googleapis.com/environment/healthy
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transforme dados > Em cada série cronológica:

    • Janela contínua: personalizada
    • Valor personalizado: 4
    • Unidades personalizadas: hora(s)
    • Função de janela móvel: fração verdadeira
  • Configure o acionador de alerta:

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

    • Dê um nome à política de alerta: Airflow Environment Health

Métrica de saúde da base de dados: configurações da política de alerta

  • Nome da métrica: ambiente do Cloud Composer – Base de dados em bom estado
  • API: composer.googleapis.com/environment/database_health
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transforme dados > Em cada série cronológica:

    • Janela contínua: personalizada
    • Valor personalizado: 4
    • Unidades personalizadas: hora(s)
    • Função de janela móvel: fração verdadeira
  • Configure o acionador de alerta:

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

    • Dê um nome à política de alerta: Airflow Database Health

Métrica de utilização da CPU da base de dados: configurações da política de alerta

  • Nome da métrica: ambiente do Cloud Composer – Utilização da CPU da base de dados
  • API: composer.googleapis.com/environment/database/cpu/utilization
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transforme dados > Em cada série cronológica:

    • Janela contínua: personalizada
    • Valor personalizado: 12
    • Unidades personalizadas: hora(s)
    • Função de janela móvel: média
  • Configure o acionador de alerta:

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

    • Atribua o seguinte nome à política de alerta: Airflow Database CPU Usage

Métrica de utilização da memória da base de dados: configurações da política de alertas

  • Nome da métrica: ambiente do Cloud Composer – Utilização da memória da base de dados
  • API: composer.googleapis.com/environment/database/memory/utilization
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transforme dados > Em cada série cronológica:

    • Janela contínua: personalizada
    • Valor personalizado: 12
    • Unidades personalizadas: hora(s)
    • Função de janela móvel: média
  • Configure o acionador de alerta:

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

    • Nome da política de alerta: Airflow Database Memory Usage

Métrica de sinais de vida do programador: configurações da política de alerta

  • Nome da métrica: Cloud Composer Environment - Scheduler Heartbeats
  • API: composer.googleapis.com/environment/scheduler_heartbeat_count
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transforme dados > Em cada série cronológica:

    • Janela contínua: personalizada
    • Valor personalizado: 4
    • Unidades personalizadas: hora(s)
    • Função de janela móvel: contagem
  • Configure o acionador de alerta:

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

      1. Pode obter este número executando uma consulta que agrega o valor _scheduler_heartbeat_count_mean no editor de consultas do explorador de métricas.
    • Nome da condição: condição de heartbeat do Scheduler

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

    • Dê um nome à política de alerta: Airflow Scheduler Heartbeat

Métrica de tarefas de zombie terminadas: configurações da política de alertas

  • Nome da métrica: ambiente do Cloud Composer – Tarefas órfãs terminadas
  • API: composer.googleapis.com/environment/zombie_task_killed_count
  • Filtros:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transforme dados > Em cada série cronológica:

    • Período móvel: 1 dia
    • Função de janela móvel: soma
  • Configure o acionador de alerta:

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

    • Dê um nome à política de alerta: Airflow Zombie Tasks

Métrica de reinícios do contentor de trabalhadores: configurações da política de alertas

  • Nome da 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 é o nome do cluster do seu ambiente, que pode encontrar em Configuração do ambiente > Recursos > cluster do GKE na consola. Google Cloud

  • Transforme dados > Em cada série cronológica:

    • Período móvel: 1 dia
    • Função de janela móvel: taxa
  • Configure o acionador de alerta:

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

    • Dê um nome à política de alerta: Airflow Worker Restarts

Terraform

Execute um script do Terraform que crie um canal de notificação por email e carregue políticas de alerta para as principais métricas fornecidas neste tutorial com base nos respetivos testes de referência:

  1. Guarde o ficheiro Terraform de exemplo no seu computador local.
  2. Substitua o seguinte:

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

Teste as políticas de alerta

Esta secção descreve como testar as políticas de alerta criadas e interpretar os resultados.

Carregue um DAG de exemplo

O DAG de exemplo memory_consumption_dag.py fornecido neste tutorial imita a utilização intensiva da memória do trabalhador. O DAG contém 4 tarefas. Cada uma das tarefas escreve dados numa string de exemplo, consumindo 380 MB de memória. O DAG de exemplo está agendado para ser executado a cada 2 minutos e começa a ser executado automaticamente assim que o carregar para o seu ambiente do Composer.

Carregue o seguinte DAG de exemplo para o ambiente que criou nos passos 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,
        )

Interprete alertas e métricas na monitorização

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

  1. Verifique a sua caixa de correio eletrónico para confirmar que recebeu uma notificação do Google Cloud Alerting com a linha de assunto que começa por [ALERT]. O conteúdo desta mensagem contém os detalhes do incidente da política de alerta.

  2. Clique no botão Ver incidente na notificação por email. É redirecionado para o Explorador de métricas. Reveja os detalhes do incidente de alerta:

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

    O gráfico de métricas de incidentes indica que as métricas que criou excederam o limite de 1, o que significa que o Airflow detetou e terminou mais de 1 tarefa zombie.

  3. No seu ambiente do Cloud Composer, aceda ao separador Monitorização, abra a secção Estatísticas de DAGs e encontre o gráfico Tarefas zombie terminadas:

    Gráfico de tarefas zombie
    Figura 3. Gráfico de tarefas de zombies (clique para aumentar)

    O gráfico indica que o Airflow terminou cerca de 20 tarefas zombi nos primeiros 10 minutos de execução do DAG de exemplo.

  4. De acordo com os testes de referência e as ações corretivas, o motivo mais comum para as tarefas zombie é a falta de memória ou CPU do trabalhador. Identifique a causa principal das tarefas zombie analisando a utilização dos recursos dos trabalhadores.

    Abra a secção Workers no painel de controlo Monitoring e reveja as métricas de utilização de memória e CPU dos trabalhadores:

    Métricas de utilização da CPU e da memória do trabalhador
    Figura 4. Métricas de utilização da CPU e da memória do trabalhador (clique para aumentar)

    O gráfico de utilização da CPU dos trabalhadores totais indica que a utilização da CPU dos trabalhadores foi sempre inferior a 50% do limite disponível total. Por isso, a CPU disponível é suficiente. O gráfico de utilização de memória total dos trabalhadores mostra que a execução do DAG de exemplo resultou no atingimento do limite de memória alocável, que é igual a quase 75% do limite de memória total apresentado no gráfico (o GKE reserva 25% dos primeiros 4 GiB de memória e 100 MiB de memória adicionais em cada nó para processar a remoção de pods).

    Pode concluir que os trabalhadores não têm os recursos de memória necessários para executar o DAG de exemplo com êxito.

Otimize o seu ambiente e avalie o respetivo desempenho

Com base na análise da utilização de recursos dos trabalhadores, tem de atribuir mais memória aos trabalhadores para que todas as tarefas no seu DAG sejam bem-sucedidas.

  1. No seu ambiente do Composer, abra o separador DAGs, clique no nome do DAG de exemplo (memory_consumption_dag) e, de seguida, clique em Pausar DAG.

  2. Atribua memória adicional ao trabalhador:

    1. No separador 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. Guarde as alterações e aguarde alguns minutos para que o trabalhador seja reiniciado.

  3. Abra o separador DAGs, clique no nome do DAG de exemplo (memory_consumption_dag) e clique em Desativar pausa do DAG.

Aceda a Monitorização e verifique se não apareceram novas tarefas zombie depois de atualizar os limites de recursos do trabalhador:

Gráfico de tarefas zombi após a alteração do limite de memória
Figura 5. Gráfico de tarefas zombi após a alteração do limite de memória (clique para aumentar)

Resumo

Neste tutorial, aprendeu sobre as principais métricas de estado e desempenho ao nível do ambiente, como configurar políticas de alerta para cada métrica e como interpretar cada métrica em ações corretivas. Em seguida, executou um DAG de exemplo, identificou a causa principal dos problemas de estado do ambiente com a ajuda de alertas e gráficos de monitorização e otimizou o seu ambiente atribuindo mais memória aos seus trabalhadores. No entanto, recomendamos que otimize os seus DAGs para reduzir o consumo de recursos do trabalhador em primeiro lugar, porque não é possível aumentar os recursos além de um determinado limite.

Limpar

Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Elimine o projeto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Elimine recursos individuais

Se planeia explorar vários tutoriais e inícios rápidos, a reutilização de projetos pode ajudar a evitar exceder os limites de quota do projeto.

Consola

  1. Elimine o ambiente do Cloud Composer. Também elimina o contentor do ambiente durante este procedimento.
  2. Elimine cada uma das políticas de alerta que criou no Cloud Monitoring.

Terraform

  1. Certifique-se de que o script do Terraform não contém entradas para recursos que o seu projeto ainda precisa. Por exemplo, pode querer manter algumas APIs ativadas e as autorizações do IAM ainda atribuídas (se adicionou essas definições ao seu script do Terraform).
  2. Corrida terraform destroy.
  3. Elimine manualmente o contentor do ambiente. O Cloud Composer não a elimina automaticamente. Pode fazê-lo a partir da Google Cloud consola ou da Google Cloud CLI.

O que se segue?