É 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
|
|
GAUGE , DOUBLE , By
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , By
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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:
-
No console do Google Cloud, acesse a página Painéis:
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.
- Filtre a lista de painéis clicando na categoria GCP.
- 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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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
|
|
GAUGE , DOUBLE , 1
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 statustrue
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 statusfalse
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 statusfalse
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.