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 da cluster e 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 metriche Prometheus. Per impostazione predefinita, tutti i cluster importano le metriche di sistema specifiche di GKE. Sono disponibili pacchetti di metriche aggiuntivi integrati per importare raccolte selezionate di metriche per vari componenti.

Indipendentemente dai pacchetti di metriche GKE integrati, 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 indicatori specifici nel cluster e nei workload.
  • Ottimizza i costi disattivando i pacchetti di metriche che non ti servono e importando solo un sottoinsieme di metriche.
  • Raccogli metriche emesse dai componenti, ma non incluse in un pacchetto di metriche.

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

Risorse personalizzate per la raccolta delle metriche

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

  • PodMonitoring: configura la raccolta delle metriche dai pod in uno spazio dei nomi specifico.
  • ClusterPodMonitoring: configura la raccolta delle metriche dai pod in qualsiasi spazio dei nomi.
  • ClusterNodeMonitoring: configura la raccolta delle 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 tuo cluster è abilitato il pacchetto di metriche KUBELET e configuri la raccolta della metrica kubelet_running_containers, vedrai valori duplicati.

Per evitare duplicazioni, verifica che le metriche che stai raccogliendo non siano incluse in uno dei pacchetti di metriche attive. Per saperne di più sulle metriche incluse, consulta i seguenti pacchetti di metriche:

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Per 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 comando gcloud components update. 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 sul 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 disabilitato nei cluster Autopilot. Se utilizzi un cluster Autopilot, vai alla sezione Configurare la raccolta delle metriche.

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

Console

  1. Nella console Google Cloud , 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 è Enabled, vai alla sezione Configurare la raccolta delle metriche. Se il valore è Disabilitato, abilita Google Cloud Managed Service per Prometheus:

    1. Fai clic su Modifica Managed Service per Prometheus. Si apre 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

Controlla 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 tuo cluster Standard.
  • CONTROL_PLANE_LOCATION: la regione o la zona del control plane 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

Configurazione della raccolta di metriche

Per configurare Google Cloud Managed Service per Prometheus in modo da importare 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:

  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. Controlla se la metrica che vuoi raccogliere si trova in uno di questi pacchetti attivi utilizzando le informazioni in Metriche disponibili. Se la tua metrica è inclusa in un pacchetto di metriche attivo, in Monitoraggio potrebbero essere visualizzate metriche duplicate. Se la metrica non si trova in un pacchetto di metriche attivo, vai al passaggio successivo.

  4. (Facoltativo) Per verificare che la metrica sia disponibile nell'endpoint delle metriche, interroga l'endpoint utilizzando il comando kubectl get --raw. 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, 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 Prometheus in una risorsa personalizzata PodMonitoring, ClusterPodMonitoring o ClusterNodeMonitoring per filtrare in base a quella metrica. La risorsa personalizzata che utilizzi dipende dalle proprietà della metrica, come descritto nella sezione Risorse personalizzate per la raccolta delle 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 set vuoto ({}), che corrisponde a tutti i nodi.
    • Il campo endpoints.path identifica l'endpoint delle metriche da analizzare.
    • 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 che utilizzi per altre metriche, ad esempio Cloud Monitoring.

Verifica la raccolta delle metriche per una metrica di esempio

I seguenti passaggi mostrano come configurare Google Cloud Managed Service per Prometheus per raccogliere la metrica kubelet_runtime_operations_errors_total da kubelet. In questi passaggi di esempio, verifichi che la metrica non sia attualmente raccolta, crei un ClusterNodeMonitoring (perché kubelet è un componente del nodo) e poi verifichi che la metrica venga visualizzata in Monitoring.

  1. Verifica che la metrica kubelet_runtime_operations_errors_total non sia già presente in Monitoring:

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

      Vai a Esplora metriche

    2. Nella sezione Query, nel campo Metrica, prova a selezionare la metrica prometheus/kubelet_runtime_operations_errors_total/counter. Se non vedi un risultato di ricerca, la metrica non viene raccolta.

  2. Crea un ClusterNodeMonitoring per filtrare la metrica kubelet_runtime_operations_errors_total:

    1. Salva il seguente manifest ClusterNodeMonitoring come 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. Crea ClusterNodeMonitoring:

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

    La visualizzazione della metrica in Monitoring potrebbe richiedere fino a 10 minuti.

  3. Nella console Google Cloud , verifica che la metrica venga visualizzata in Monitoraggio:

    1. Vai alla pagina Esplora metriche.

      Vai a Esplora metriche

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

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

    La sezione Risultati mostra un grafico con la metrica raccolta.

Passaggi successivi