Raccogliere metriche Prometheus specifiche da Kubernetes

Questo documento mostra agli operatori come configurare Google Cloud Managed Service per Prometheus per filtrare e raccogliere metriche Kubernetes specifiche dai cluster e dai carichi di lavoro Google Kubernetes Engine (GKE).

Dovresti già avere familiarità con quanto segue:

Raccolta di metriche in GKE

I componenti di sistema nei cluster GKE emettono ed espongono le metriche Prometheus. Per impostazione predefinita, tutti i cluster importano le metriche di sistema specifiche di GKE. Sono disponibili pacchetti di metriche integrate aggiuntive per importare raccolte curate di metriche per vari componenti.

Indipendentemente dai pacchetti di metriche GKE integrate, puoi configurare manualmente Google Cloud Managed Service per Prometheus per importare metriche Prometheus specifiche. Questa configurazione personalizzata è adatta a casi d'uso come i seguenti:

  • Monitora segnali specifici nel cluster e nei carichi di lavoro.
  • Ottimizza i costi disattivando i pacchetti di metriche di cui non hai bisogno e importando solo un sottoinsieme di metriche.
  • Raccogli le metriche emesse dai componenti, ma non incluse in un pacchetto di metriche.

Per gli operatori, metriche dei nodi, emesse dal processo kubelet su ogni nodo, potrebbero essere utili per monitorare i carichi di lavoro e i nodi per segnali specifici.

Risorse personalizzate per la raccolta di metriche

Per filtrare e importare una metrica specifica, configura le regole di rietichettatura di Prometheus in una delle seguenti risorse personalizzate:

  • PodMonitoring: configura la raccolta di metriche dai pod in uno spazio dei nomi specifico.
  • ClusterPodMonitoring: configura la raccolta di metriche dai pod in qualsiasi spazio dei nomi.
  • ClusterNodeMonitoring: configura la raccolta di metriche dai componenti dei nodi come kubelet e cAdvisor.

Duplicazione delle metriche

Se filtri una metrica inclusa anche in un pacchetto di metriche attivo per un cluster, la metrica viene visualizzata più volte in Google Cloud Managed Service per Prometheus. Ad esempio, se nel cluster è abilitato il pacchetto di metriche KUBELET e configuri la raccolta della metrica kubelet_running_containers, vedrai valori duplicati.

Per evitare la duplicazione, verifica che le metriche che stai raccogliendo non siano incluse in uno dei pacchetti di metriche attivi. Per ulteriori informazioni sulle metriche incluse, consulta i seguenti pacchetti di metriche:

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo il gcloud components update comando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per raccogliere e visualizzare le metriche, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Abilita Google Cloud Managed Service per Prometheus

Google Cloud Managed Service per Prometheus è abilitato per impostazione predefinita in tutti i cluster GKE e non può essere disattivato nei cluster Autopilot. Se utilizzi un cluster Autopilot, vai alla sezione Configura la raccolta di metriche.

Per verificare che Google Cloud Managed Service per Prometheus sia abilitato nel cluster Standard, seleziona una delle seguenti opzioni:

Console

  1. Nella Google Cloud console, vai alla pagina Cluster Kubernetes.

    Vai ai cluster Kubernetes

  2. Nella riga del cluster che vuoi controllare, fai clic su Azioni >  Modifica. Viene visualizzata la pagina Dettagli cluster.

  3. Nella sezione Funzionalità, controlla il valore nel campo Managed Service per Prometheus. Se il valore è Abilitato, vai alla sezione Configura la raccolta di metriche. Se il valore è Disabilitato, abilita Google Cloud Managed Service per Prometheus:

    1. Fai clic su Modifica Managed Service per Prometheus. Viene visualizzata la finestra di dialogo Modifica Managed Service per Prometheus.
    2. Seleziona la casella di controllo Abilita Managed Service per Prometheus.
    3. Fai clic su Salva modifiche.

gcloud

Verifica se Google Cloud Managed Service per Prometheus è abilitato nel cluster:

gcloud container clusters describe CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --format='value(monitoringConfig.managedPrometheusConfig.enabled)'

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster Standard.
  • CONTROL_PLANE_LOCATION: la regione o la zona del piano di controllo del cluster, ad esempio us-central1 o us-central1-a.

Se l'output è True, Google Cloud Managed Service per Prometheus è abilitato. Se l'output è False, abilita Google Cloud Managed Service per Prometheus:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-managed-prometheus

Configura la raccolta di metriche

Per configurare Google Cloud Managed Service per Prometheus in modo che importi una metrica emessa specifica, devi disporre delle seguenti informazioni sulla metrica:

  • Il nome della metrica, ad esempio kubelet_working_pods.
  • L'endpoint che espone la metrica, ad esempio /metrics/cadvisor o /metrics.

Per trovare le metriche e configurare la raccolta, segui questi passaggi:

  1. Trova una metrica nella documentazione di riferimento per il componente specifico. Ad esempio, puoi utilizzare le seguenti risorse per trovare una metrica del nodo:

  2. Controlla i pacchetti di metriche attivi per il cluster:

    gcloud container clusters describe CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --flatten=monitoringConfig.componentConfig \
        --format='value(enableComponents)'
    

    L'output è simile al seguente:

    SYSTEM_COMPONENTS;STORAGE;POD;DEPLOYMENT;STATEFULSET;DAEMONSET;HPA;JOBSET;CADVISOR;KUBELET;DCGM
    
  3. Verifica se la metrica che vuoi raccogliere è in uno di questi pacchetti attivi utilizzando le informazioni in Metriche disponibili. Se la metrica è inclusa in un pacchetto di metriche attivo, in Monitoring potrebbero essere visualizzate metriche duplicate. Se la metrica non è in un pacchetto di metriche attivo, vai al passaggio successivo.

  4. (Facoltativo) Per verificare che la metrica sia disponibile nell'endpoint delle metriche, esegui una query sull'endpoint utilizzando il kubectl get --raw comando. Ad esempio, il seguente comando esegue una query sull'endpoint /metrics per la metrica kubelet_working_pods:

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

    Sostituisci NODE_NAME con il nome del nodo su cui eseguire la query.

    L'output è simile al seguente, il che indica che la metrica è disponibile:

    # 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. Dopo aver identificato la metrica che vuoi raccogliere, utilizza una regola di rietichettatura di Prometheus in una risorsa personalizzata PodMonitoring, ClusterPodMonitoring o ClusterNodeMonitoring per filtrare la metrica. La risorsa personalizzata che utilizzi dipende dalle proprietà della metrica, come descritto nella sezione Risorse personalizzate per la raccolta di metriche.

    Ad esempio, esamina il seguente manifest ClusterNodeMonitoring:

    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
    

    Questo manifest ha le seguenti proprietà:

    • Il campo selector.matchLabels è un insieme vuoto ({}), che corrisponde a tutti i nodi.
    • Il campo endpoints.path identifica l'endpoint delle metriche da eseguire lo scraping.
    • Il campo metricRelabeling identifica le metriche specifiche da raccogliere. In questo esempio, Google Cloud Managed Service per Prometheus raccoglie le metriche con i nomi kubelet_active_pods e kubelet_working_pods dall'endpoint.

Quando esegui il deployment della risorsa personalizzata, Google Cloud Managed Service per Prometheus importa le metriche che corrispondono alla configurazione specificata. Puoi visualizzare ed eseguire query su queste metriche utilizzando gli stessi metodi utilizzati per altre metriche, ad esempio Cloud Monitoring.

Verifica la raccolta di metriche per un carico di lavoro di esempio

I seguenti passaggi mostrano come configurare Google Cloud Managed Service per Prometheus per raccogliere le metriche PSI (Pressure Stall Information) da cAdvisor. In questi passaggi di esempio, crei un ClusterNodeMonitoring (perché cAdvisor è un componente del nodo), crei un pod di test che attiva le metriche PSI e poi verifichi che le metriche vengano visualizzate in Monitoring. Per raccogliere le metriche PSI in questo esempio, il cluster deve eseguire GKE versione 1.35 o successive.

  1. Crea un pod di test che attivi le metriche PSI da cAdvisor:

    1. Salva il seguente pod come psi-pod.yaml:

      apiVersion: v1
      kind: Pod
      metadata:
        name: cpu-pressure-pod
      spec:
        restartPolicy: Never
        containers:
        - name: cpu-stress
          image: registry.k8s.io/e2e-test-images/agnhost:2.47
          args:
          - "stress"
          - "--cpus"
          - "1"
          resources:
            limits:
              cpu: "500m"
            requests:
              cpu: "500m"
      
    2. Crea il pod:

      kubectl apply -f psi-pod.yaml
      
  2. Verifica che le metriche PSI non siano già in Monitoring:

    1. Nella Google Cloud console, vai alla pagina Esplora metriche.

      Vai a Esplora metriche

    2. Nella sezione Query, nel campo Metrica, prova a selezionare la metrica prometheus/container_pressure_cpu_stalled_seconds_total/counter. Se non vedi un risultato di ricerca, le metriche PSI non vengono raccolte.

  3. Crea un ClusterNodeMonitoring per filtrare le metriche PSI:

    1. Salva il seguente manifest ClusterNodeMonitoring come psi-prometheus-collector.yaml:

      apiVersion: monitoring.googleapis.com/v1
      kind: ClusterNodeMonitoring
      metadata:
        name: psi-collector
      spec:
        selector:
          matchLabels: {}
        endpoints:
        - path: /metrics/cadvisor
          scheme: https
          interval: 30s
          tls:
            insecureSkipVerify: true
          metricRelabeling:
          - action: keep
            sourceLabels: [__name__]
            regex: container_pressure_(cpu|memory|io)_(waiting|stalled)_seconds_total
      
    2. Crea il ClusterNodeMonitoring:

      kubectl apply -f psi-prometheus-collector.yaml
      

    Potrebbero essere necessari fino a 10 minuti prima che la metrica venga visualizzata in Monitoring.

  4. Nella Google Cloud console, verifica che le metriche PSI vengano visualizzate in Monitoring:

    1. Vai alla pagina Esplora metriche.

      Vai a Esplora metriche

    2. Nella sezione Query, nel campo Metrica, seleziona la metrica prometheus/container_pressure_cpu_stalled_seconds_total/counter.

    3. (Facoltativo) Nel menu a discesa Filtro, seleziona il cluster.

    La sezione Risultati mostra un grafico con la metrica PSI raccolta.

Passaggi successivi