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 in modalità worker, utilizzando un deployment Prometheus che monitora un'applicazione di esempio e memorizza le metriche raccolte in Monarch.

Questo documento illustra come effettuare le seguenti operazioni:

  • Configura l'ambiente e gli strumenti a riga di comando.
  • Configura la raccolta gestita per il tuo cluster.
  • Configura una risorsa per lo scraping dei target e l'importazione delle metriche.
  • Esegui la migrazione delle risorse personalizzate dell'operatore prometheus.

Ti consigliamo di utilizzare la raccolta gestita, che riduce la complessità di deployment, scalabilità, partizionamento orizzontale, configurazione e gestione dei raccoglitori. La raccolta gestita è supportata sia per GKE che per qualsiasi altro ambiente Kubernetes. Per scoprire di più sulla raccolta di dati gestita e autogestita, consulta Raccolta di dati con Managed Service for Prometheus.

Prima di iniziare

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

Configura progetti e strumenti

Per utilizzare Google Cloud Managed Service per Prometheus, devi disporre delle seguenti risorse:

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

    • Se non hai un progetto Cloud, procedi nel seguente modo:

      1. In Google Cloud Console, vai a Nuovo progetto:

        Crea 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 è già selezionato nella parte superiore della pagina.

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

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

    • Se hai già un progetto Cloud, assicurati che l'API Monitoring sia abilitata:

      1. Vai ad API e servizi:

        Vai ad 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 per accedere all'API Cloud Monitoring.

      6. Se l'opzione "API abilitata" non è visualizzata, fai clic sul pulsante Attiva.

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

Sono inoltre necessari i seguenti strumenti a riga di comando:

  • gcloud
  • kubectl

Gli strumenti gcloud e kubectl fanno parte dell'interfaccia a riga di comando di Google Cloud. Per informazioni sull'installazione, vedi la sezione Gestire i componenti dell'interfaccia a riga di comando di Google Cloud. Per visualizzare i componenti dell'interfaccia a riga di comando gcloud che hai installato, esegui il comando seguente:

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 nel seguente modo:

    • Configura l'interfaccia a riga di comando gcloud in modo che faccia riferimento all'ID del tuo progetto Cloud:

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

      kubectl config set-cluster CLUSTER_NAME
      

    Per ulteriori informazioni su questi strumenti, consulta i seguenti articoli:

Configurare uno spazio dei nomi

Crea lo spazio dei nomi Kubernetes gmp-test per le risorse che crei come parte dell'applicazione di esempio:

kubectl create ns gmp-test

Configurare la raccolta gestita

Per scaricare e sottoporre a deployment la raccolta gestita nel cluster, devi applicare i manifest setup e operator per il servizio gestito. Puoi applicare i manifest utilizzando quanto segue:

  • Google Cloud Console per Google Kubernetes Engine.
  • L'interfaccia a riga di comando di Google Cloud. Per utilizzare l'interfaccia a riga di comando gcloud, devi eseguire GKE versione 1.21.4-gke.300 o successiva e devi installare il componente beta dell'interfaccia a riga di comando gcloud.
  • 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.
  • L'interfaccia a riga di comando kubectl, per ambienti Kubernetes non GKE.

console Google Cloud

Con Google Cloud Console puoi:

  • Applica i manifest a un cluster GKE esistente.
  • Crea un nuovo cluster GKE con i manifest applicati.

Per aggiornare un cluster esistente con i manifest, segui questi passaggi:

  1. In Google Cloud Console, seleziona Kubernetes Engine oppure utilizza il seguente pulsante:

    Vai a Kubernetes Engine

  2. Seleziona Cluster.

  3. Fai clic sul nome del cluster.

  4. Nell'elenco Funzioni, individua l'opzione Servizio gestito per Prometheus. Se è elencato come disabilitato, fai clic su Modifica, quindi seleziona Abilita Managed Service per Prometheus.

  5. Fai clic su Salva modifiche.

Per creare un cluster con i manifest applicati, segui questi passaggi:

  1. In Google Cloud Console, seleziona Kubernetes Engine oppure utilizza il seguente pulsante:

    Vai a Kubernetes Engine

  2. Seleziona Cluster.

  3. Fai clic su Crea.

  4. Fai clic su Configura per l'opzione GKE Standard e configura il cluster utilizzando il riquadro Nozioni di base sul cluster.

  5. Nel riquadro di navigazione, fai clic su Funzioni.

  6. Nella sezione Operazioni, seleziona Abilita servizio gestito per Prometheus.

  7. Fai clic su Salva.

Interfaccia a riga di comando gcloud

Puoi eseguire le operazioni seguenti utilizzando l'interfaccia a riga di comando gcloud:

  • Applica i manifest a un cluster GKE esistente.
  • Crea un nuovo cluster GKE con i manifest applicati.

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

Per aggiornare un cluster esistente con i manifest, esegui uno dei seguenti comandi update a seconda che il cluster sia a livello di zona o a livello di area geografica:

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

Per creare un cluster con i manifest applicati, esegui questo comando:

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

Terraform

Per istruzioni sulla configurazione della raccolta gestita con Terraform, consulta il registro Terraform per google_container_cluster (beta).

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

Interfaccia a riga di comando di kubectl

Per applicare i manifest quando utilizzi un cluster Kubernetes non GKE, esegui i comandi seguenti:

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

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

Dopo aver applicato i manifest, la raccolta gestita sarà in esecuzione, ma non sono ancora generate metriche. Devi eseguire il deployment di una risorsa PodMonitoring che estrae un endpoint delle metriche valido per visualizzare i dati nella UI della query.

Per la documentazione di riferimento sull'operatore Managed Service for Prometheus, consulta la pagina dei file manifest.

Esegui il deployment dell'applicazione di esempio

Il servizio gestito fornisce un manifest per un'applicazione di esempio che emette metriche Prometheus sulla porta metrics. L'applicazione utilizza tre repliche.

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

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

Configurare una risorsa PodMonitoring

Per importare i dati delle metriche emessi dall'applicazione di esempio, devi utilizzare lo scraping di destinazione. Lo scraping delle destinazioni e l'importazione delle metriche vengono configurati utilizzando le risorse personalizzate di Kubernetes. Il servizio gestito utilizza risorse personalizzate (PodMonitoring).

Una RP di PodMonitoring estrae i target solo nello spazio dei nomi in cui viene eseguito il deployment della RP. Per estrarre i target in più spazi dei nomi, esegui il deployment della stessa RP di PodMonitoring in ogni spazio dei nomi. Puoi verificare che la risorsa PodMonitoring sia installata nello spazio dei nomi previsto eseguendo kubectl get podmonitoring -A.

Per la documentazione di riferimento su tutte le RP di Managed Service for Prometheus, consulta il riferimento prometheus-engine/doc/api.

Il file manifest seguente definisce una risorsa PodMonitoring, prom-example, nello spazio dei nomi gmp-test. La risorsa utilizza un selettore delle etichette Kubernetes per trovare tutti i pod nello spazio dei nomi con l'etichetta app con valore prom-example. I pod corrispondenti vengono criptati su una porta denominata metrics, ogni 30 secondi, nel percorso HTTP /metrics.

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

Per applicare questa risorsa, esegui il comando seguente:

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

Il tuo raccoglitore gestito sta ora estraendo i pod corrispondenti.

Per configurare la raccolta orizzontale applicabile 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 GKE, puoi eseguire quanto segue:

Se esegui l'esecuzione all'esterno di GKE, devi creare un account di servizio e autorizzarlo a scrivere i dati della metrica, come descritto nella sezione seguente.

Fornisci le credenziali in modo esplicito

Quando viene eseguito su GKE, il server di raccolta Prometheus recupera automaticamente le credenziali dall'ambiente in base all'account di servizio predefinito di Compute Engine o alla configurazione di Workload Identity.

Nei cluster Kubernetes non GKE, le credenziali devono essere fornite esplicitamente tramite la risorsa OperatorConfig nello spazio dei nomi gmp-public.

  1. Crea un account di servizio:

    gcloud iam service-accounts create gmp-test-sa
    

  2. Concedi le autorizzazioni necessarie 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
    

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

  5. Apri la risorsa OperatorConfig per modificare:

    kubectl -n gmp-public edit operatorconfig config
    

  6. 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 affinché la valutazione delle regole gestite funzioni.

  7. Salva il file e chiudi l'editor. Dopo l'applicazione della modifica, i pod vengono ricreati e iniziano ad autenticarsi nel backend della metrica con l'account di servizio specificato.

Argomenti aggiuntivi per la raccolta gestita

In questa sezione viene spiegato come fare:

  • Configurazione dello scraping di destinazione tramite Terraform
  • Appropriazione di metriche relative a Kubelet e cAdvisor.
  • Filtra i dati che esporti nel servizio gestito.
  • Converti le risorse esistenti dell'operatore di scuola da utilizzare con il servizio gestito.

Configurazione dello scraping di destinazione tramite Terraform

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

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

Appropriazione di metriche Kubelet e cAdvisor

Il Kubelet espone metriche su se stesso e cAdvisor sulle metriche per i container in esecuzione sul suo nodo. Possono essere importate aggiornando l'operatore.

  1. Apri la risorsa OperatorConfig per modificare:

    kubectl -n gmp-public edit operatorconfig config
    
  2. Aggiungi alla risorsa la seguente sezione collection, in grassetto.

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    collection:
      kubeletScraping:
        interval: 15s
    
  3. Salva il file e chiudi l'editor.

Dopo un breve periodo di tempo, gli endpoint delle metriche Kubelet verranno estratti e le metriche diventeranno disponibili per l'esecuzione di query in Managed Service for Prometheus.

Filtra metriche esportate

Se raccogli molti dati, potresti voler evitare che alcune serie temporali vengano inviate a Managed Service for Prometheus per ridurre i costi.

Per filtrare le metriche esportate, puoi configurare un set di selettori di serie PromQL nella risorsa OperatorConfig. Una serie temporale viene esportata in Managed Service for Prometheus quando soddisfa almeno uno dei selettori, ovvero, nel determinare l'idoneità, le condizioni all'interno di un singolo selettore vengono ANDed, mentre le condizioni nei selettori separati vengono OR. Per impostazione predefinita non è specificato alcun selettore e vengono esportate tutte le serie temporali. L'esempio seguente utilizza due selettori:

  1. Apri la risorsa OperatorConfig per modificare:

    kubectl -n gmp-public edit operatorconfig config
    
  2. Aggiungi un filtro collection alla risorsa come mostrato in grassetto di seguito. La sezione di configurazione filter.matchOneOf ha la stessa semantica dei parametri match[] per la federazione Prometheus.

    Questo filtro di esempio fa sì che vengano esportate solo le metriche relative al job "prometheus" e alle metriche prodotte dalla registrazione di regole che si aggregano a livello di job, seguendo le best practice per la denominazione. Gli esempi di tutte le altre serie temporali sono esclusi:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    collection:
      filter:
        matchOneOf:
        - '{job="prometheus"}'
        - '{__name__=~"job:.+"}'
    
  3. Salva il file e chiudi l'editor.

Converti le risorse esistenti dell'operatore del prometheus

Di solito, puoi convertire le risorse esistenti dell'operatore prometheus in Managed Service for Prometheus managed collection PodMonitoring and ClusterPodMonitoring resources.

Ad esempio, la risorsa ServiceMonitor definisce il monitoraggio per un insieme di servizi. La risorsa PodMonitoring gestisce un sottoinsieme dei campi pubblicati dalla risorsa ServiceMonitor. Puoi convertire una RP di ServiceMonitor in una RP di PodMonitoring mappando i campi come descritto nella tabella seguente:

monitoraggio.coreos.com/v1
ServiceMonitor
Compatibilità
Monitoring.googleapis.com/v1
PodMonitoring
.ServiceMonitorSpec.Selector Identici .PodMonitoringSpec.Selector
.ServiceMonitorSpec.Endpoints[] .TargetPort mappa a .Port
.Path: compatible
.Interval: compatible
.Timeout: compatible
.PodMonitoringSpec.Endpoints[]
.ServiceMonitorSpec.TargetLabels Il PodMonitor deve specificare:
.FromPod[].Frometichetta del pod
.FromPod[].To etichetta di destinazione
.PodMonitoringSpec.TargetLabels

Di seguito è riportato un esempio di RP ServiceMonitor; i contenuti in tipo grassetto vengono sostituiti nella conversione e i contenuti in tipo 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 risposta predefinita a PodMonitoring, supponendo che il servizio e i suoi pod siano etichettati con app=example-app. Se questa ipotesi non si applica, devi utilizzare i selettori di etichette della risorsa di servizio sottostante.

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

Puoi sempre continuare a utilizzare le risorse dell'operatore di prometheus e le configurazioni di deployment esistenti utilizzando i collettori di deployment automatico anziché i raccoglitori gestiti. Puoi eseguire query sulle metriche inviate da entrambi i tipi di raccoglitore, potresti voler utilizzare raccoglitori con deployment automatico per i deployment Prometheus esistenti e utilizzare raccoglitori gestiti per i nuovi deployment Prometheus.

Eliminazione

Per disabilitare la raccolta gestita di cui è stato eseguito il deployment utilizzando gcloud o la UI di GKE, esegui il comando seguente:

gcloud beta container clusters update CLUSTER_NAME --disable-managed-prometheus

Per disabilitare la raccolta gestita implementata tramite kubectl, esegui il comando seguente:

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

Esegui la raccolta gestita all'esterno di GKE

Negli ambienti GKE puoi eseguire la raccolta gestita senza ulteriori configurazioni. In altri ambienti Kubernetes, devi fornire esplicitamente le credenziali, un valore project-id per contenere le metriche, un valore location (area geografica Google Cloud) in cui verranno archiviate le metriche e un valore cluster per salvare il nome del cluster in cui viene eseguito il raccoglitore.

Poiché gcloud non funziona al di fuori degli ambienti Google Cloud, devi eseguire il deployment utilizzando kubectl. A differenza di gcloud, il deployment della raccolta gestita con kubectl non esegue automaticamente l'upgrade del cluster quando è disponibile una nuova versione. Ricordati di guardare la pagina delle release per le nuove versioni e di eseguire manualmente l'upgrade eseguendo di nuovo i comandi kubectl con la nuova versione.

Puoi fornire una chiave dell'account di servizio modificando la risorsa OperatorConfig in operator.yaml come descritto in Fornire le credenziali in modo esplicito. Puoi fornire valori project-id, location e cluster aggiungendoli come args alla risorsa di deployment all'interno di operator.yaml.

Ti consigliamo di scegliere project-id in base al modello di tenancy previsto per i retail. Scegli un progetto per archiviare le metriche in base a come prevedi di organizzare in seguito gli annunci tramite gli ambiti delle metriche. Se non ti interessa, puoi inserire tutto in un unico progetto.

Per location, ti consigliamo di scegliere l'area geografica Google Cloud più vicina al tuo deployment. Quanto più l'area geografica Google Cloud scelta proviene dal tuo deployment, tanto maggiore sarà la latenza di scrittura presente e la quantità di potenziali problemi di rete quanto più sarà interessata. Ti consigliamo di consultare questo elenco di aree geografiche in più cloud. Se non ti interessa, puoi inserire tutto in un'unica area geografica Google Cloud. Non puoi utilizzare global come località.

Per cluster, consigliamo di scegliere il nome del cluster in cui viene eseguito il deployment dell'operatore.

Se configurato correttamente, l'operatore OperatorConfig dovrebbe avere il seguente aspetto:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    collection:
      credentials:
        name: gmp-test-sa
        key: key.json
    rules:
      credentials:
        name: gmp-test-sa
        key: key.json

La risorsa di deployment dovrebbe avere questo aspetto:

apiVersion: apps/v1
kind: Deployment
...
spec:
  ...
  template:
    ...
    spec:
      ...
      containers:
      - name: operator
        ...
        args:
        - ...
        - "--project-id=PROJECT_ID"
        - "--cluster=CLUSTER_NAME"
        - "--location=ZONE"

In questo esempio si presuppone che tu abbia impostato la variabile ZONE su un valore come us-central1-b, ad esempio.

L'esecuzione di Managed Service for Prometheus all'esterno di Google Cloud comporta costi per l'ingresso dei dati e potrebbe comportare costi per il traffico in uscita dai dati se eseguito su un altro cloud.

Ulteriori approfondimenti sulle risorse personalizzate per la raccolta gestita

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

Passaggi successivi