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
- Eseguire il provisioning di un cluster. Vedere Workflow per il provisioning di cluster di Tanzu Kubernetes.
Nota: Per installare l'estensione Prometheus, è necessario distribuire un cluster che utilizzi il dominio del servizio predefinito (
cluster.local
). - Connettersi al cluster. Vedere Connessione a un cluster Tanzu Kubernetes come utente vCenter Single Sign-On.
- Download del bundle delle estensioni TKG v1.3.1 nell'host client in cui è in esecuzione kubectl.
- Installare i prerequisiti delle estensioni TKG nel cluster Tanzu Kubernetes di destinazione.
Distribuire l'estensione Prometheus
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. |
- Verificare che tutti i prerequisiti dell'estensione siano soddisfatti. Vedere Prerequisiti dell'estensione.
- Passare alla directory con l'estensione Prometheus.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/prometheus
- Creare lo spazio dei nomi
tanzu-system-monitoring
, l'account del servizio Prometheus e gli oggetti ruolo.kubectl apply -f namespace-role.yaml
- 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
- 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" ...
- 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 nomitanzu-system-monitoring
. Verificare usandokubectl get secrets -n tanzu-system-monitoring
. - Distribuire l'estensione Prometheus.
kubectl apply -f prometheus-extension.yaml
Al completamento, viene creata l'app Prometheus:
app.kappctrl.k14s.io/prometheus created
. - Controllare lo stato dell'app Prometheus.
kubectl get app prometheus -n tanzu-system-monitoring
Lo stato deve passare daReconciling
aReconcile succeeded
. Se lo stato èReconcile failed
, vedere Risoluzione dei problemi. - Visualizzare informazioni dettagliate sull'app Prometheus.
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
- Verificare DaemonSet di Prometheus .
kubectl get daemonsets -n tanzu-system-monitoring
- 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.
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.
- 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
- 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, impostaresyncPeriod
inprometheus-extension.yaml
su un valore inferiore e applicare l'estensione Fluent Bit mediantekubectl apply -f prometheus-extension.yaml
. - 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. - Visualizzare lo stato dettagliato e risolvere i problemi.
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
Eliminazione dell'estensione Prometheus
- Passare alla directory con l'estensione Prometheus.
cd /extensions/monitoring/prometheus/
- Eliminare l'app Prometheus.
kubectl delete app prometheus -n tanzu-system-monitoring
Risultato previsto:
app.kappctrl.k14s.io "prometheus" deleted
. - 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
. - 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
- 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
- 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
- Eliminare la distribuzione di Prometheus esistente. Vedere Eliminazione dell'estensione Prometheus.
- Distribuire l'estensione Prometheus. Vedere Distribuire l'estensione Prometheus.
Configurazione dell'estensione Prometheus
/extensions/monitoring/prometheus/prometheus-data-values.yaml
.
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 |
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 |
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 |
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 |
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). |
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