Coletar métricas específicas do Prometheus no Kubernetes

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ó, como kubelet e 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:

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.

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:

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

  1. No console do Google Cloud , acesse a página de clusters do Kubernetes.

    Acessar os clusters do Kubernetes

  2. Na linha do cluster que você quer verificar, clique em Ações >  Editar. A página Detalhes do cluster é aberta.

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

    1. Clique em Editar o Serviço gerenciado para Prometheus. A caixa de diálogo Editar Serviço Gerenciado para Prometheus é aberta.
    2. Marque a caixa de seleção Ativar o Serviço Gerenciado para Prometheus.
    3. 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, como us-central1 ou us-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/cadvisor ou /metrics.

Para encontrar métricas e configurar a coleta, siga estas etapas:

  1. 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ó:

  2. 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;DCGM
    
  3. Verifique 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.

  4. 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 /metrics para a métrica kubelet_working_pods:

    kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/metrics" | grep "kubelet_working_pods"
    

    Substitua NODE_NAME pelo 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"} 0
    
  5. Depois 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)_pods
    

    Esse manifesto tem as seguintes propriedades:

    • O campo selector.matchLabels é um conjunto vazio ({}), que corresponde a todos os nós.
    • O campo endpoints.path identifica o endpoint de métricas a ser extraído.
    • O campo metricRelabeling identifica as métricas específicas a serem coletadas. Neste exemplo, o Google Cloud Managed Service para Prometheus coleta métricas que têm os nomes kubelet_active_pods e kubelet_working_pods do endpoint.

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.

  1. Verifique se a métrica kubelet_runtime_operations_errors_total ainda não está no Monitoring:

    1. No console do Google Cloud , acesse a página do Metrics Explorer.

      Acesse o Metrics explorer

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

  2. Crie um ClusterNodeMonitoring para filtrar a métrica kubelet_runtime_operations_errors_total:

    1. 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_total
      
    2. Crie o ClusterNodeMonitoring:

      kubectl apply -f kubelet-runtime-errors-collector.yaml
      

    A métrica pode levar até 10 minutos para aparecer no Monitoring.

  3. No console Google Cloud , verifique se a métrica aparece em Monitoring:

    1. Acesse a página Metrics Explorer.

      Acesse o Metrics explorer

    2. Na seção Consultas, no campo Métrica, selecione a métrica prometheus/kubelet_runtime_operations_errors_total/counter.

    3. Opcional: no menu suspenso Filtro, selecione seu cluster.

    A seção Resultados mostra um gráfico com a métrica coletada.

A seguir