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:
- Cloud Composer (consulte os custos adicionais)
- Cloud Monitoring
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:
Na Google Cloud consola, selecione ou crie um projeto:
Certifique-se de que a faturação está ativada para o seu projeto. Saiba como verificar se a faturação está ativada num projeto.
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
)
- Administrador de objetos de ambiente e armazenamento
(
Ative APIs para o seu projeto
Enable the Cloud Composer 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:
Na Google Cloud consola, aceda à página Ambientes.
Na lista de ambientes, clique no nome do seu ambiente. É apresentada a página Detalhes do ambiente.
Aceda ao separador Monitorização.
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
.
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 comoFalse
caso contrário.
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.
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.
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.
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.
Pode reduzir a carga da base de dados através de DAGs mais eficientes com consultas e ligações de execução otimizadas ou distribuindo a carga de forma mais uniforme ao longo do tempo.
Em alternativa, pode atribuir mais CPU ou memória à base de dados. Os recursos da base de dados são controlados pela propriedade de tamanho do ambiente do seu ambiente, e o ambiente tem de ser dimensionado para um tamanho maior.
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:

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.
Na secção Transformar dados:
Configure a secção Em cada série cronológica conforme descrito na configuração das políticas de alerta para a métrica.
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.
Clicar em Seguinte.
Configure as notificações. Expanda o menu Canais de notificação e selecione os canais de notificação que criou no passo anterior.
Clique em OK.
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.
Clicar em Seguinte.
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
- 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.
- Pode obter este número executando uma consulta que agrega o valor
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 CloudTransforme 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:
- Guarde o ficheiro Terraform de exemplo no seu computador local.
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:
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.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:
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.
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:
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.
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:
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.
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.Atribua memória adicional ao trabalhador:
No separador Configuração do ambiente, encontre a configuração Recursos > Cargas de trabalho e clique em Editar.
No item Worker, aumente o limite de memória. Neste tutorial, use 3,25 GB.
Guarde as alterações e aguarde alguns minutos para que o trabalhador seja reiniciado.
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:

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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
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
- Elimine o ambiente do Cloud Composer. Também elimina o contentor do ambiente durante este procedimento.
- Elimine cada uma das políticas de alerta que criou no Cloud Monitoring.
Terraform
- 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).
- Corrida
terraform destroy
. - 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?
- Otimize ambientes
- Expanda ambientes
- Faça a gestão das etiquetas de ambiente e discrimine os custos do ambiente