Usar métricas de estado do Kube


É possível configurar um cluster do Google Kubernetes Engine (GKE) para enviar ao Cloud Monitoring um conjunto selecionado de métricas de estado do kube, incluindo métricas para pods, implantações e muito mais, usando oGoogle Cloud Managed Service para Prometheus. Neste documento, descrevemos como essas métricas são formatadas quando são gravadas no Cloud Monitoring e como consultá-las. Neste documento, também fornecemos tabelas que listam as métricas em cada conjunto e informações sobre como você pode usar essas métricas.

Antes de usar as métricas de estado do Kube, é preciso ativar a coleta.

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 do Google Cloud ou em campos do PromQL do 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 painel de navegação do console do Google Cloud, selecione Monitoramento e  Painéis:

    Ir para Painéis

  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. 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.