Coletar e visualizar métricas de estado do Kube

Esta página descreve como configurar um cluster do Google Kubernetes Engine (GKE) para enviar um conjunto selecionado de estado do kube, incluindo métricas para pods e implantações, ao Cloud Monitoring usando o Google Cloud Managed Service para Prometheus. Esta página também descreve como essas métricas são formatadas quando são gravadas no Monitoring e como consultar métricas.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e inicialize a gcloud CLI. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.

Requisitos

Para coletar Kube State Metrics, o cluster do GKE precisa atender aos seguintes requisitos:

  • O cluster precisa estar executando as seguintes versões com base na métrica que você quer ativar:
    • Para ativar o pacote de métricas do JobSet, seu cluster precisa executar a versão 1.32.1-gke.1357001 ou mais recente. A partir da versão 1.32.1-gke.1357001, o pacote de métricas do JobSet é ativado por padrão em clusters do GKE Standard e Autopilot recém-criados.
    • A métrica kube_jobset_restarts está disponível em clusters 1.32 a partir da versão 1.32.4-gke.1767000 e em clusters 1.33 a partir da versão 1.33.0-gke.1868000.
    • Para ativar qualquer outro pacote de métricas descrito nesta página, seu cluster precisa executar o GKE 1.27.2-gke.1200 ou mais recente. A partir da versão 1.29.2-gke.2000 para clusters do GKE Standard e da versão 1.27.4-gke.900 para clusters do GKE Autopilot, o pacote de métricas de estado do Kube é ativado por padrão.
  • O cluster precisa ter métricas do sistema ativadas.
  • O cluster precisa ter a coleta gerenciada do Google Cloud Managed Service para Prometheus ativada. A coleta gerenciada do Google Cloud Managed Service para Prometheus é ativada por padrão em novos clusters.

Configurar a coleta de Kube State Metrics

É possível ativar as Kube State Metrics usando o Google Cloud console, a CLI gcloud ou o Terraform:

Console

É possível ativar as métricas de estado do kube na guia Observabilidade para um cluster ou uma implantação em um cluster. Também é possível visualizar os gráficos e as métricas disponíveis antes de ativar o pacote de métricas.

Na guia Observabilidade de um cluster, é possível filtrar o conjunto de gráficos para Kube State Metrics pelos dois itens a seguir:

  • Estado das cargas de trabalho: inclui as métricas de pods, implantações, StatefulSets, DaemonSets e recursos HorizontalPodAutoscaler.
  • Armazenamento > Permanente: inclui as métricas para volumes permanentes e declarações de volume permanentes.

Você pode ativar um ou ambos os conjuntos de métricas.

Para ativar as métricas de estado do kube a partir da guia Observabilidade de um cluster, faça o seguinte:

  1. No console Google Cloud , acesse a página Clusters do Kubernetes:

    Acesse Clusters do Kubernetes

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Kubernetes Engine.

  2. Clique no nome do cluster e selecione a guia Observabilidade.

  3. Selecione Estado das cargas de trabalho ou Armazenamento > Permanente na lista de recursos.

  4. Clique em Ativar pacote.

    Se o pacote de métricas de estado do kube já estiverem ativadas, será exibido um conjunto de gráficos para as métricas de estado do kube.

Para ativar as métricas de estado do kube a partir da guia Observabilidade de uma implantação, faça o seguinte:

  1. No console Google Cloud , acesse a página Cargas de trabalho:

    Acesse Cargas de trabalho

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Kubernetes Engine.

  2. Clique no nome da implantação e selecione a guia Observabilidade.

  3. Selecione Kube State na lista de recursos.

  4. Clique em Ativar pacote. O pacote está ativado para todo o cluster.

    Se o pacote de métricas de estado do kube já estiver ativado, você verá um conjunto de gráficos para métricas de pods, implantações e escalonadores automáticos horizontais de pods.

Para configurar as métricas de estado do kube a partir da guia Detalhes do cluster, faça o seguinte:

  1. No console Google Cloud , acesse a página Clusters do Kubernetes:

    Acesse Clusters do Kubernetes

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Kubernetes Engine.

  2. Clique no nome do cluster.

  3. Na linha Recursosdenominada Cloud Monitoring, clique no ícone Editar.

  4. Na caixa de diálogo Editar o Cloud Monitoring, confirme se Ativar o Cloud Monitoring está selecionado.

  5. No menu suspenso Componentes, selecione os componentes de estado do kube de que você quer coletar métricas.

  6. Clique em OK.

  7. Clique em Salvar alterações.

gcloud

Atualize o cluster para coletar métricas:

gcloud container clusters update CLUSTER_NAME \
    --location=COMPUTE_LOCATION \
    --enable-managed-prometheus \
    --monitoring=SYSTEM,DAEMONSET,DEPLOYMENT,HPA,POD,STATEFULSET,STORAGE

Substitua:

O conjunto de valores fornecidos à flag monitoring substitui qualquer configuração anterior.

Terraform

Para configurar a coleção de métricas de estado do Kube usando o Terraform, consulte o bloco monitoring_config no registro do Terraform para google_container_cluster. Para informações gerais sobre como usar o Google Cloud com o Terraform, consulte Terraform com Google Cloud.

Cota

As Kube State Metrics consomem a cota de Solicitações de ingestão de séries temporais por minuto da API Cloud Monitoring. Antes de ativar as métricas de estado do kube, verifique o pico de uso recente dessa cota. Se você tiver muitos clusters no mesmo projeto ou já estiver perto do limite dessa cota, solicite um aumento no limite de cota antes de ativar qualquer pacote de observabilidade.

Preços

As Kube State Metrics usam o Google Cloud Managed Service para Prometheus para carregar métricas no Cloud Monitoring. O Cloud Monitoring cobra pela ingestão dessas métricas com base no número de amostras ingeridas.

Para mais informações, consulte preços do Cloud Monitoring.

Formato da métrica

Todas as métricas de estado do Kube do Kubernetes gravadas no Cloud Monitoring usam o tipo de recurso prometheus_target. Cada nome de métrica é prefixado com prometheus.googleapis.com/ e tem um sufixo indicando o tipo de métrica do Prometheus, como /gauge, /histogram ou /counter. Caso contrário, cada nome de métrica será idêntico ao nome da métrica exposto pelo Kubernetes de código aberto.

Como exportar do Cloud Monitoring

As métricas de estado do kube podem ser exportadas do Cloud Monitoring usando a API Cloud Monitoring. Como todas as métricas de estado do Kube são ingeridas usandoGoogle Cloud Managed Service para Prometheus, as métricas de estado do kube podem ser consultadas usando o Prometheus Query Language (PromQL). Elas também podem ser consultadas usando a linguagem de consulta do Monitoring (MQL).

Métricas de consulta

Quando você consulta as métricas do estado do kube, o nome usado depende do uso dos recursos baseados no PromQL ou Cloud Monitoring, como o MQL ou o Metrics Explorer interface de menu do Google Analytics.

As tabelas de métricas de estado do kube a seguir mostram duas versões do nome de cada métrica:

  • Nome da métrica do PromQL: ao usar o PromQL em páginas do Cloud Monitoring do console Google Cloud ou em campos do PromQL da API Cloud Monitoring, use o nome da métrica do PromQL.
  • Nome da métrica do Cloud Monitoring: ao usar outros recursos do Monitoring, use o nome de métrica do Cloud Monitoring nas tabelas abaixo. Esse nome precisa ser prefixado com prometheus.googleapis.com/, que foi omitido das entradas na tabela.

Métricas de armazenamento

Os nomes das métricas do Cloud Monitoring nesta tabela precisam ser prefixados com prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica do PromQL
Nome da métrica do Cloud Monitoring
Tipo, Classe, Unidade
Recursos monitorados
Versão obrigatória do GKE
Descrição
Rótulos
kube_persistentvolume_capacity_bytes
kube_persistentvolume_capacity_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
Capacidade de persistentvolume em bytes. Amostras coletadas a cada 30 segundos.

persistentvolume: persistentvolume.
kube_persistentvolume_claim_ref
kube_persistentvolume_claim_ref/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Informações sobre a referência de reivindicação de volume permanente. Amostras coletadas a cada 30 segundos.

claim_name: claim_name.
name: nome.
persistentvolume: persistentvolume.
kube_persistentvolume_info
kube_persistentvolume_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Informações sobre o persistentvolume. Amostras coletadas a cada 30 segundos.

csi_driver: csi_driver.
csi_volume_handle: csi_volume_handle.
local_fs: local_fs.
local_path: local_path.
persistentvolume: persistentvolume.
storageclass: storageclass.
kube_persistentvolume_status_phase
kube_persistentvolume_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
A fase indica se um volume está disponível, vinculado a uma reivindicação ou liberado por uma reivindicação. Amostras coletadas a cada 30 segundos.

persistentvolume: persistentvolume.
phase: fase.
kube_persistentvolumeclaim_info
kube_persistentvolumeclaim_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Informações sobre reivindicação de volume permanente. Amostras coletadas a cada 30 segundos.

persistentvolumeclaim: persistentvolumeclaim.
storageclass: storageclass.
volumename: volumename.
kube_persistentvolumeclaim_resource_requests_storage_bytes
kube_persistentvolumeclaim_resource_requests_storage_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
A capacidade de armazenamento solicitada pela reivindicação de volume permanente. Amostras coletadas a cada 30 segundos.

persistentvolumeclaim: persistentvolumeclaim.
kube_persistentvolumeclaim_status_phase
kube_persistentvolumeclaim_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
A fase em que a reivindicação de volume permanente está atualmente. Amostras coletadas a cada 30 segundos.

persistentvolumeclaim: persistentvolumeclaim.
phase: fase.

Para saber mais, consulte Métricas de PersistentVolume e Métricas de PersistentVolumeClaim.

Métricas do pod

Um pod é um grupo de um ou mais contêineres com uma especificação sobre como executá-los, que compartilham recursos de armazenamento e rede.

Tabela de métricas do pod

Com as métricas do pod, é possível monitorar e alertar sobre o comportamento dos pods. A tabela a seguir mostra as métricas disponíveis no pacote de métricas de estado do Kube.

Os nomes das métricas do Cloud Monitoring nesta tabela precisam ser prefixados com prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica do PromQL
Nome da métrica do Cloud Monitoring
Tipo, Classe, Unidade
Recursos monitorados
Versão obrigatória do GKE
Descrição
Rótulos
kube_pod_container_status_ready
kube_pod_container_status_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Descreve se a verificação de prontidão dos contêineres foi concluída. Amostras coletadas a cada 30 segundos.

container: contêiner.
pod: pod.
uid: uid.
kube_pod_container_status_waiting_reason
kube_pod_status_container_status_waiting_reason/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Descreve o motivo pelo qual o contêiner está em espera. Amostras coletadas a cada 30 segundos.

container: contêiner.
pod: pod.
reason: motivo.
uid: uid.
kube_pod_status_phase
kube_pod_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Fase atual dos pods. Amostras coletadas a cada 30 segundos.

phase: fase.
pod: pod.
uid: uid.
kube_pod_status_unschedulable
kube_pod_status_unschedulable/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Descreve o status não programável do pod. Amostras coletadas a cada 30 segundos.

pod: pod.
uid: uid.

Para mais informações, consulte Métricas de pods.

Consultas de amostra para métricas de pods

Para determinar se você tem pods não programáveis, use a seguinte expressão PromQL:

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"})

Para alertar sobre vários pods não programáveis em um namespace, use a seguinte expressão PromQL:

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"}) > LIMIT

É possível usar a métrica kube_pod_container_status_waiting_reason para criar um alerta para um contêiner preso em um estado de espera específico usando uma expressão PromQL como esta:

max_over_time(kube_pod_container_status_waiting_reason{reason="REASON", cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1

O valor de REASON especifica o estado de espera do contêiner, por exemplo:

  • CrashLoopBackOff
  • ImagePullBackOff
  • ContainerCreating

Para criar um alerta para um contêiner preso em qualquer um dos estados de espera, use a seguinte expressão PromQL:

max_over_time(kube_pod_container_status_waiting_reason{cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1

Para determinar quantos contêineres estão falhando nas verificações de prontidão, use a seguinte expressão PromQL

sum(kube_pod_container_status_ready) by (pod, container) == 0

Algumas das expressões de consulta e alerta nesta seção foram adaptadas do arquivo kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade do Prometheus no GitHub.

Manuais interativos

As métricas de estado do Kube também são usadas nos manuais interativos do GKE para solucionar problemas de pods não programáveis ou de loop de falhas. Para mais informações sobre esses modos de falha, consulte os seguintes documentos de solução de problemas:

Sem o pacote de métricas de estado do Kube ativado, a principal maneira de detectar problemas de programação de pods é consultar os eventos de registro "Programação com falha". Depois de ativar o pacote de métricas de estado do kube, é possível usar a métrica kube_pod_status_unschedulable, que tem a mesma finalidade, mas é mais fácil de agregar e gerar gráficos. Ao usar a métrica, é possível ver quantos pods não são programáveis e quando o problema começou.

Da mesma forma, a métrica do sistema do GKE kubernetes.io/container/restart_count pode ajudar a detectar pods com loop de falhas. A métrica kube_pod_container_status_waiting_reason também enumera os pods com loop de falhas e permite determinar se os pods estão travados em estados de espera diferentes de CrashLookBackOff, como ImagePullBackOff e ContainerCreating.

Para conferir os manuais interativos, faça o seguinte:

  1. No console Google Cloud , acesse a página  Painéis:

    Acesse Painéis

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.

  2. Filtre a lista de painéis clicando na categoria G​C​P.
  3. Clique no nome de um painel "GKE Interactive Playbook" na lista.

métricas de implantação;

Uma implantação é um controlador que atualiza o estado de recursos como pods para gerenciar eventos como lançamentos e encerramentos.

Tabela de métricas de implantação

As métricas de implantação permitem monitorar e alertar sobre o comportamento do controlador. A tabela a seguir mostra as métricas disponíveis no pacote de métricas de estado do Kube:

Os nomes das métricas do Cloud Monitoring nesta tabela precisam ser prefixados com prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica do PromQL
Nome da métrica do Cloud Monitoring
Tipo, Classe, Unidade
Recursos monitorados
Versão obrigatória do GKE
Descrição
Rótulos
kube_deployment_spec_replicas
kube_deployment_spec_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de pods desejados para uma implantação. Amostras coletadas a cada 30 segundos.

deployment: implantação.
kube_deployment_status_replicas_available
kube_deployment_status_replicas_available/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de réplicas disponíveis por implantação. Amostras coletadas a cada 30 segundos.

deployment: implantação.
kube_deployment_status_replicas_updated
kube_deployment_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de réplicas desatualizadas por implantação. Amostras coletadas a cada 30 segundos.

deployment: implantação.

Para mais informações, consulte Métricas de implantação.

Consultas de amostra para métricas de implantação

É possível criar gráficos e políticas de alertas para implantações individuais filtrando as métricas de implantação por cluster, namespace e pelo nome da implantação.

Por exemplo, para comparar o número de réplicas disponíveis com o número esperado de réplicas em uma única implantação, use as seguintes consultas PromQL para traçar as duas métricas em um único gráfico:

kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}
e
kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}

Para alertar sobre uma implantação com falha ou paralisada, use a seguinte expressão PromQL:

(
  kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}
    >
  kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}
) and (
  changes(kube_deployment_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}[10m])
    ==
  0
)

Algumas das expressões de consulta e alerta nesta seção foram adaptadas do arquivo kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade do Prometheus no GitHub.

Métricas do StatefulSet

Um StatefulSet é um controlador que gerencia a implantação e o escalonamento de um conjunto de pods para aplicativos com estado. Ele gerencia a ordem e a exclusividade dos pods.

Tabela de métricas do StatefulSet

As métricas de StatefulSet permitem monitorar e alertar sobre o comportamento do controlador. A tabela a seguir mostra as métricas disponíveis no pacote de métricas de estado do Kube:

Os nomes das métricas do Cloud Monitoring nesta tabela precisam ser prefixados com prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica do PromQL
Nome da métrica do Cloud Monitoring
Tipo, Classe, Unidade
Recursos monitorados
Versão obrigatória do GKE
Descrição
Rótulos
kube_statefulset_replicas
kube_statefulset_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de pods desejados para um StatefulSet. Amostras coletadas a cada 30 segundos.

statefulset: statefulset.
kube_statefulset_status_replicas_ready
kube_statefulset_status_replicas_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de réplicas desatualizadas por StatefulSet. Amostras coletadas a cada 30 segundos.

statefulset: statefulset.
kube_statefulset_status_replicas_updated
kube_statefulset_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de réplicas desatualizadas por StatefulSet. Amostras coletadas a cada 30 segundos.

statefulset: statefulset.

Para mais informações, consulte Métricas de StatefulSet.

Consultas de amostra para métricas de StatefulSet

É possível criar gráficos e políticas de alertas para StatefulSets individuais filtrando as métricas de statefulset por cluster, namespace e o nome do StatefulSet.

Por exemplo, para comparar o número de réplicas disponíveis com o número esperado de réplicas em um único StatefulSet, use as seguintes consultas PromQL para exibir as duas métricas em um único gráfico:

kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
e
kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}

Para alertar sobre um lançamento do StatefulSet com falha ou parado, use a seguinte expressão PromQL:

(
  kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
    >
  kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
) and (
  changes(kube_statefulset_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}[10m])
    ==
  0
)

Algumas das expressões de consulta e alerta nesta seção foram adaptadas do arquivo kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade do Prometheus no GitHub.

Métricas do DaemonSet

Um DaemonSet é um controlador que garante que algum conjunto de nós execute uma cópia de um pod. Por exemplo, à medida que os nós são adicionados a um cluster, o DaemonSet adiciona pods aos nós. Esse controlador é útil para garantir que determinados processos sejam executados em todos os nós.

Tabela de métricas de DaemonSet

Com as métricas do DaemonSet, é possível monitorar e alertar sobre o comportamento do controlador. A tabela a seguir mostra as métricas disponíveis no pacote de métricas de estado do Kube:

Os nomes das métricas do Cloud Monitoring nesta tabela precisam ser prefixados com prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica do PromQL
Nome da métrica do Cloud Monitoring
Tipo, Classe, Unidade
Recursos monitorados
Versão obrigatória do GKE
Descrição
Rótulos
kube_daemonset_status_desired_number_scheduled
kube_daemonset_status_desired_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de nós que precisam executar o pod daemon. Amostras coletadas a cada 30 segundos.

daemonset: daemonset.
kube_daemonset_status_number_misscheduled
kube_daemonset_status_number_misscheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de nós que executam um pod daemon, mas não deveriam. Amostras coletadas a cada 30 segundos.

daemonset: daemonset.
kube_daemonset_status_number_ready
kube_daemonset_status_number_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de nós que deveriam estar executando o pod do daemon e tendo um ou mais deles em execução e prontos. Amostras coletadas a cada 30 segundos.

daemonset: daemonset.
kube_daemonset_status_updated_number_scheduled
kube_daemonset_status_updated_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de nós que estão executando o pod do daemon atualizado. Amostras coletadas a cada 30 segundos.

daemonset: daemonset.

Para mais informações, consulte Métricas de DaemonSet.

Consultas de amostra para métricas de DaemonSet

É possível criar gráficos e políticas de alertas para DaemonSets individuais filtrando as métricas daemonset por cluster, namespace e o nome do DaemonSet.

Por exemplo, para comparar o número de réplicas disponíveis com o número esperado de réplicas em um único DaemonSet, use as seguintes consultas PromQL para traçar as duas métricas em um único gráfico:

kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonsetset=DAEMONSET"}
e
kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset=DAEMONSET"}

Para alertar sobre um lançamento do DaemonSet com falha ou parado, use a seguinte expressão PromQL:

(
  (
    kube_daemonset_status_number_misscheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
      !=
    0
  ) or (
    kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
      !=
    kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
  )
) and (
  changes(kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}[5m])
    ==
  0
)

Algumas das expressões de consulta e alerta nesta seção foram adaptadas do arquivo kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade do Prometheus no GitHub.

Métricas do HorizontalPodAutoscaler

Um HorizontalPodAutoscaler (HPA) é um controlador que altera periodicamente o número de pods em uma carga de trabalho, como uma implantação ou um StatefulSet, em resposta a alguma métrica, como a utilização de CPU ou memória. Alterar o número de pods disponíveis para uma carga de trabalho mantém a carga de trabalho responsiva, mas eficiente.

Para mais informações sobre HPAs, consulte Como visualizar detalhes sobre um escalonador automático horizontal de pods.

Tabela de métricas de HPA

As métricas HorizontalPodAutoscaler permitem monitorar e alertar sobre o comportamento do controlador. A tabela a seguir mostra as métricas disponíveis no pacote de métricas de estado do Kube:

Os nomes das métricas do Cloud Monitoring nesta tabela precisam ser prefixados com prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica do PromQL
Nome da métrica do Cloud Monitoring
Tipo, Classe, Unidade
Recursos monitorados
Versão obrigatória do GKE
Descrição
Rótulos
kube_horizontalpodautoscaler_spec_max_replicas
kube_horizontalpodautoscaler_spec_max_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O limite superior do número de pods que podem ser definidos pelo autoescalador não pode ser menor que MinReplicas. Amostras coletadas a cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_spec_min_replicas
kube_horizontalpodautoscaler_spec_min_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Limite inferior para o número de pods que podem ser definidos pelo escalonador automático, padrão 1. Amostras coletadas a cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_spec_target_metric
kube_horizontalpodautoscaler_spec_target_metric/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
As especificações de métrica usadas por este autoescalador ao calcular a contagem de réplicas desejada. Amostras coletadas a cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.
metric_name: metric_name.
metric_target_type: metric_target_type.
kube_horizontalpodautoscaler_status_condition
kube_horizontalpodautoscaler_status_condition/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
A condição deste autoescalador. Amostras coletadas a cada 30 segundos.

condition: condição.
horizontalpodautoscaler: horizontalpodautoscaler.
namespace: namespace.
status: status.
kube_horizontalpodautoscaler_status_current_replicas
kube_horizontalpodautoscaler_status_status_current_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número atual de réplicas de pods gerenciados por este escalonador automático. Amostras coletadas a cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_status_desired_replicas
kube_horizontalpodautoscaler_status_desired_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número desejado de réplicas de pods gerenciados por este escalonador automático. Amostras coletadas a cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.

Para mais informações, consulte Métricas do escalonador automático horizontal de pods.

Consultas de amostra para métricas do HPA

Por exemplo, para determinar se o HPA está se aproximando do número máximo de réplicas, é possível traçar a seguinte proporção:

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"} /
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

Quando o HPA está em execução com o número máximo de réplicas, é possível aumentar a especificação para o número máximo de pods. Você pode usar a seguinte expressão PromQL para criar um alerta que avise sobre esse caso:

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}
  ==
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

Também é possível comparar os valores das métricas kube_horizontalpodautoscaler_status_current_replicas e kube_horizontalpodautoscaler_status_desired_replicas para determinar se há uma diferença entre o número atual e o necessário de réplicas. Uma diferença pode indicar uma restrição de recurso no cluster. A expressão PromQL a seguir procura diferenças entre o número atual de réplicas e os números necessário, mínimo e máximo de réplicas, bem como alterações no número atual:

(kube_horizontalpodautoscaler_status_desired_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  !=
kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  >
kube_horizontalpodautoscaler_spec_min_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  <
kube_horizontalpodautoscaler_spec_max_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
changes(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}[15m]) == 0

Os rótulos condition e status na métrica kube_horizontalpodautoscaler_status_condition também podem ajudar a detectar quando os HPAs se encontram em vários modos de falha. Por exemplo:

  • A condição ScalingLimited e o status true indicam que o HPA está vinculado pela contagem mínima ou máxima de réplicas:
    kube_horizontalpodautoscaler_status_condition{status="true", condition="ScalingLimited"} == 1
  • A condição AbleToScale e o status false indicam que o HPA está com problemas ao buscar ou atualizar escalas:

    kube_horizontalpodautoscaler_status_condition{status="false", condition="AbleToScale"} == 1

  • A condição ScalingActive e o status false indicam que o HPA está desativado ou não é possível calcular uma nova escala:

    kube_horizontalpodautoscaler_status_condition{status="false", condition="ScalingActive"} == 1

Algumas das expressões de consulta e alerta nesta seção foram adaptadas do arquivo kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade do Prometheus no GitHub.

Métricas do JobSet

Um Jobset é uma API de carga de trabalho que permite gerenciar um grupo de jobs do Kubernetes como uma unidade. O caso de uso mais comum para um JobSet é o treinamento distribuído, mas também é possível usá-lo para executar cargas de trabalho em lote.

Para mais informações sobre JobSets, consulte a documentação do JobSet.

Tabela de métricas do JobSet

Com as métricas do JobSet, é possível monitorar e alertar sobre o comportamento dos JobSets. A tabela a seguir mostra as métricas disponíveis no pacote de métricas de estado do Kube:

Os nomes das métricas do Cloud Monitoring nesta tabela precisam ser prefixados com prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica do PromQL
Nome da métrica do Cloud Monitoring
Tipo, Classe, Unidade
Recursos monitorados
Versão obrigatória do GKE
Descrição
Rótulos
kube_jobset_specified_replicas
kube_jobset_specified_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
O número de réplicas especificadas por jobs replicados em um JobSet. Amostras coletadas a cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_ready_replicas
kube_jobset_ready_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
O número de réplicas no estado "PRONTO" por jobs replicados em um JobSet. Amostras coletadas a cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_succeeded_replicas
kube_jobset_succeeded_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
O número de réplicas no estado "SUCCEEDED" por jobs replicados em um JobSet. Amostras coletadas a cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_failed_replicas
kube_jobset_failed_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
O número de réplicas no estado "FAILED" por jobs replicados em um JobSet. Amostras coletadas a cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_active_replicas
kube_jobset_active_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
O número de réplicas no estado "ACTIVE" por jobs replicados em um JobSet. Amostras coletadas a cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_suspended_replicas
kube_jobset_suspended_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
O número de réplicas em estado "SUSPENSO" por jobs replicados em um JobSet. Amostras coletadas a cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_status_condition
kube_jobset_status_condition/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
As condições de status atuais de um JobSet. Amostras coletadas a cada 30 segundos.

jobset_name: jobset_name.
condition: condição.
kube_jobset_restarts
kube_jobset_restarts/gauge
GAUGEDOUBLE1
prometheus_target
1.32.4-gke.1767000
1.33.0-gke.1868000
O número de reinicializações do JobSet. Amostras coletadas a cada 30 segundos.

jobset_name: jobset_name.

Consultas de amostra para métricas de JobSet

É possível criar gráficos e políticas de alertas para JobSets individuais filtrando as métricas de JobSet por cluster, namespace e o nome do JobSet.

Por exemplo, para comparar o número de réplicas em um estado READY com o número esperado de réplicas em um único JobSet, represente as duas métricas em um único gráfico usando as seguintes consultas PromQL:

kube_jobset_specified_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}
e
kube_jobset_ready_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}

Para alertar sobre um lançamento do JobSet com falha ou indisponível, use a seguinte expressão PromQL:

kube_jobset_specified_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}
  >
kube_jobset_ready_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}

O rótulo condition na métrica kube_jobset_status_condition também pode ajudar a detectar quando os JobSets encontram vários modos de falha, por exemplo:

  • A condição Failed indica que o JobSet falhou na execução:
    kube_jobset_status_condition{jobset_name="JOBSET_NAME, condition="Failed"} == 1
  • A condição Suspended indica que o JobSet está suspenso:
    kube_jobset_status_condition{jobset_name="JOBSET_NAME, condition="Suspended"} == 1

Algumas das expressões de consulta e alerta nesta seção foram adaptadas do arquivo kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade do Prometheus no GitHub.