Prometheus è un sistema e un sistema di monitoraggio del servizio. Raccoglie le metriche dalle destinazioni configurate a determinati intervalli, valuta le espressioni di regole, visualizza i risultati e può attivare avvisi se alcune condizioni sono vere. Alertmanager gestisce gli avvisi generati da Prometheus e li instrada verso gli endpoint riceventi. Distribuire l'estensione TKG per Prometheus per raccogliere e visualizzare le metriche per i cluster Tanzu Kubernetes.

Prerequisiti dell'estensione

In questo argomento viene descritto come distribuire l'estensione TKG v1.3.1 per Prometheus con Alertmanager per il monitoraggio del cluster. Prima di distribuire l'estensione, attenersi ai requisiti seguenti. Oltre ai requisiti generali, il monitoraggio di Prometheus richiede una classe di storage persistente predefinita. È possibile creare un cluster con una classe di storage persistente predefinita oppure specificarne uno nel file di configurazione di Prometheus quando si distribuisce l'estensione. Vedere Rivedere i requisiti di storage permanente per le estensioni TKG.

Distribuire l'estensione Prometheus

L'estensione TKG per Prometheus installa diversi contenitori. Per ulteriori informazioni, vedere https://prometheus.io/.
Container Tipo di risorsa Repliche Descrizione
prometheus-alertmanager Distribuzione 1 Gestisce gli avvisi inviati dalle applicazioni client come il server Prometheus.
prometheus-cadvisor DaemonSet 5 Analizza ed espone i dati relativi all'utilizzo delle risorse e alle prestazioni dai contenitori in esecuzione
prometheus-kube-state-metrics Distribuzione 1 Monitora lo stato e la capacità del nodo, la conformità del set di repliche, il pod, il processo e lo stato del cronjob, le richieste e i limiti di risorse.
prometheus-node-exporter DaemonSet 5 Esportatore per le metriche di hardware e sistema operativo esposte dai kernel.
prometheus-pushgateway Distribuzione 1 Servizio che consente di eseguire il push delle metriche dai processi per i quali non è possibile lo scraping.
prometheus-server Distribuzione 1 Offre funzionalità di base, tra cui scraping, elaborazione delle regole e avviso.
L'estensione è configurata per estrarre i container dal registro pubblico di VMware all'indirizzo https://projects.registry.vmware.com/. Se si utilizza un registro privato, modificare l'URL dell'endpoint nei valori dei dati e nelle configurazioni delle estensioni in modo che corrispondano. Vedere Configurazione dell'estensione Prometheus.
  1. Verificare che tutti i prerequisiti dell'estensione siano soddisfatti. Vedere Prerequisiti dell'estensione.
  2. Passare alla directory con l'estensione Prometheus.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/prometheus
  3. Creare lo spazio dei nomi tanzu-system-monitoring, l'account del servizio Prometheus e gli oggetti ruolo.
    kubectl apply -f namespace-role.yaml
  4. Creare un file dei valori dei dati Prometheus.

    Il file dei valori dei dati di esempio fornisce la configurazione minima.

    cp prometheus-data-values.yaml.example prometheus-data-values.yaml
  5. Configurare l'estensione Prometheus aggiornando prometheus-data-values.yaml. Per una descrizione dei i campi e delle opzioni, vedere Configurazione dell'estensione Prometheus.
    Se non viene eseguito il provisioning del cluster con una classe di storage persistente predefinita, è possibile specificarlo nel file dei valori dei dati. Assicurarsi inoltre che lo spazio dei nomi disponga di spazio di storage sufficiente per le attestazioni di volume persistenti.
    monitoring:
      prometheus_server:
        image:
          repository: projects.registry.vmware.com/tkg/prometheus
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"
      alertmanager:
        image:
          repository: projects.registry.vmware.com/tkg/prometheus
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"
    ...      
    
  6. Creare il segreto Prometheus utilizzando il file prometheus-data-values.
    kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring
    

    Il segreto prometheus-data-values viene creato nello spazio dei nomi tanzu-system-monitoring. Verificare usando kubectl get secrets -n tanzu-system-monitoring.

  7. Distribuire l'estensione Prometheus.
    kubectl apply -f prometheus-extension.yaml

    Al completamento, viene creata l'app Prometheus: app.kappctrl.k14s.io/prometheus created.

  8. Controllare lo stato dell'app Prometheus.
    kubectl get app prometheus -n tanzu-system-monitoring
    Lo stato deve passare da Reconciling a Reconcile succeeded. Se lo stato è Reconcile failed, vedere Risoluzione dei problemi.
  9. Visualizzare informazioni dettagliate sull'app Prometheus.
    kubectl get app prometheus -n tanzu-system-monitoring -o yaml
  10. Verificare DaemonSet di Prometheus .
    kubectl get daemonsets -n tanzu-system-monitoring
  11. Verificare le distribuzioni di Prometheus.
    kubectl get deployments -n tanzu-system-monitoring

Risoluzione dei problemi di distribuzione di Prometheus

Se la distribuzione o la riconciliazione non riescono, eseguire kubectl get pods -A per visualizzare lo stato dei pod. In condizioni normali, è necessario verificare che i pod siano Running. Se lo stato è ImagePullBackOff o ImageCrashLoopBackOff, non è possibile estrarre l'immagine del contenitore dal registro. Controllare l'URL nei valori dei dati e nei file YAML dell'estensione e assicurarsi che siano corretti.

Controllare i registri del container, dove name-XXXX è il nome univoco del pod quando si esegue kubectl get pods -A:
kubectl logs pod/prometheus-alertmanager-XXXXX -c prometheus-alertmanager -n tanzu-system-monitoring
kubectl logs pod/prometheus-server-XXXXX -c prometheus-server -n tanzu-system-monitoring

Aggiornamento dell'estensione Prometheus

Aggiornare la configurazione di un'estensione Prometheus distribuita in un cluster Tanzu Kubernetes.

  1. Recuperare i valori dei dati Prometheus dal segreto.
    kubectl get secret prometheus-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > prometheus-data-values.yaml
    
  2. Aggiornare il segreto dei valori dei dati Prometheus.
    kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring -o yaml --dry-run | kubectl replace -f-
    
    L'estensione Prometheus verrà riconciliata con i valori dei dati aggiornati.
    Nota: Per impostazione predefinita, kapp-controller sincronizzerà le app ogni 5 minuti. L'aggiornamento dovrebbe essere applicato in 5 minuti al massimo. Se si desidera che l'aggiornamento venga applicato immediatamente, impostare syncPeriod in prometheus-extension.yaml su un valore inferiore e applicare l'estensione Fluent Bit mediante kubectl apply -f prometheus-extension.yaml.
  3. Controllare lo stato dell'estensione.
    kubectl get app prometheus -n tanzu-system-monitoring

    Lo stato dovrebbe passare a Reconcile Succeeded dopo l'aggiornamento di Prometheus.

  4. Visualizzare lo stato dettagliato e risolvere i problemi.
    kubectl get app prometheus -n tanzu-system-monitoring -o yaml

Eliminazione dell'estensione Prometheus

Eliminare l'estensione Prometheus da un cluster Tanzu Kubernetes.
Nota: Completare i passaggi nell'ordine indicato. Non eliminare lo spazio dei nomi, l'account del servizio e gli oggetti ruolo prima che l'app Prometheus venga eliminata completamente. In caso contrario, possono verificarsi errori di sistema.
Attenzione: Sia Prometheus che Grafana utilizzano lo stesso spazio dei nomi. L'eliminazione dello spazio dei nomi è distruttiva per qualsiasi estensione distribuita in tale spazio dei nomi. Se Grafana è distribuito, non eliminare lo spazio dei nomi prima di eliminare Grafana.
  1. Passare alla directory con l'estensione Prometheus.
    cd /extensions/monitoring/prometheus/
  2. Eliminare l'app Prometheus.
    kubectl delete app prometheus -n tanzu-system-monitoring

    Risultato previsto: app.kappctrl.k14s.io "prometheus" deleted.

  3. Verificare che l'app Prometheus sia stata eliminata.
    kubectl get app prometheus -n tanzu-system-monitoring

    Risultato previsto: apps.kappctrl.k14s.io "prometheus" not found.

  4. Eliminare lo spazio dei nomi tanzu-system-monitoring, l'account del servizio Prometheus e gli oggetti ruolo.
    Avviso: Non eseguire questo passaggio se è distribuito Grafana.
    kubectl delete -f namespace-role.yaml
  5. Se si desidera ridistribuire Prometheus, rimuovere il segreto prometheus-data-values.
    kubectl delete secret prometheus-data-values -n tanzu-system-monitoring

    Risultato previsto: secret "prometheus-data-values" deleted.

Upgrade dell'estensione Prometheus

Se è già stata distribuita un'estensione Prometheus, è possibile eseguire l'upgrade alla versione più recente.
  1. Esportare la mappa di configurazione di Prometheus e salvarla come backup.
    kubectl get configmap prometheus -n tanzu-system-monitoring -o 'go-template={{ index .data "prometheus.yaml" }}' > prometheus-configmap.yaml
    
  2. Eliminare la distribuzione di Prometheus esistente. Vedere Eliminazione dell'estensione Prometheus.
  3. Distribuire l'estensione Prometheus. Vedere Distribuire l'estensione Prometheus.

Configurazione dell'estensione Prometheus

La configurazione di Prometheus è impostata su /extensions/monitoring/prometheus/prometheus-data-values.yaml.
Tabella 1. Parametri di configurazione di Prometheus
Parametro Descrizione Tipo Predefinito
monitoring.namespace Spazio dei nomi in cui Prometheus verrà distribuito stringa tanzu-system-monitoring
monitoring.create_namespace Il contrassegno indica se creare lo spazio dei nomi specificato da monitoring.namespace booleano false
monitoring.prometheus_server.config.prometheus_yaml Dettagli di configurazione del monitoraggio del cluster Kubernetes da trasmettere a Prometheus file yaml prometheus.yaml
monitoring.prometheus_server.config.alerting_rules_yaml Regole di avviso dettagliate definite in Prometheus file yaml alerting_rules.yaml
monitoring.prometheus_server.config.recording_rules_yaml Regole di registrazione dettagliate definite in Prometheus file yaml recording_rules.yaml
monitoring.prometheus_server.service.type Tipo di servizio per esporre Prometheus. Valori supportati: ClusterIP stringa ClusterIP
monitoring.prometheus_server.enable_alerts.kubernetes_api Abilitazione degli avvisi SLO per l'API Kubernetes in Prometheus booleano true
monitoring.prometheus_server.sc.aws_type Tipo di AWS definito per storageclass in AWS stringa gp2
monitoring.prometheus_server.sc.aws_fsType Tipo di file system AWS definito per la classe di storage in AWS stringa ext4
monitoring.prometheus_server.sc.allowVolumeExpanion Definisci se l'espansione del volume è consentita per la classe di storage in AWS booleano true
monitoring.prometheus_server.pvc.annotations Annotazioni classe di storage mappa {}
monitoring.prometheus_server.pvc.storage_class Classe di storage da utilizzare per l'attestazione di volume persistente. Per impostazione predefinita, questo valore è null e viene utilizzato il provisioning predefinito stringa null
monitoring.prometheus_server.pvc.accessMode Definire la modalità di accesso per l'attestazione di volume persistente. Valori supportati: ReadWriteOnce, ReadOnlyMany, ReadWriteMany stringa ReadWriteOnce
monitoring.prometheus_server.pvc.storage Definire la dimensione dello storage per l'attestazione del volume persistente stringa 8Gi
monitoring.prometheus_server.deployment.replicas Numero di repliche Prometheus numero intero 1
monitoring.prometheus_server.image.repository Posizione dell'archivio con l'immagine di Prometheus. L'impostazione predefinita è il registro di VMware pubblico. Modificare questo valore se si utilizza un repository privato (ad esempio, un ambiente air gap). stringa projects.registry.vmware.com/tkg/prometheus
monitoring.prometheus_server.image.name Nome dell'immagine Prometheus stringa prometheus
monitoring.prometheus_server.image.tag Tag immagine Prometheus. Se si sta aggiornando la versione, potrebbe essere necessario aggiornare questo valore. stringa v2.17.1_vmware.1
monitoring.prometheus_server.image.pullPolicy Criterio di pull dell'immagine Prometheus stringa IfNotPresent
monitoring.alertmanager.config.slack_demo Configurazione delle notifiche Slack per Alertmanager stringa
slack_demo:
  name: slack_demo
  slack_configs:
  - api_url: https://hooks.slack.com
    channel: '#alertmanager-test'
monitoring.alertmanager.config.email_receiver Configurazione delle notifiche e-mail per Alertmanager stringa
email_receiver:
  name: email-receiver
  email_configs:
  - to: [email protected]
    send_resolved: false
    from: [email protected]
    smarthost: smtp.eample.com:25
    require_tls: false
monitoring.alertmanager.service.type Tipo di servizio per esporre Alertmanager. Valori supportati: ClusterIP stringa ClusterIP
monitoring.alertmanager.image.repository Posizione del repository con l'immagine di Alertmanager. L'impostazione predefinita è il registro di VMware pubblico. Modificare questo valore se si utilizza un repository privato (ad esempio, un ambiente air gap). stringa projects.registry.vmware.com/tkg/prometheus
monitoring.alertmanager.image.name Nome dell'immagine Alertmanager stringa alertmanager
monitoring.alertmanager.image.tag Tag immagine Alertmanager. Se si sta aggiornando la versione, potrebbe essere necessario aggiornare questo valore. stringa v0.20.0_vmware.1
monitoring.alertmanager.image.pullPolicy Criterio di pull dell'immagine Alertmanager stringa IfNotPresent
monitoring.alertmanager.pvc.annotations Annotazioni classe di storage mappa {}
monitoring.alertmanager.pvc.storage_class Classe di storage da utilizzare per l'attestazione di volume persistente. Per impostazione predefinita, questo valore è null e viene utilizzato il provisioning predefinito. stringa null
monitoring.alertmanager.pvc.accessMode Definire la modalità di accesso per l'attestazione di volume persistente. Valori supportati: ReadWriteOnce, ReadOnlyMany, ReadWriteMany stringa ReadWriteOnce
monitoring.alertmanager.pvc.storage Definire la dimensione dello storage per l'attestazione del volume persistente stringa 2Gi
monitoring.alertmanager.deployment.replicas Numero di repliche di alertmanager numero intero 1
monitoring.kube_state_metrics.image.repository Repository contenente l'immagine kube-state-metrics. L'impostazione predefinita è il registro di VMware pubblico. Modificare questo valore se si utilizza un repository privato (ad esempio, un ambiente air gap). stringa projects.registry.vmware.com/tkg/prometheus
monitoring.kube_state_metrics.image.name Nome dell'immagine kube-state-metrics stringa kube-state-metrics
monitoring.kube_state_metrics.image.tag Tag immagine kube-state-metrics. Se si sta aggiornando la versione, potrebbe essere necessario aggiornare questo valore. stringa v1.9.5_vmware.1
monitoring.kube_state_metrics.image.pullPolicy Criterio di pull dell'immagine kube-state-metrics stringa IfNotPresent
monitoring.kube_state_metrics.deployment.replicas Numero di repliche kube-state-metrics numero intero 1
monitoring.node_exporter.image.repository Repository contenente l'immagine node-exporter. L'impostazione predefinita è il registro di VMware pubblico. Modificare questo valore se si utilizza un repository privato (ad esempio, un ambiente air gap). stringa projects.registry.vmware.com/tkg/prometheus
monitoring.node_exporter.image.name Nome dell'immagine node-exporter stringa node-exporter
monitoring.node_exporter.image.tag Tag immagine node-exporter. Se si sta aggiornando la versione, potrebbe essere necessario aggiornare questo valore. stringa v0.18.1_vmware.1
monitoring.node_exporter.image.pullPolicy Criterio di pull dell'immagine node-exporter stringa IfNotPresent
monitoring.node_exporter.hostNetwork Se impostato su hostNetwork: true, il pod può utilizzare lo spazio dei nomi della rete e le risorse di rete del nodo. booleano false
monitoring.node_exporter.deployment.replicas Numero di repliche di node-exporter numero intero 1
monitoring.pushgateway.image.repository Repository contenente l'immagine del pushgateway. L'impostazione predefinita è il registro di VMware pubblico. Modificare questo valore se si utilizza un repository privato (ad esempio, un ambiente air gap). stringa projects.registry.vmware.com/tkg/prometheus
monitoring.pushgateway.image.name Nome dell'immagine pushgateway stringa pushgateway
monitoring.pushgateway.image.tag Tag immagine pushgateway. Se si sta aggiornando la versione, potrebbe essere necessario aggiornare questo valore. stringa v1.2.0_vmware.1
monitoring.pushgateway.image.pullPolicy Criterio di pull dell'immagine pushgateway stringa IfNotPresent
monitoring.pushgateway.deployment.replicas Numero di repliche del pushgateway numero intero 1
monitoring.cmonitor.image.repository Repository contenente l'immagine cadvisor. L'impostazione predefinita è il registro di VMware pubblico. Modificare questo valore se si utilizza un repository privato (ad esempio, un ambiente air gap). stringa projects.registry.vmware.com/tkg/prometheus
monitoring.cadvisor.image.name Nome dell'immagine cadvisor stringa cadvisor
monitoring.cmonitor.image.tag tag immagine cadvisor. Se si sta aggiornando la versione, potrebbe essere necessario aggiornare questo valore. stringa v0.36.0_vmware.1
monitoring.cmonitor.image.pullPolicy Criterio pull dell'immagine cadvisor stringa IfNotPresent
monitoring.cmonitor.deployment.replicas Numero di repliche cadvisor numero intero 1
monitoring.ingress.enabled Abilita/disabilita in ingresso per Prometheus e Alertmanager booleano

false

Per utilizzare l'ingresso, impostare questo campo su true e distribuire Contour. Per accedere a Prometheus, aggiornare l'/etc/hosts locale con una voce che mappa prometheus.system.tanzu a un indirizzo IP del nodo di lavor.

monitoring.ingress.virtual_host_fqdn Nome host per l'accesso a Prometheus e Alertmanager stringa prometheus.system.tanzu
monitoring.ingress.prometheus_prefix Prefisso del percorso per Prometheus stringa /
monitoring.ingress.alertmanager_prefix Prefisso del percorso per Alertmanager stringa /alertmanager/
monitoring.ingress.tlsCertificate.tls.crt Certificato facoltativo per l'ingresso se si desidera utilizzare il proprio certificato TLS. Per impostazione predefinita, viene generato un certificato autofirmato stringa Certificato generato
monitoring.ingress.tlsCertificate.tls.key Chiave privata del certificato facoltativa per l'ingresso se si desidera utilizzare il proprio certificato TLS. stringa Chiave certificato generata
Tabella 2. Campi configurabili per la mappa di configurazione Prometheus_Server
Parametro Descrizione Tipo Predefinito
evaluation_interval frequenza per valutare le regole durata 1m
scrape_interval frequenza per lo scraping delle destinazioni durata 1m
scrape_timeout Indica per quanto tempo deve durare il timeout di una richiesta di scraping durata 10s
rule_files I file delle regole specificano un elenco di GLOB. Regole e avvisi vengono letti da tutti i file corrispondenti file yaml
scrape_configs Elenco di configurazioni di scraping. list
job_name Nome del processo assegnato alle metriche con scraping per impostazione predefinita stringa
kubernetes_sd_configs Elenco delle configurazioni di esplorazione del servizio Kubernetes. list
relabel_configs Elenco delle configurazioni di riapplicazione dell'etichetta di destinazione. list
action Azione da eseguire in base alla corrispondenza Regex. stringa
regex Espressione regolare con cui viene associato il valore estratto. stringa
source_labels Le etichette di origine selezionano i valori dalle etichette esistenti. stringa
scheme Configura lo schema di protocollo utilizzato per le richieste. stringa
tls_config Configura le impostazioni TLS della richiesta di scraping. stringa
ca_file Certificato CA con cui convalidare il certificato del server API. nome file
insecure_skip_verify Disabilitare la convalida del certificato del server. booleano
bearer_token_file Informazioni di autenticazione del file del token bearer facoltative. nome file
replacement Valore di sostituzione rispetto al quale viene eseguita una sostituzione regex se l'espressione regolare corrisponde. stringa
target_label Etichetta in cui il valore risultante viene scritto in un'azione di sostituzione. stringa
Tabella 3. Campi configurabili per la mappa di configurazione di Alertmanager
Parametro Descrizione Tipo Predefinito
resolve_timeout ResolveTimeout è il valore predefinito utilizzato da alertmanager se l'avviso non include EndsAt durata 5m
smtp_smarthost L'host SMTP tramite il quale vengono inviate le e-mail. durata 1m
slack_api_url URL del webhook Slack. stringa global.slack_api_url
pagerduty_url URL pagerduty a cui inviare richieste API. stringa global.pagerduty_url
templates File da cui vengono lette le definizioni dei modelli di notifica personalizzati percorso file
group_by raggruppa gli avvisi per etichetta stringa
group_interval imposta il tempo di attesa prima dell'invio di una notifica sui nuovi avvisi aggiunti a un gruppo durata 5m
group_wait Indica per quanto tempo attendere inizialmente l'invio di una notifica per un gruppo di avvisi durata 30s
repeat_interval Indica per quanto tempo attendere prima di inviare nuovamente una notifica se è già stata inviata correttamente per un avviso durata 4h
receivers Elenco di destinatari delle notifiche. list
severity Gravità dell'incidente. stringa
channel Il canale o l'utente a cui inviare le notifiche. stringa
html Corpo HTML della notifica e-mail. stringa
text Corpo del testo della notifica e-mail. stringa
send_resolved Indica se notificare o meno gli avvisi risolti. nome file
email_configs Configurazioni per l'integrazione della posta elettronica booleano
Le annotazioni sui pod consentono un controllo fine del processo di scraping. Queste annotazioni devono far parte dei metadati del pod. Non avranno alcun effetto se impostati su altri oggetti come Servizi o DaemonSets.
Tabella 4. Annotazioni su pod Prometheus
Annotazione pod Descrizione
prometheus.io/scrape La configurazione predefinita consente di verificare che per tutti i pod venga eseguito lo scraping e, se impostata su false, questa annotazione escluderà il pod dal processo di scraping.
prometheus.io/path Se il percorso delle metriche non è /metrics, definirlo con questa annotazione.
prometheus.io/port Eseguire lo scraping del pod sulla porta indicata anziché le porte dichiarate del pod (l'impostazione predefinita è una destinazione senza porte se nessuna è dichiarata).
Il manifesto DaemonSet di seguito indica a Prometheus di eseguire lo scraping di tutti i pod sulla porta 9102.
apiVersion: apps/v1beta2 # for versions before 1.8.0 use extensions/v1beta1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: weave
  labels:
    app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
      annotations:
        prometheus.io/scrape: 'true'
        prometheus.io/port: '9102'
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: gcr.io/google-containers/fluentd-elasticsearch:1.20