Introduzione alla raccolta di dati gestita

Questo documento descrive come configurare Google Cloud Managed Service per Prometheus con la raccolta gestita. La configurazione è un esempio minimo di importazione funzionante, che utilizza un deployment di Prometheus che monitora un'applicazione di esempio e memorizza le metriche raccolte in Monarch.

Questo documento illustra come:

  • Configura l'ambiente e gli strumenti a riga di comando.
  • Configura la raccolta gestita per il tuo cluster.
  • Configura una risorsa per lo scraping della destinazione e l'importazione delle metriche.
  • Esegui la migrazione delle risorse personalizzate prometheus-operator esistenti.

Ti consigliamo di utilizzare la raccolta gestita; riduce la complessità il deployment, la scalabilità, lo sharding, la configurazione e la gestione dei raccoglitori. La raccolta gestita è supportata per GKE e da tutti gli altri ambienti Kubernetes.

La raccolta gestita esegue i raccoglitori basati su Prometheus come DaemonSet e garantisce la scalabilità estraendo i target solo sui nodi colocalizzati. Configura i collettivi con risorse personalizzate leggere per eseguire lo scraping degli esportatori utilizzando la raccolta pull, quindi i collettivi inviano i dati estratti al datastore Monarch centrale. Google Cloud non accede mai direttamente al tuo cluster per estrarre o estrarre dati metrici; i tuoi collector inviano i dati a Google Cloud. Per saperne di più sui dati gestiti e di cui è stato eseguito il deployment autonomo consulta la sezione Raccolta di dati con Managed Service per Prometheus e importazione e query con raccolta gestita e di cui è stato eseguito autonomamente il deployment.

Prima di iniziare

Questa sezione descrive la configurazione necessaria per le attività descritte in questo documento.

Configurare progetti e strumenti

Per utilizzare Google Cloud Managed Service per Prometheus, sono necessarie le seguenti risorse:

  • Un progetto Google Cloud con l'API Cloud Monitoring abilitata.

    • Se non hai un progetto Google Cloud, segui questi passaggi:

      1. Nella console Google Cloud, vai a Nuovo progetto:

        Creare un nuovo progetto

      2. Nel campo Nome progetto, inserisci un nome per il progetto. e fai clic su Crea.

      3. Vai a Fatturazione:

        Vai a Fatturazione

      4. Seleziona il progetto appena creato, se non lo è già selezionata nella parte superiore della pagina.

      5. Ti viene chiesto di scegliere un profilo pagamenti esistente per crearne uno nuovo.

      L'API Monitoring è abilitata per impostazione predefinita per i nuovi progetti.

    • Se hai già un progetto Google Cloud, assicurati che L'API Monitoring è abilitata:

      1. Vai su API e Google Cloud:

        Vai su API e servizi

      2. Seleziona il progetto.

      3. Fai clic su Abilita API e servizi.

      4. Cerca "Monitoraggio".

      5. Nei risultati di ricerca, fai clic su "API Cloud Monitoring".

      6. Se "API abilitata" non viene visualizzato, fai clic sul pulsante Attiva.

  • Un cluster Kubernetes. Se non hai un cluster Kubernetes, segui le istruzioni riportate nella guida rapida per GKE.

Sono inoltre necessari i seguenti strumenti a riga di comando:

  • gcloud
  • kubectl

Gli strumenti gcloud e kubectl fanno parte Google Cloud CLI. Per informazioni sull'installazione, consulta Gestire i componenti dell'interfaccia a riga di comando Google Cloud. Per vedere le componenti gcloud CLI che hai installato, esegui questo comando:

gcloud components list

Configura il tuo ambiente

Per evitare di inserire ripetutamente l'ID progetto o il nome del cluster, esegui la seguente configurazione:

  • Configura gli strumenti a riga di comando come segue:

    • Configura Google Cloud CLI in modo che faccia riferimento all'ID del tuo progetto Google Cloud:

      gcloud config set project PROJECT_ID
      
    • Configura l'interfaccia a riga di comando kubectl per utilizzare il tuo cluster:

      kubectl config set-cluster CLUSTER_NAME
      

    Per ulteriori informazioni su questi strumenti, consulta le seguenti risorse:

Configura uno spazio dei nomi

Crea lo spazio dei nomi Kubernetes NAMESPACE_NAME per le risorse create nell'ambito dell'applicazione di esempio:

kubectl create ns NAMESPACE_NAME

Configura la raccolta gestita

Puoi utilizzare la raccolta gestita sia su cluster Kubernetes GKE che non GKE.

Dopo aver attivato la raccolta gestita, i componenti in cluster verranno eseguiti, ma non verranno ancora generate metriche. Per eseguire correttamente lo scraping degli endpoint delle metriche, questi componenti richiedono le risorse PodMonitoring o ClusterPodMonitoring. Devi eseguire il deployment di queste risorse con endpoint delle metriche validi o attivare uno dei pacchetti di metriche gestite, ad esempio Kube State Metrics, integrato in GKE. Per informazioni sulla risoluzione dei problemi, vedi Problemi lato importazione.

L'abilitazione della raccolta gestita installa i seguenti componenti nel cluster:

Per la documentazione di riferimento su Managed Service per Prometheus , consulta l'operatore pagina manifest.

Abilita raccolta gestita: GKE

La raccolta gestita è abilitata per impostazione predefinita per:

Se utilizzi un ambiente GKE che non attiva la raccolta gestita per impostazione predefinita, consulta Abilitare manualmente la raccolta gestita.

La raccolta gestita su GKE viene sottoposta ad upgrade automatico quando vengono rilasciate nuove versioni dei componenti all'interno del cluster.

La raccolta gestita su GKE utilizza le autorizzazioni concesse all'account di servizio Compute Engine predefinito. Se hai una norma che modifica autorizzazioni standard per l'account di servizio nodo predefinito, potresti dover aggiungere Il ruolo Monitoring Metric Writer per continuare.

Abilita raccolta gestita manualmente

Se esegui l'operazione in un ambiente GKE che non attiva la raccolta gestita per impostazione predefinita, puoi attivarla utilizzando quanto segue:

  • La dashboard Cluster GKE in Cloud Monitoring.
  • La pagina Kubernetes Engine nella console Google Cloud.
  • Google Cloud CLI. Per utilizzare gcloud CLI, è necessario con GKE versione 1.21.4-gke.300 o successiva.
  • Terraform per Google Kubernetes Engine. Per utilizzare Terraform per abilitare Managed Service per Prometheus, devi eseguire GKE versione 1.21.4-gke.300 o successiva.

Dashboard dei cluster GKE

Puoi eseguire le operazioni indicate di seguito utilizzando la dashboard Cluster GKE in Cloud Monitoring.

  • Determina se Managed Service per Prometheus è abilitato sul tuo cluster e se utilizzi una raccolta gestita o di cui è stato eseguito il deployment autonomo.
  • Abilita la raccolta gestita sui cluster nel tuo progetto.
  • Visualizza altre informazioni sui tuoi cluster.

Per visualizzare la dashboard Cluster GKE, procedi nel seguente modo:

  1. Nella console Google Cloud, vai alla pagina  Dashboard:

    Vai a Dashboard

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.

  2. Seleziona la categoria di dashboard G​C​P, quindi seleziona Cluster GKE.

Dashboard dei cluster GKE in Cloud Monitoring.

Per abilitare la raccolta gestita su uno o più cluster GKE utilizzando la dashboard Cluster GKE, segui questi passaggi:

  1. Seleziona la casella di controllo per ogni cluster GKE su cui vuoi per abilitare la raccolta gestita.

  2. Seleziona Attiva selezionati.

UI di Kubernetes Engine

Utilizzando la console Google Cloud, puoi:

  • Abilita la raccolta gestita su un cluster GKE esistente.
  • Crea un nuovo cluster GKE con la raccolta gestita abilitata.

Per aggiornare un cluster esistente:

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

    Vai a Cluster Kubernetes

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Kubernetes Engine.

  2. Fai clic sul nome del cluster.

  3. Nell'elenco Funzionalità, individua l'opzione Managed Service per Prometheus. Se risulta disattivata, fai clic su Modifica, e seleziona Abilita Managed Service per Prometheus.

  4. Fai clic su Salva modifiche.

Per creare un cluster con la raccolta gestita abilitata:

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

    Vai a Cluster Kubernetes

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Kubernetes Engine.

  2. Fai clic su Crea.

  3. Fai clic su Configura per l'opzione Standard.

  4. Nel riquadro di navigazione, fai clic su Funzionalità.

  5. Nella sezione Operazioni, seleziona Abilita Managed Service per Prometheus.

  6. Fai clic su Salva.

Interfaccia a riga di comando gcloud

Utilizzando gcloud CLI, puoi:

  • Abilita la raccolta gestita su un cluster GKE esistente.
  • Crea un nuovo cluster GKE con la raccolta gestita abilitata.

Il completamento di questi comandi potrebbe richiedere fino a 5 minuti.

Innanzitutto, imposta il progetto:

gcloud config set project PROJECT_ID

Per aggiornare un cluster esistente, esegui uno dei seguenti comandiupdate a seconda che il cluster sia zonale o regionale:

  • gcloud container clusters update CLUSTER_NAME --enable-managed-prometheus --zone ZONE
    
  • gcloud container clusters update CLUSTER_NAME --enable-managed-prometheus --region REGION
    

Per creare un cluster con la raccolta gestita abilitata, esegui il seguente comando:

gcloud container clusters create CLUSTER_NAME --zone ZONE --enable-managed-prometheus

GKE Autopilot

La raccolta gestita è attiva per impostazione predefinita in Cluster GKE Autopilot con GKE versione 1.25 o successiva. Non puoi disattivare la raccolta gestita.

Se il cluster non riesce ad abilitare automaticamente la raccolta gestita durante l'upgrade alla 1.25, puoi abilitarlo manualmente eseguendo il comando update gcloud CLI.

Terraform

Per istruzioni su come configurare la raccolta gestita utilizzando Terraform, consulta il registro Terraform per google_container_cluster.

Per informazioni generali sull'utilizzo di Google Cloud con Terraform, consulta Terraform con Google Cloud.

Disattivare la raccolta gestita

Se vuoi disattivare la raccolta gestita nei tuoi cluster, puoi utilizzare uno dei seguenti metodi:

Interfaccia utente di Kubernetes Engine

Utilizzando la console Google Cloud, puoi:

  • Disattiva la raccolta gestita su un cluster GKE esistente.
  • Esegui l'override dell'attivazione automatica della raccolta gestita durante la creazione in un nuovo cluster GKE Standard con GKE versione 1.27 o successiva.

Per aggiornare un cluster esistente:

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

    Vai a Cluster Kubernetes

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Kubernetes Engine.

  2. Fai clic sul nome del cluster.

  3. Nella sezione Funzionalità, individua Servizio gestito per Prometheus. Fai clic su  Modifica e deseleziona Abilita Managed Service per Prometheus.

  4. Fai clic su Salva modifiche.

Per ignorare l'attivazione automatica della raccolta gestita quando crei un nuovo cluster GKE Standard (versione 1.27 o successiva), procedi nel seguente modo:

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

    Vai a Cluster Kubernetes

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Kubernetes Engine.

  2. Fai clic su Crea.

  3. Fai clic su Configura per l'opzione Standard.

  4. Nel pannello di navigazione, fai clic su Funzionalità.

  5. Nella sezione Operazioni, deseleziona Abilita Servizio gestito per Prometheus.

  6. Fai clic su Salva.

Interfaccia a riga di comando gcloud

Utilizzando gcloud CLI, puoi:

  • Disattiva la raccolta gestita su un cluster GKE esistente.
  • Sostituisci l'attivazione automatica della raccolta gestita quando crei un nuovo cluster GKE Standard che esegue la versione GKE 1.27 o successive.

Il completamento di questi comandi potrebbe richiedere fino a 5 minuti.

Per prima cosa, imposta il progetto:

gcloud config set project PROJECT_ID

Per disattivare la raccolta gestita su un cluster esistente, esegui uno dei seguenti comandi update a seconda che il cluster sia zonale o regionale:

  • gcloud container clusters update CLUSTER_NAME --disable-managed-prometheus --zone ZONE
    
  • gcloud container clusters update CLUSTER_NAME --disable-managed-prometheus --region REGION
    

Per eseguire l'override dell'attivazione automatica della raccolta gestita durante la creazione su un nuovo cluster GKE Standard (versione 1.27 o versioni successive), esegui questo comando:

gcloud container clusters create CLUSTER_NAME --zone ZONE --no-enable-managed-prometheus

GKE Autopilot

Non puoi disattivare la raccolta gestita in Cluster GKE Autopilot con GKE versione 1.25 o successiva.

Terraform

Per disattivare la raccolta gestita, imposta l'attributo enabled nel managed_prometheus blocco di configurazione a false. Per ulteriori informazioni su questo blocco di configurazione, consulta Registro Terraform per google_container_cluster.

Per informazioni generali sull'utilizzo di Google Cloud con Terraform, consulta Terraform con Google Cloud.

Abilita raccolta gestita: Kubernetes non GKE

Se esegui l'operazione in un ambiente non GKE, puoi attivare la raccolta gestita utilizzando quanto segue:

  • L'interfaccia a riga di comando kubectl.
  • La soluzione in bundle inclusa nella versione in esecuzione dei deployment GKE Enterprise 1.12 o versioni successive.

kubectl CLI

Per installare i raccoglitori gestiti quando utilizzi un cluster Kubernetes non GKE, esegui i seguenti comandi per installare i manifest di configurazione e dell'operatore:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/manifests/setup.yaml

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/manifests/operator.yaml

GKE Enterprise

Per informazioni sulla configurazione della raccolta gestita per i cluster GKE Enterprise, consulta la documentazione della tua distribuzione:

Esegui il deployment dell'applicazione di esempio

L'applicazione di esempio emette la metrica del contatore example_requests_total e la metrica dell'istogramma example_random_numbers (tra le altre) sulla porta metrics. Il file manifest per l'applicazione definisce tre repliche.

Per eseguire il deployment dell'applicazione di esempio, esegui il seguente comando:

kubectl -n NAMESPACE_NAME apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/examples/example-app.yaml

Configurare una risorsa PodMonitoring

Per importare i dati delle metriche emessi dall'applicazione di esempio, Managed Service per Prometheus utilizza lo scraping del target. Lo scraping dei target e l'importazione delle metriche vengono configurati utilizzando Risorse personalizzate di Kubernetes. Il servizio gestito utilizza le risorse personalizzate (RP) di PodMonitoring.

Una RP PodMonitoring esegue lo scraping delle destinazioni solo nello spazio dei nomi in cui viene eseguito il deployment della RP. Per eseguire lo scraping dei target in più spazi dei nomi, esegui il deployment della stessa risorsa personalizzata PodMonitoring in ogni spazio dei nomi. Puoi verificare che la risorsa PodMonitoring sia installata dello spazio dei nomi previsto eseguendo kubectl get podmonitoring -A.

Per la documentazione di riferimento su tutte le risorse gestite di Managed Service per Prometheus, consulta la documentazione di riferimento di prometheus-engine/doc/api.

Il manifest seguente definisce una risorsa PodMonitoring, prom-example, nello spazio dei nomi NAMESPACE_NAME. La risorsa utilizza un selettore di etichette Kubernetes per trovare tutti i pod nello spazio dei nomi con l'etichetta app.kubernetes.io/name con il valore prom-example. I pod corrispondenti vengono sottoposti a scraping su una porta denominata metrics ogni 30 secondi sul percorso HTTP /metrics.

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: prom-example
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: prom-example
  endpoints:
  - port: metrics
    interval: 30s

Per applicare questa risorsa, esegui questo comando:

kubectl -n NAMESPACE_NAME apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/examples/pod-monitoring.yaml

Il tuo collector gestito ora esegue lo scraping dei pod corrispondenti. Puoi visualizzare lo stato del target di scansione attivando la funzionalità di stato del target.

Per configurare la raccolta orizzontale che si applica a un intervallo di pod in tutti gli spazi dei nomi, utilizza la risorsa ClusterPodMonitoring. La risorsa ClusterPodMonitoring fornisce la stessa interfaccia della risorsa PodMonitoring, ma non limita i pod rilevati a un determinato spazio dei nomi.

Se esegui su GKE, puoi fare quanto segue:

Se esegui l'operazione al di fuori di GKE, devi creare un account di servizio e autorizzarlo a scrivere i dati delle metriche, come descritto nella sezione seguente.

Fornisci le credenziali in modo esplicito

Durante l'esecuzione su GKE, il server Prometheus che raccoglie recupera automaticamente le credenziali dall'ambiente in base l'account di servizio del nodo. Nei cluster Kubernetes non GKE, le credenziali devono essere fornita tramite la risorsa OperatorConfig in dello spazio dei nomi gmp-public,

  1. Imposta il contesto sul progetto di destinazione:

    gcloud config set project PROJECT_ID
    
  2. Crea un account di servizio:

    gcloud iam service-accounts create gmp-test-sa
    

  3. Concedi le autorizzazioni richieste all'account di servizio:

    gcloud projects add-iam-policy-binding PROJECT_ID\
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter
    

  4. Crea e scarica una chiave per l'account di servizio:

    gcloud iam service-accounts keys create gmp-test-sa-key.json \
      --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
    
  5. Aggiungi il file della chiave come secret al cluster non GKE:

    kubectl -n gmp-public create secret generic gmp-test-sa \
      --from-file=key.json=gmp-test-sa-key.json
    

  6. Apri la risorsa OperatorConfig per la modifica:

    kubectl -n gmp-public edit operatorconfig config
    
    1. Aggiungi il testo in grassetto alla risorsa:

      apiVersion: monitoring.googleapis.com/v1
      kind: OperatorConfig
      metadata:
        namespace: gmp-public
        name: config
      collection:
        credentials:
          name: gmp-test-sa
          key: key.json
      
      Assicurati inoltre di aggiungere queste credenziali alla sezione rules in modo che la valutazione delle regole gestite funzioni.

    2. Salva il file e chiudi l'editor. Dopo l'applicazione della modifica, i pod vengono ricreati e iniziano l'autenticazione al backend metrico con l'account di servizio specificato.

    Argomenti aggiuntivi per la raccolta gestita

    Questa sezione descrive come:

    • Attiva la funzionalità di stato del target per semplificare il debug.
    • Configurare lo scraping della destinazione con Terraform.
    • Filtra i dati esportati nel servizio gestito.
    • Estrai le metriche Kubelet e cAdvisor.
    • Converti le risorse prom-operator esistenti per utilizzarle con il servizio gestito.
    • Esegui la raccolta gestita all'esterno di GKE.

    Attivazione della funzionalità di targeting per stato

    Managed Service per Prometheus consente di verificare se i tuoi target vengono rilevati e scansionati correttamente dai raccoglitori. Questo report sullo stato del target è pensato come uno strumento per il debug di problemi acuti. Ti consigliamo vivamente di attivare questa funzionalità solo per esaminare i problemi immediati. Se lasci attivo il reporting sullo stato del target in cluster di grandi dimensioni, l'operatore potrebbe esaurire la memoria e causare un loop di arresto anomalo.

    Puoi controllare lo stato dei target nelle risorse PodMonitoring o ClusterPodMonitoring impostando il valore features.targetStatus.enabled nella risorsa OperatorConfig su true, come mostrato di seguito:

        apiVersion: monitoring.googleapis.com/v1
        kind: OperatorConfig
        metadata:
          namespace: gmp-public
          name: config
        features:
          targetStatus:
            enabled: true
    

    Dopo alcuni secondi, il campo Status.Endpoint Statuses viene visualizzato in ogni risorsa PodMonitoring o ClusterPodMonitoring valida, se configurata.

    Se hai una risorsa PodMonitoring con il nome prom-example nello spazio dei nomi NAMESPACE_NAME, puoi controllare lo stato eseguendo il seguente comando:

    kubectl -n NAMESPACE_NAME describe podmonitorings/prom-example
    

    L'output è simile al seguente:

    API Version:  monitoring.googleapis.com/v1
    Kind:         PodMonitoring
    ...
    Status:
      Conditions:
        ...
        Status:                True
        Type:                  ConfigurationCreateSuccess
      Endpoint Statuses:
        Active Targets:       3
        Collectors Fraction:  1
        Last Update Time:     2023-08-02T12:24:26Z
        Name:                 PodMonitoring/custom/prom-example/metrics
        Sample Groups:
          Count:  3
          Sample Targets:
            Health:  up
            Labels:
              Cluster:                     CLUSTER_NAME
              Container:                   prom-example
              Instance:                    prom-example-589ddf7f7f-hcnpt:metrics
              Job:                         prom-example
              Location:                    REGION
              Namespace:                   NAMESPACE_NAME
              Pod:                         prom-example-589ddf7f7f-hcnpt
              project_id:                  PROJECT_ID
            Last Scrape Duration Seconds:  0.020206416
            Health:                        up
            Labels:
              ...
            Last Scrape Duration Seconds:  0.054189485
            Health:                        up
            Labels:
              ...
            Last Scrape Duration Seconds:  0.006224887
    

    L'output include i seguenti campi di stato:

    • Status.Conditions.Status è true quando Managed Service per Prometheus riconosce ed elabora PodMonitoring o ClusterPodMonitoring.
    • Status.Endpoint Statuses.Active Targets mostra il numero di target di scansione che Managed Service per Prometheus conteggia in tutti i raccoglitori per questa risorsa PodMonitoring. Nell'applicazione di esempio, il deployment prom-example ha tre repliche con un singolo target metrico, quindi il valore è 3. Se sono presenti target non validi, viene visualizzato il campo Status.Endpoint Statuses.Unhealthy Targets.
    • Status.Endpoint Statuses.Collectors Fraction mostra un valore 1 (ovvero il 100%) se tutti i raccoglitori gestiti sono raggiungibili da Managed Service per Prometheus.
    • Status.Endpoint Statuses.Last Update Time mostra l'ora dell'ultimo aggiornamento. Quando la data e l'ora dell'ultimo aggiornamento sono molto più lunghe dell'intervallo di spultimento preferito, la differenza potrebbe indicare problemi con il target o con il cluster.
    • Il campo Status.Endpoint Statuses.Sample Groups mostra target di esempio raggruppati da etichette di destinazione comuni inserite dal raccoglitore. Questo valore è utile per di debug in situazioni in cui i target non vengono rilevati. Se tutti i target sono integri e in fase di raccolta, il valore previsto per Health è up, mentre il valore del campo Last Scrape Duration Seconds è la durata abituale per un target tipico.

    Per ulteriori informazioni su questi campi, consulta Documento relativo all'API Managed Service per Prometheus.

    Qualsiasi dei seguenti elementi potrebbe indicare un problema con la configurazione:

    • Non è presente alcun campo Status.Endpoint Statuses nella risorsa PodMonitoring.
    • Il valore del campo Last Scrape Duration Seconds è troppo vecchio.
    • Vedi un numero troppo basso di target.
    • Il valore del campo Health indica che la destinazione è down.

    Per ulteriori informazioni sul debug dei problemi di rilevamento del target, consulta Problemi lato importazione nella sezione documentazione.

    Configurazione di un endpoint di scansione autorizzato

    Se la destinazione dello scrape richiede l'autorizzazione, puoi configurare il raccoglitore utilizza il tipo di autorizzazione corretto e fornisci tutti i secret pertinenti.

    Google Cloud Managed Service per Prometheus supporta i seguenti tipi di autorizzazione:

    mTLS

    mTLS viene comunemente configurato in ambienti zero trust, come il mesh di servizi Istio o Cloud Service Mesh.

    Per attivare gli endpoint di scraping protetti tramite mTLS, imposta il Spec.Endpoints[].Scheme della risorsa PodMonitoring a https. Mentre non consigliato, puoi impostare il campo Spec.Endpoints[].insecureSkipVerify la tua risorsa PodMonitoring a true per saltare la verifica del certificato l'autorità competente. In alternativa, puoi configurare Managed Service per Prometheus per caricare certificati e chiavi da risorse secret.

    Ad esempio, la seguente risorsa Secret contiene le chiavi per i certificati del client (cert), della chiave privata (key) e dell'autorità di certificazione (ca):

    kind: Secret
    metadata:
      name: secret-example
    stringData:
      cert: ********
      key: ********
      ca: ********
    

    Concedi al raccoglitore di Managed Service per Prometheus l'autorizzazione per accedere alla risorsa secret:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: secret-example-read
    rules:
    - resources:
      - secrets
      apiGroups: [""]
      verbs: ["get", "list", "watch"]
      resourceNames: ["secret-example"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: gmp-system:collector:secret-example-read
      namespace: default
    roleRef:
      name: secret-example-read
      kind: Role
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - name: collector
      namespace: gmp-system
      kind: ServiceAccount
    

    Nei cluster GKE Autopilot, il codice è simile al seguente:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: secret-example-read
    rules:
    - resources:
      - secrets
      apiGroups: [""]
      verbs: ["get", "list", "watch"]
      resourceNames: ["secret-example"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: gmp-system:collector:secret-example-read
      namespace: default
    roleRef:
      name: secret-example-read
      kind: Role
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - name: collector
      namespace: gke-gmp-system
      kind: ServiceAccount
    

    Per configurare una risorsa PodMonitoring che utilizza la risorsa Secret precedente, modifica la risorsa aggiungendo una sezione scheme e tls:

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: prom-example
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/name: prom-example
      endpoints:
      - port: metrics
        interval: 30s
        scheme: https
        tls:
          ca:
            secret:
              name: secret-example
              key: ca
          cert:
            secret:
              name: secret-example
              key: cert
          key:
            secret:
              name: secret-example
              key: key
    

    Per la documentazione di riferimento su tutte le opzioni mTLS di Managed Service per Prometheus, consulta la documentazione di riferimento dell'API.

    BasicAuth

    Per attivare lo scraping degli endpoint protetti utilizzando BasicAuth, imposta il campoSpec.Endpoints[].BasicAuth nella risorsa PodMonitoring con il tuo nome utente e la tua password. Per altri tipi di intestazioni di autorizzazione HTTP, consulta Intestazione di autorizzazione HTTP.

    Ad esempio, la seguente risorsa secret contiene una chiave per archiviare la password:

    kind: Secret
    metadata:
      name: secret-example
    stringData:
      password: ********
    

    Concedi al raccoglitore di Managed Service per Prometheus l'autorizzazione per accedere alla risorsa secret:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: secret-example-read
    rules:
    - resources:
      - secrets
      apiGroups: [""]
      verbs: ["get", "list", "watch"]
      resourceNames: ["secret-example"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: gmp-system:collector:secret-example-read
      namespace: default
    roleRef:
      name: secret-example-read
      kind: Role
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - name: collector
      namespace: gmp-system
      kind: ServiceAccount
    

    Nei cluster GKE Autopilot, il risultato è simile a questo:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: secret-example-read
    rules:
    - resources:
      - secrets
      apiGroups: [""]
      verbs: ["get", "list", "watch"]
      resourceNames: ["secret-example"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: gmp-system:collector:secret-example-read
      namespace: default
    roleRef:
      name: secret-example-read
      kind: Role
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - name: collector
      namespace: gke-gmp-system
      kind: ServiceAccount
    

    Per configurare una risorsa PodMonitoring che utilizza la risorsa Secret precedente e un nome utente di foo, modifica la risorsa per aggiungere una sezione basicAuth:

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: prom-example
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/name: prom-example
      endpoints:
      - port: metrics
        interval: 30s
        basicAuth:
          username: foo
          password:
            secret:
              name: secret-example
              key: password
    

    Per la documentazione di riferimento su tutti i servizi Managed Service per Prometheus le opzioni BasicAuth, consulta documentazione di riferimento API.

    Intestazione autorizzazione HTTP

    Per abilitare gli endpoint di scraping protetti tramite intestazioni di autorizzazione HTTP, imposta il valore campo Spec.Endpoints[].Authorization nella risorsa PodMonitoring con tipo e credenziali. Per gli endpoint BasicAuth, utilizza la configurazione BasicAuth.

    Ad esempio, la seguente risorsa Secret contiene una chiave per memorizzare le credenziali:

    kind: Secret
    metadata:
      name: secret-example
    stringData:
      credentials: ********
    

    Concedi al raccoglitore di Managed Service per Prometheus l'autorizzazione per accedere alla risorsa secret:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: secret-example-read
    rules:
    - resources:
      - secrets
      apiGroups: [""]
      verbs: ["get", "list", "watch"]
      resourceNames: ["secret-example"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: gmp-system:collector:secret-example-read
      namespace: default
    roleRef:
      name: secret-example-read
      kind: Role
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - name: collector
      namespace: gmp-system
      kind: ServiceAccount
    

    Nei cluster GKE Autopilot, il codice è simile al seguente:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: secret-example-read
    rules:
    - resources:
      - secrets
      apiGroups: [""]
      verbs: ["get", "list", "watch"]
      resourceNames: ["secret-example"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: gmp-system:collector:secret-example-read
      namespace: default
    roleRef:
      name: secret-example-read
      kind: Role
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - name: collector
      namespace: gke-gmp-system
      kind: ServiceAccount
    

    Per configurare una risorsa PodMonitoring che utilizza la risorsa Secret precedente e un di tipo Bearer, modifica la risorsa per aggiungere una sezione authorization:

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: prom-example
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/name: prom-example
      endpoints:
      - port: metrics
        interval: 30s
        authorization:
          type: Bearer
          credentials:
            secret:
              name: secret-example
              key: credentials
    

    Per la documentazione di riferimento su tutti i servizi Managed Service per Prometheus per le opzioni dell'intestazione di autorizzazione HTTP, consulta documentazione di riferimento API.

    OAuth 2

    Per abilitare lo scraping degli endpoint protetti tramite OAuth 2, devi impostare il campo Spec.Endpoints[].OAuth2 nella risorsa PodMonitoring.

    Ad esempio, la seguente risorsa secret contiene una chiave per archiviare il client secret:

    kind: Secret
    metadata:
      name: secret-example
    stringData:
      clientSecret: ********
    

    Concedi al raccoglitore di Managed Service per Prometheus l'autorizzazione per accedere alla risorsa secret:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: secret-example-read
    rules:
    - resources:
      - secrets
      apiGroups: [""]
      verbs: ["get", "list", "watch"]
      resourceNames: ["secret-example"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: gmp-system:collector:secret-example-read
      namespace: default
    roleRef:
      name: secret-example-read
      kind: Role
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - name: collector
      namespace: gmp-system
      kind: ServiceAccount
    

    Nei cluster GKE Autopilot, il risultato è simile a questo:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: secret-example-read
    rules:
    - resources:
      - secrets
      apiGroups: [""]
      verbs: ["get", "list", "watch"]
      resourceNames: ["secret-example"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: gmp-system:collector:secret-example-read
      namespace: default
    roleRef:
      name: secret-example-read
      kind: Role
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - name: collector
      namespace: gke-gmp-system
      kind: ServiceAccount
    

    Per configurare una risorsa PodMonitoring che utilizzi la risorsa Secret precedente con un ID cliente foo e un URL token example.com/token, modifica la risorsa per aggiungere una sezione oauth2:

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: prom-example
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/name: prom-example
      endpoints:
      - port: metrics
        interval: 30s
        oauth2:
          clientID: foo
          clientSecret:
            secret:
              name: secret-example
              key: password
          tokenURL: example.com/token
    

    Per la documentazione di riferimento su tutti i servizi Managed Service per Prometheus Per le opzioni di OAuth 2, consulta la documentazione di riferimento API.

    Configurazione dello scraping della destinazione con Terraform

    Puoi automatizzare la creazione e la gestione delle risorse PodMonitoring e ClusterPodMonitoring utilizzando il kubernetes_manifest tipo di risorsa Terraform o il kubectl_manifest tipo di risorsa Terraform, che consente di specificare risorse personalizzate arbitrarie.

    Per informazioni generali sull'utilizzo di Google Cloud con Terraform, consulta Terraform con Google Cloud.

    Filtrare le metriche esportate

    Se raccogli molti dati, potresti voler evitare che alcune serie temporali inviate a Managed Service per Prometheus per contenere i costi. Cosa puoi fare utilizzando le regole di rietichettatura di Prometheus. con un'azione keep per una lista consentita o un'azione drop per una lista bloccata. Per la raccolta gestita, questa regola va nella sezione metricRelabeling della risorsa PodMonitoring o ClusterPodMonitoring.

    Ad esempio, la seguente regola di rietichettatura delle metriche filtrerà qualsiasi metrica che inizia con foo_bar_, foo_baz_ o foo_qux_:

      metricRelabeling:
      - action: drop
        regex: foo_(bar|baz|qux)_.+
        sourceLabels: [__name__]
    

    La pagina Gestione delle metriche di Cloud Monitoring fornisce informazioni che possono aiutarti a controllare la spesa per le metriche fatturabili senza influire sull'osservabilità. La pagina Gestione delle metriche riporta le seguenti informazioni:

    • Volumi di importazione per la fatturazione basata sia su byte che su campioni, nelle varie metriche domini e per singole metriche.
    • Dati su etichette e cardinalità delle metriche.
    • Numero di letture per ogni metrica.
    • Utilizzo di metriche nei criteri di avviso e nelle dashboard personalizzate.
    • Tasso di errori di scrittura delle metriche.

    Puoi anche utilizzare la pagina Gestione delle metriche per escludere le metriche non necessarie, eliminando il costo di importazione. Per saperne di più sulla pagina Gestione delle metriche, consulta Visualizzare e gestire l'utilizzo delle metriche.

    Per ulteriori suggerimenti su come ridurre i costi, consulta Controllo dei costi e l'attribuzione dei contenuti.

    Scraping delle metriche Kubelet e cAdvisor

    Kubelet espone le metriche su se stesso, nonché le metriche di cAdvisor sui contenuti in esecuzione sul suo nodo. Puoi configurare la raccolta gestita eseguire lo scraping delle metriche kubelet e cAdvisor modificando la risorsa OperatorConfig. Per istruzioni, consulta la documentazione dell'esportatore per Kubelet e cAdvisor.

    Converti le risorse prometheus-operator esistenti

    In genere, puoi convertire le risorse prometheus-operator esistenti nelle risorse della raccolta gestita PodMonitoring e ClusterPodMonitoring di Managed Service per Prometheus.

    Ad esempio, la risorsa ServiceMonitor definisce il monitoraggio di un insieme di servizi. La risorsa PodMonitoring fornisce un sottoinsieme degli annunci della risorsa ServiceMonitor. Puoi convertire un'istanza di risorsa di controllo ServiceMonitor in un'istanza di risorsa di controllo PodMonitoring mappando i campi come descritto nella tabella seguente:

    monitoring.coreos.com/v1
    ServiceMonitor
    Compatibilità
     
    monitoring.googleapis.com/v1
    PodMonitoring
    .ServiceMonitorSpec.Selector Identico .PodMonitoringSpec.Selector
    .ServiceMonitorSpec.Endpoints[] .TargetPort corrisponde a .Port
    .Path: compatible
    .Interval: compatible
    .Timeout: compatible
    .PodMonitoringSpec.Endpoints[]
    .ServiceMonitorSpec.TargetLabels PodMonitor deve specificare:
    .FromPod[].From etichetta pod
    .FromPod[].To etichetta target
    .PodMonitoringSpec.TargetLabels

    Di seguito è riportato un esempio di RP ServiceMonitor; i contenuti in grassetto sono sostituiti nella conversione e i contenuti in corsivo vengono mappati direttamente:

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: example-app
    spec:
      selector:
        matchLabels:
          app: example-app
      endpoints:
      - targetPort: web
        path: /stats
        interval: 30s
      targetLabels:
      - foo
    

    Di seguito è riportata la RP PodMonitoring analoga, supponendo che il tuo servizio e i relativi pod sono etichettati con app=example-app. Se questo presupposto non è applicabile, devi utilizzare i selettori di etichette del Risorsa di servizio.

    I contenuti in grassetto sono stati sostituiti nella conversione:

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: example-app
    spec:
      selector:
        matchLabels:
          app: example-app
      endpoints:
      - port: web
        path: /stats
        interval: 30s
      targetLabels:
        fromPod:
        - from: foo # pod label from example-app Service pods.
          to: foo