Neste documento, mostramos aos operadores como configurar o Serviço Gerenciado do Google Cloud para Prometheus para filtrar e coletar métricas específicas do Kubernetes em clusters e cargas de trabalho do Google Kubernetes Engine (GKE).
Você já precisa conhecer os seguintes conceitos:
Coleta de métricas no GKE
Os componentes do sistema em clusters do GKE emitem e expõem métricas do Prometheus. Por padrão, todos os clusters ingerem métricas do sistema específicas do GKE. Outros pacotes de métricas integrados estão disponíveis para ingerir coleções selecionadas de métricas de vários componentes.
Independente dos pacotes de métricas integrados do GKE, é possível configurar manualmente o Google Cloud Managed Service para Prometheus para ingerir métricas específicas do Prometheus. Essa configuração personalizada funciona bem para casos de uso como os seguintes:
- Monitore indicadores específicos no cluster e nas cargas de trabalho.
- Otimize os custos desativando os pacotes de métricas desnecessários e ingerindo apenas um subconjunto de métricas.
- Coletar métricas emitidas por componentes, mas que não estão incluídas em um pacote de métricas.
Para operadores, as métricas de nó, que são emitidas pelo processo kubelet em cada nó, podem ser úteis para monitorar cargas de trabalho e nós em busca de indicadores específicos.
Recursos personalizados de coleta de métricas
Para filtrar e ingerir uma métrica específica, configure as regras de readequação de rótulos do Prometheus em um dos seguintes recursos personalizados:
PodMonitoring: configure a coleta de métricas de pods em um namespace específico.ClusterPodMonitoring: configure a coleta de métricas de pods em qualquer namespace.ClusterNodeMonitoring: configure a coleta de métricas de componentes de nó, comokubelete cAdvisor.
Duplicação de métricas
Se você filtrar uma métrica que também está incluída em um pacote de métricas ativo para
um cluster, ela vai aparecer várias vezes no
Google Cloud Managed Service para Prometheus. Por exemplo, se o cluster tiver o pacote de métricas KUBELET ativado e você configurar a coleta da métrica kubelet_running_containers, os valores vão aparecer duplicados.
Para evitar duplicações, verifique se as métricas que você está coletando não estão incluídas em um dos pacotes de métricas ativas. Para mais informações sobre as métricas incluídas, consulte os seguintes pacotes de métricas:
- Métricas de sistema do GKE
- Métricas do plano de controle
- Métricas de estado de objetos do Kubernetes
- Métricas do cAdvisor e do
kubelet - Métricas do DCGM da NVIDIA
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ative a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa, instale e inicialize a CLI gcloud. 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.
- Verifique se você tem as permissões necessárias para este documento.
- Use um cluster do GKE atual ou crie um novo.
Funções exigidas
Para ter as permissões necessárias para coletar e visualizar métricas, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
-
Crie recursos do Kubernetes no seu cluster:
Desenvolvedor do Kubernetes Engine (
roles/container.developer) -
Ver métricas no Monitoring:
Leitor do Monitoring (
roles/monitoring.viewer)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Ativar o Google Cloud Managed Service para Prometheus
Google Cloud Managed Service para Prometheus é ativado por padrão em todos os clusters do GKE e não pode ser desativado nos clusters do Autopilot. Se você estiver usando um cluster do Autopilot, pule para a seção Configurar a coleta de métricas.
Para verificar se o Google Cloud Managed Service para Prometheus está ativado no seu cluster Standard, selecione uma das seguintes opções:
Console
No console do Google Cloud , acesse a página de clusters do Kubernetes.
Na linha do cluster que você quer verificar, clique em Ações > Editar. A página Detalhes do cluster é aberta.
Na seção Recursos, verifique o valor no campo Serviço gerenciado para Prometheus. Se o valor for Ativado, pule para a seção Configurar a coleta de métricas. Se o valor for Desativado, ative o Google Cloud Managed Service para Prometheus:
- Clique em Editar o Serviço gerenciado para Prometheus. A caixa de diálogo Editar Serviço Gerenciado para Prometheus é aberta.
- Marque a caixa de seleção Ativar o Serviço Gerenciado para Prometheus.
- Clique em Salvar alterações.
gcloud
Verifique se o Google Cloud Managed Service para Prometheus está ativado no cluster:
gcloud container clusters describe CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--format='value(monitoringConfig.managedPrometheusConfig.enabled)'
Substitua:
CLUSTER_NAME: o nome do cluster padrão.CONTROL_PLANE_LOCATION: a região ou zona do plano de controle do cluster, comous-central1ouus-central1-a.
Se a saída for True, o Google Cloud Managed Service para Prometheus estará ativado.
Se a saída for False, ative o Google Cloud Managed Service para Prometheus:
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--enable-managed-prometheus
Configurar a coleta de métricas
Para configurar o Google Cloud Managed Service para Prometheus e ingerir uma métrica específica emitida, você precisa das seguintes informações sobre a métrica:
- O nome da métrica, como
kubelet_working_pods. - O endpoint que expõe a métrica, como
/metrics/cadvisorou/metrics.
Para encontrar métricas e configurar a coleta, siga estas etapas:
Encontre uma métrica na documentação de referência do componente específico. Por exemplo, use os seguintes recursos para encontrar uma métrica de nó:
Verifique os pacotes de métricas ativos para o cluster:
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --flatten=monitoringConfig.componentConfig \ --format='value(enableComponents)'O resultado será o seguinte:
SYSTEM_COMPONENTS;STORAGE;POD;DEPLOYMENT;STATEFULSET;DAEMONSET;HPA;JOBSET;CADVISOR;KUBELET;DCGMVerifique se a métrica que você quer coletar está em um desses pacotes ativos usando as informações em Métricas disponíveis. Se a métrica estiver incluída em um pacote de métricas ativo, métricas duplicadas poderão aparecer no Monitoring. Se a métrica não estiver em um pacote de métricas ativas, siga para a próxima etapa.
Opcional: para verificar se a métrica está disponível no endpoint de métricas, consulte o endpoint usando o comando
kubectl get --raw. Por exemplo, o comando a seguir consulta o endpoint/metricspara a métricakubelet_working_pods:kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/metrics" | grep "kubelet_working_pods"Substitua
NODE_NAMEpelo nome do nó a ser consultado.A saída é semelhante à seguinte, que indica que a métrica está disponível:
# HELP kubelet_working_pods [ALPHA] Number of pods the kubelet is actually running, broken down by lifecycle phase, whether the pod is desired, orphaned, or runtime only (also orphaned), and whether the pod is static. An orphaned pod has been removed from local configuration or force deleted in the API and consumes resources that are not otherwise visible. # TYPE kubelet_working_pods gauge kubelet_working_pods{config="desired",lifecycle="sync",static=""} 8 kubelet_working_pods{config="desired",lifecycle="sync",static="true"} 1 kubelet_working_pods{config="desired",lifecycle="terminated",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminated",static="true"} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static="true"} 0Depois de identificar a métrica que você quer coletar, use uma regra de redefinição de rótulo do Prometheus em um recurso personalizado PodMonitoring, ClusterPodMonitoring ou ClusterNodeMonitoring para filtrar essa métrica. O recurso personalizado que você usa depende das propriedades da métrica, conforme descrito na seção Recursos personalizados de coleta de métricas.
Por exemplo, analise o manifesto ClusterNodeMonitoring a seguir:
apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-pod-counts spec: selector: matchLabels: {} endpoints: - path: "/metrics" scheme: "https" interval: "30s" tls: insecureSkipVerify: true # metricRelabeling specifies the metrics to ingest. The metrics must be # available at the specified endpoint. metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_(active|working)_podsEsse manifesto tem as seguintes propriedades:
- O campo
selector.matchLabelsé um conjunto vazio ({}), que corresponde a todos os nós. - O campo
endpoints.pathidentifica o endpoint de métricas a ser extraído. - O campo
metricRelabelingidentifica as métricas específicas a serem coletadas. Neste exemplo, o Google Cloud Managed Service para Prometheus coleta métricas que têm os nomeskubelet_active_podsekubelet_working_podsdo endpoint.
- O campo
Quando você implanta o recurso personalizado, o Google Cloud Managed Service para Prometheus ingere métricas que correspondem à configuração especificada. É possível consultar e visualizar essas métricas usando os mesmos métodos que você usa para outras métricas, como o Cloud Monitoring.
Verificar a coleta de métricas de um exemplo de métrica
As etapas a seguir mostram como configurar o Google Cloud Managed Service para Prometheus
para coletar a métrica kubelet_runtime_operations_errors_total do kubelet.
Nestas etapas de exemplo, você verifica se a métrica não está sendo coletada no momento, cria um
ClusterNodeMonitoring (porque o kubelet é um componente de nó) e verifica se
a métrica aparece no Monitoring.
Verifique se a métrica
kubelet_runtime_operations_errors_totalainda não está no Monitoring:No console do Google Cloud , acesse a página do Metrics Explorer.
Na seção Consultas, no campo Métrica, tente selecionar a métrica
prometheus/kubelet_runtime_operations_errors_total/counter. Se você não encontrar um resultado da pesquisa, a métrica não está sendo coletada.
Crie um ClusterNodeMonitoring para filtrar a métrica
kubelet_runtime_operations_errors_total:Salve o seguinte manifesto ClusterNodeMonitoring como
kubelet-runtime-errors-collector.yaml:apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-runtime-errors-collector spec: selector: matchLabels: {} endpoints: - path: /metrics scheme: https interval: 30s tls: insecureSkipVerify: true metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_runtime_operations_errors_totalCrie o ClusterNodeMonitoring:
kubectl apply -f kubelet-runtime-errors-collector.yaml
A métrica pode levar até 10 minutos para aparecer no Monitoring.
No console Google Cloud , verifique se a métrica aparece em Monitoring:
Acesse a página Metrics Explorer.
Na seção Consultas, no campo Métrica, selecione a métrica
prometheus/kubelet_runtime_operations_errors_total/counter.Opcional: no menu suspenso Filtro, selecione seu cluster.
A seção Resultados mostra um gráfico com a métrica coletada.
A seguir
- Conheça os pacotes de métricas disponíveis no GKE
- Configurar o monitoramento automático de aplicativos para cargas de trabalho
- Criar e gerenciar painéis personalizados do Monitoring