In questo argomento vengono fornite informazioni di riferimento per il pacchetto Prometheus.
Informazioni su Prometheus e Alertmanager
Prometheus (https://prometheus.io/) è un sistema e un sistema di monitoraggio del servizio. Prometheus raccoglie le metriche dalle destinazioni configurate a specifici intervalli, valuta le espressioni di regole e visualizza i risultati. Alertmanager viene utilizzato per attivare gli avvisi se una condizione è true.
Per installare il pacchetto Prometheus:
Componenti di Prometheus
Il pacchetto Prometheus installa in un cluster TKG i container elencati nella tabella. Il pacchetto estrae i contenitori dal registro pubblico di VMware specificato nel repository del pacchetto.
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. |
Valori dei dati di Prometheus
Di seguito viene fornito un file prometheus-data-values.yaml
di esempio.
Si tenga presente quanto segue:
- L'ingresso è abilitato (ingresso: abilitato: true).
- L'ingresso è configurato per gli URL che terminano con /alertmanager/ (alertmanager_prefix:) e / (prometheus_prefix:).
- L'FQDN per Prometheus è
prometheus.system.tanzu
(virtual_host_fqdn:). - Specificare il proprio certificato personalizzato nella sezione in ingresso (tls.crt, tls.key, ca.crt).
- La PVC per alertmanager è 2 GiB. Specificare il
storageClassName
per il criterio di storage predefinito. - La PVC per Prometheus è 20 GiB. Specificare il
storageClassName
per il criterio di storage vSphere.
namespace: prometheus-monitoring alertmanager: config: alertmanager_yml: | global: {} receivers: - name: default-receiver templates: - '/etc/alertmanager/templates/*.tmpl' route: group_interval: 5m group_wait: 10s receiver: default-receiver repeat_interval: 3h deployment: replicas: 1 rollingUpdate: maxSurge: 25% maxUnavailable: 25% updateStrategy: Recreate pvc: accessMode: ReadWriteOnce storage: 2Gi storageClassName: default service: port: 80 targetPort: 9093 type: ClusterIP ingress: alertmanager_prefix: /alertmanager/ alertmanagerServicePort: 80 enabled: true prometheus_prefix: / prometheusServicePort: 80 tlsCertificate: ca.crt: | -----BEGIN CERTIFICATE----- MIIFczCCA1ugAwIBAgIQTYJITQ3SZ4BBS9UzXfJIuTANBgkqhkiG9w0BAQsFADBM ... w0oGuTTBfxSMKs767N3G1q5tz0mwFpIqIQtXUSmaJ+9p7IkpWcThLnyYYo1IpWm/ ZHtjzZMQVA== -----END CERTIFICATE----- tls.crt: | -----BEGIN CERTIFICATE----- MIIHxTCCBa2gAwIBAgITIgAAAAQnSpH7QfxTKAAAAAAABDANBgkqhkiG9w0BAQsF ... YYsIjp7/f+Pk1DjzWx8JIAbzItKLucDreAmmDXqk+DrBP9LYqtmjB0n7nSErgK8G sA3kGCJdOkI0kgF10gsinaouG2jVlwNOsw== -----END CERTIFICATE----- tls.key: | -----BEGIN PRIVATE KEY----- MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDOGHT8I12KyQGS ... l1NzswracGQIzo03zk/X3Z6P2YOea4BkZ0Iwh34wOHJnTkfEeSx6y+oSFMcFRthT yfFCZUk/sVCc/C1a4VigczXftUGiRrTR -----END PRIVATE KEY----- virtual_host_fqdn: prometheus.system.tanzu kube_state_metrics: deployment: replicas: 1 service: port: 80 targetPort: 8080 telemetryPort: 81 telemetryTargetPort: 8081 type: ClusterIP node_exporter: daemonset: hostNetwork: false updatestrategy: RollingUpdate service: port: 9100 targetPort: 9100 type: ClusterIP prometheus: pspNames: "vmware-system-restricted" config: alerting_rules_yml: | {} alerts_yml: | {} prometheus_yml: | global: evaluation_interval: 1m scrape_interval: 1m scrape_timeout: 10s rule_files: - /etc/config/alerting_rules.yml - /etc/config/recording_rules.yml - /etc/config/alerts - /etc/config/rules scrape_configs: - job_name: 'prometheus' scrape_interval: 5s static_configs: - targets: ['localhost:9090'] - job_name: 'kube-state-metrics' static_configs: - targets: ['prometheus-kube-state-metrics.prometheus.svc.cluster.local:8080'] - job_name: 'node-exporter' static_configs: - targets: ['prometheus-node-exporter.prometheus.svc.cluster.local:9100'] - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: kubernetes_pod_name - job_name: kubernetes-nodes-cadvisor kubernetes_sd_configs: - role: node relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - replacement: kubernetes.default.svc:443 target_label: __address__ - regex: (.+) replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor source_labels: - __meta_kubernetes_node_name target_label: __metrics_path__ scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token - job_name: kubernetes-apiservers kubernetes_sd_configs: - role: endpoints relabel_configs: - action: keep regex: default;kubernetes;https source_labels: - __meta_kubernetes_namespace - __meta_kubernetes_service_name - __meta_kubernetes_endpoint_port_name scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token alerting: alertmanagers: - scheme: http static_configs: - targets: - alertmanager.prometheus.svc:80 - kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_namespace] regex: default action: keep - source_labels: [__meta_kubernetes_pod_label_app] regex: prometheus action: keep - source_labels: [__meta_kubernetes_pod_label_component] regex: alertmanager action: keep - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_probe] regex: .* action: keep - source_labels: [__meta_kubernetes_pod_container_port_number] regex: action: drop recording_rules_yml: | groups: - name: kube-apiserver.rules interval: 3m rules: - expr: |2 ( ( sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[1d])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[1d])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[1d])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[1d])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[1d])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[1d])) labels: verb: read record: apiserver_request:burnrate1d - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[1h])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[1h])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[1h])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[1h])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[1h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[1h])) labels: verb: read record: apiserver_request:burnrate1h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[2h])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[2h])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[2h])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[2h])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[2h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[2h])) labels: verb: read record: apiserver_request:burnrate2h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[30m])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[30m])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[30m])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[30m])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[30m])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[30m])) labels: verb: read record: apiserver_request:burnrate30m - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[3d])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[3d])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[3d])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[3d])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[3d])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[3d])) labels: verb: read record: apiserver_request:burnrate3d - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[5m])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[5m])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[5m])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[5m])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[5m])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[5m])) labels: verb: read record: apiserver_request:burnrate5m - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[6h])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[6h])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[6h])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[6h])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[6h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[6h])) labels: verb: read record: apiserver_request:burnrate6h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[1d])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[1d])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[1d])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[1d])) labels: verb: write record: apiserver_request:burnrate1d - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[1h])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[1h])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[1h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[1h])) labels: verb: write record: apiserver_request:burnrate1h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[2h])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[2h])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[2h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[2h])) labels: verb: write record: apiserver_request:burnrate2h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[30m])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[30m])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[30m])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[30m])) labels: verb: write record: apiserver_request:burnrate30m - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[3d])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[3d])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[3d])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[3d])) labels: verb: write record: apiserver_request:burnrate3d - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[5m])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[5m])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[5m])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[5m])) labels: verb: write record: apiserver_request:burnrate5m - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[6h])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[6h])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[6h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[6h])) labels: verb: write record: apiserver_request:burnrate6h - expr: | sum by (code,resource) (rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[5m])) labels: verb: read record: code_resource:apiserver_request_total:rate5m - expr: | sum by (code,resource) (rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[5m])) labels: verb: write record: code_resource:apiserver_request_total:rate5m - expr: | histogram_quantile(0.99, sum by (le, resource) (rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET"}[5m]))) > 0 labels: quantile: "0.99" verb: read record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - expr: | histogram_quantile(0.99, sum by (le, resource) (rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[5m]))) > 0 labels: quantile: "0.99" verb: write record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - expr: |2 sum(rate(apiserver_request_duration_seconds_sum{subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod) / sum(rate(apiserver_request_duration_seconds_count{subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod) record: cluster:apiserver_request_duration_seconds:mean5m - expr: | histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod)) labels: quantile: "0.99" record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - expr: | histogram_quantile(0.9, sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod)) labels: quantile: "0.9" record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - expr: | histogram_quantile(0.5, sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod)) labels: quantile: "0.5" record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - interval: 3m name: kube-apiserver-availability.rules rules: - expr: |2 1 - ( ( # write too slow sum(increase(apiserver_request_duration_seconds_count{verb=~"POST|PUT|PATCH|DELETE"}[30d])) - sum(increase(apiserver_request_duration_seconds_bucket{verb=~"POST|PUT|PATCH|DELETE",le="1"}[30d])) ) + ( # read too slow sum(increase(apiserver_request_duration_seconds_count{verb=~"LIST|GET"}[30d])) - ( ( sum(increase(apiserver_request_duration_seconds_bucket{verb=~"LIST|GET",scope=~"resource|",le="0.1"}[30d])) or vector(0) ) + sum(increase(apiserver_request_duration_seconds_bucket{verb=~"LIST|GET",scope="namespace",le="0.5"}[30d])) + sum(increase(apiserver_request_duration_seconds_bucket{verb=~"LIST|GET",scope="cluster",le="5"}[30d])) ) ) + # errors sum(code:apiserver_request_total:increase30d{code=~"5.."} or vector(0)) ) / sum(code:apiserver_request_total:increase30d) labels: verb: all record: apiserver_request:availability30d - expr: |2 1 - ( sum(increase(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[30d])) - ( # too slow ( sum(increase(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[30d])) or vector(0) ) + sum(increase(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[30d])) + sum(increase(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[30d])) ) + # errors sum(code:apiserver_request_total:increase30d{verb="read",code=~"5.."} or vector(0)) ) / sum(code:apiserver_request_total:increase30d{verb="read"}) labels: verb: read record: apiserver_request:availability30d - expr: |2 1 - ( ( # too slow sum(increase(apiserver_request_duration_seconds_count{verb=~"POST|PUT|PATCH|DELETE"}[30d])) - sum(increase(apiserver_request_duration_seconds_bucket{verb=~"POST|PUT|PATCH|DELETE",le="1"}[30d])) ) + # errors sum(code:apiserver_request_total:increase30d{verb="write",code=~"5.."} or vector(0)) ) / sum(code:apiserver_request_total:increase30d{verb="write"}) labels: verb: write record: apiserver_request:availability30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="LIST",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="GET",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="POST",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PUT",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PATCH",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="DELETE",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="LIST",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="GET",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="POST",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PUT",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PATCH",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="DELETE",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="LIST",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="GET",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="POST",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PUT",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PATCH",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="DELETE",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="LIST",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="GET",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="POST",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PUT",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PATCH",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="DELETE",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code) (code_verb:apiserver_request_total:increase30d{verb=~"LIST|GET"}) labels: verb: read record: code:apiserver_request_total:increase30d - expr: | sum by (code) (code_verb:apiserver_request_total:increase30d{verb=~"POST|PUT|PATCH|DELETE"}) labels: verb: write record: code:apiserver_request_total:increase30d rules_yml: | {} deployment: configmapReload: containers: args: - --volume-dir=/etc/config - --webhook-url=http://127.0.0.1:9090/-/reload containers: args: - --storage.tsdb.retention.time=42d - --config.file=/etc/config/prometheus.yml - --storage.tsdb.path=/data - --web.console.libraries=/etc/prometheus/console_libraries - --web.console.templates=/etc/prometheus/consoles - --web.enable-lifecycle replicas: 1 rollingUpdate: maxSurge: 25% maxUnavailable: 25% updateStrategy: Recreate pvc: accessMode: ReadWriteOnce storage: 20Gi storageClassName: default service: port: 80 targetPort: 9090 type: ClusterIP pushgateway: deployment: replicas: 1 service: port: 9091 targetPort: 9091 type: ClusterIP
Configurazione di Prometheus
La configurazione di Prometheus è impostata nel file
prometheus-data-values.yaml
. La tabella elenca e descrive i parametri disponibili.
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 |
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.
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