Dieses Thema enthält Referenzinformationen für das Prometheus-Paket.
Informationen zu Prometheus und Alertmanager
Prometheus (https://prometheus.io/) ist ein System- und Dienstüberwachungssystem. Prometheus erfasst Metriken von konfigurierten Zielen in bestimmten Intervallen, wertet Regelausdrücke aus und zeigt die Ergebnisse an. Mithilfe von Alertmanager werden Warnungen ausgelöst, wenn festgestellt wird, dass eine Bedingung wahr ist.
So installieren Sie das Prometheus-Paket:
Prometheus-Komponenten
Das Prometheus-Paket installiert die in der Tabelle aufgeführten Container auf einem TKG-Cluster. Das Paket ruft die Container aus der öffentlichen VMware-Registrierung ab, die im Paket-Repository angegeben ist.
Container | Ressourcentyp | Replikate | Beschreibung |
---|---|---|---|
prometheus-alertmanager |
Bereitstellung | 1 | Verarbeitet Warnungen, die von Clientanwendungen wie dem Prometheus-Server gesendet werden. |
prometheus-cadvisor |
DaemonSet | 5 | Analysiert und zeigt Ressourcennutzungs- und Leistungsdaten aus ausgeführten Containern an |
prometheus-kube-state-metrics |
Bereitstellung | 1 | Überwacht Knotenstatus und -kapazität, Replikat-Set-Konformität, Pod-, Auftrags- und Cronjob-Status, Ressourcenanforderungen und Grenzwerte. |
prometheus-node-exporter |
DaemonSet | 5 | Exporter für Hardware- und BS-Metriken, die von Kerneln verfügbar gemacht werden. |
prometheus-pushgateway |
Bereitstellung | 1 | Dienst, der es Ihnen ermöglicht, Metriken von Aufträgen zu übertragen, die nicht entfernt werden können. |
prometheus-server |
Bereitstellung | 1 | Bietet grundlegende Funktionen, einschließlich Scraping, Regelverarbeitung und Warnungen. |
Prometheus-Datenwerte
Nachfolgend finden Sie ein beispielhafte prometheus-data-values.yaml
-Datei.
Beachten Sie Folgendes:
- Ingress ist aktiviert (ingress: enabled: true).
- Ingress ist für URLs konfiguriert, die auf /alertmanager/ (alertmanager_prefix:) und / (prometheus_prefix:) enden.
- Der FQDN für Prometheus lautet
prometheus.system.tanzu
(virtual_host_fqdn:). - Stellen Sie Ihr eigenes benutzerdefiniertes Zertifikat im Ingress-Abschnitt bereit (tls.crt, tls.key, ca.crt).
- Die PVC für alertmanager beläuft sich auf 2 GiB. Geben Sie den
storageClassName
für die Standardspeicherrichtlinie an. - Die PVC für Prometheus beläuft sich auf 20 GiB. Geben Sie den
storageClassName
für die vSphere-Speicherrichtlinie an.
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
Prometheus-Konfiguration
Die Prometheus-Konfiguration wird in der
prometheus-data-values.yaml
-Datei festgelegt. In der Tabelle sind die verfügbaren Parameter aufgeführt und beschrieben.
Parameter | Beschreibung | Typ | Standard |
---|---|---|---|
monitoring.namespace | Namespace, in dem Prometheus bereitgestellt wird | string | tanzu-system-monitoring |
monitoring.create_namespace | Das Flag gibt an, ob der durch monitoring.namespace angegebene Namespace erstellt werden soll. | Boolean | false |
monitoring.prometheus_server.config.prometheus_yaml | Konfigurationsdetails der Kubernetes-Clusterüberwachung, die an Prometheus übergeben werden sollen | yaml-Datei | prometheus.yaml |
monitoring.prometheus_server.config.alerting_rules_yaml | Detaillierte Warnungsregeln, die in Prometheus definiert sind | yaml-Datei | alerting_rules.yaml |
monitoring.prometheus_server.config.recording_rules_yaml | Detaillierte Aufzeichnungsregeln, die in Prometheus definiert sind | yaml-Datei | recording_rules.yaml |
monitoring.prometheus_server.service.type | Diensttyp, um Prometheus verfügbar zu machen. Unterstützte Werte: ClusterIP | string | ClusterIP |
monitoring.prometheus_server.enable_alerts.kubernetes_api | Aktivieren der SLO-Warnung für die Kubernetes-API in Prometheus | Boolean | true |
monitoring.prometheus_server.sc.aws_type | AWS-Typ, der für StorageClass auf AWS definiert ist | string | gp2 |
monitoring.prometheus_server.sc.aws_fsType | AWS-Dateisystemtyp, der für StorageClass auf AWS definiert ist | string | ext4 |
monitoring.prometheus_server.sc.allowVolumeExpansion | Legt fest, ob die Volume-Erweiterung für StorageClass auf AWS zulässig ist | Boolean | true |
monitoring.prometheus_server.pvc.annotations | Anmerkungen zur Speicherklasse | Zuordnung | {} |
monitoring.prometheus_server.pvc.storage_class | Für die Beanspruchung eines persistenten Volumes zu verwendende Speicherklasse. Standardmäßig ist diese null und es wird der Standard-Provisioner verwendet | string | null |
monitoring.prometheus_server.pvc.accessMode | Definieren Sie den Zugriffsmodus für die Beanspruchung eines dauerhaften Volumes. Unterstützte Werte: ReadWriteOnce, ReadOnlyMany, ReadWriteMany | string | ReadWriteOnce |
monitoring.prometheus_server.pvc.storage | Definition der Speichergröße für die Beanspruchung eines persistenten Volumes | string | 8Gi |
monitoring.prometheus_server.deployment.replicas | Anzahl an Prometheus-Replikas | integer | 1 |
monitoring.prometheus_server.image.repository | Speicherort des Repositorys mit dem Prometheus-Image. Als Standardwert wird die öffentliche VMware-Registrierung verwendet. Ändern Sie diesen Wert, wenn Sie ein privates Repository verwenden (z. B. Air-Gap-Umgebung). | string | projects.registry.vmware.com/tkg/prometheus |
monitoring.prometheus_server.image.name | Name des Prometheus-Images | string | Prometheus |
monitoring.prometheus_server.image.tag | Prometheus-Image-Tag. Dieser Wert muss möglicherweise aktualisiert werden, wenn Sie ein Upgrade der Version durchführen. | string | v2.17.1_vmware.1 |
monitoring.prometheus_server.image.pullPolicy | Prometheus-Image-Pull-Richtlinie | string | IfNotPresent |
monitoring.alertmanager.config.slack_demo | Slack-Benachrichtigungskonfiguration für Alertmanager | string | slack_demo: name: slack_demo slack_configs: - api_url: https://hooks.slack.com channel: '#alertmanager-test' |
monitoring.alertmanager.config.email_receiver | E-Mail-Benachrichtigungskonfiguration für Alertmanager | string | 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 | Diensttyp, um Alertmanager verfügbar zu machen. Unterstützte Werte: ClusterIP | string | ClusterIP |
monitoring.alertmanager.image.repository | Speicherort des Repositorys mit dem Alertmanager-Image. Als Standardwert wird die öffentliche VMware-Registrierung verwendet. Ändern Sie diesen Wert, wenn Sie ein privates Repository verwenden (z. B. Air-Gap-Umgebung). | string | projects.registry.vmware.com/tkg/prometheus |
monitoring.alertmanager.image.name | Name des Alertmanager-Images | string | alertmanager |
monitoring.alertmanager.image.tag | Alertmanager-Image-Tag. Dieser Wert muss möglicherweise aktualisiert werden, wenn Sie ein Upgrade der Version durchführen. | string | v0.20.0_vmware.1 |
monitoring.alertmanager.image.pullPolicy | Alertmanager-Image-Pull-Richtlinie | string | IfNotPresent |
monitoring.alertmanager.pvc.annotations | Anmerkungen zur Speicherklasse | Zuordnung | {} |
monitoring.alertmanager.pvc.storage_class | Für die Beanspruchung eines persistenten Volumes zu verwendende Speicherklasse. Standardmäßig ist diese null und es wird der Standard-Provisioner verwendet. | string | null |
monitoring.alertmanager.pvc.accessMode | Definieren Sie den Zugriffsmodus für die Beanspruchung eines dauerhaften Volumes. Unterstützte Werte: ReadWriteOnce, ReadOnlyMany, ReadWriteMany | string | ReadWriteOnce |
monitoring.alertmanager.pvc.storage | Definition der Speichergröße für die Beanspruchung eines persistenten Volumes | string | 2Gi |
monitoring.alertmanager.deployment.replicas | Anzahl an alertmanager-Replikas | integer | 1 |
monitoring.kube_state_metrics.image.repository | Repository mit dem kube-state-metircs-Image. Als Standardwert wird die öffentliche VMware-Registrierung verwendet. Ändern Sie diesen Wert, wenn Sie ein privates Repository verwenden (z. B. Air-Gap-Umgebung). | string | projects.registry.vmware.com/tkg/prometheus |
monitoring.kube_state_metrics.image.name | Name des kube-state-metircs-Images | string | kube-state-metrics |
monitoring.kube_state_metrics.image.tag | kube-state-metrics-Image-Tag. Dieser Wert muss möglicherweise aktualisiert werden, wenn Sie ein Upgrade der Version durchführen. | string | v1.9.5_vmware.1 |
monitoring.kube_state_metrics.image.pullPolicy | Kube-state-metrics-Image-Pull-Richtlinie | string | IfNotPresent |
monitoring.kube_state_metrics.deployment.replicas | Anzahl an kube-state-metrics-Replikas | integer | 1 |
monitoring.node_exporter.image.repository | Repository mit dem node-exporter-Image. Als Standardwert wird die öffentliche VMware-Registrierung verwendet. Ändern Sie diesen Wert, wenn Sie ein privates Repository verwenden (z. B. Air-Gap-Umgebung). | string | projects.registry.vmware.com/tkg/prometheus |
monitoring.node_exporter.image.name | Name des node-exporter-Images | string | node-exporter |
monitoring.node_exporter.image.tag | node-exporter-Image-Tag. Dieser Wert muss möglicherweise aktualisiert werden, wenn Sie ein Upgrade der Version durchführen. | string | v0.18.1_vmware.1 |
monitoring.node_exporter.image.pullPolicy | node-exporter-Image-Pull-Richtlinie | string | IfNotPresent |
monitoring.node_exporter.hostNetwork | Wenn dieser Wert auf hostNetwork: true festgelegt ist, kann der Pod den Netzwerk-Namespace und die Netzwerkressourcen des Knotens verwenden. |
Boolean | false |
monitoring.node_exporter.deployment.replicas | Anzahl an node-exporter-Replikas | integer | 1 |
monitoring.pushgateway.image.repository | Repository mit dem pushgateway-Image. Als Standardwert wird die öffentliche VMware-Registrierung verwendet. Ändern Sie diesen Wert, wenn Sie ein privates Repository verwenden (z. B. Air-Gap-Umgebung). | string | projects.registry.vmware.com/tkg/prometheus |
monitoring.pushgateway.image.name | Name des pushgateway-Images | string | pushgateway |
monitoring.pushgateway.image.tag | pushgateway-Image-Tag. Dieser Wert muss möglicherweise aktualisiert werden, wenn Sie ein Upgrade der Version durchführen. | string | v1.2.0_vmware.1 |
monitoring.pushgateway.image.pullPolicy | Pushgateway-Image-Pull-Richtlinie | string | IfNotPresent |
monitoring.pushgateway.deployment.replicas | Anzahl der Pushgateway-Replikate | integer | 1 |
monitoring.cadvisor.image.repository | Repository mit dem cadvisor-Image. Als Standardwert wird die öffentliche VMware-Registrierung verwendet. Ändern Sie diesen Wert, wenn Sie ein privates Repository verwenden (z. B. Air-Gap-Umgebung). | string | projects.registry.vmware.com/tkg/prometheus |
monitoring.cadvisor.image.name | Name des Cadvisor-Images | string | cadvisor |
monitoring.cadvisor.image.tag | cadvisor-Image-Tag. Dieser Wert muss möglicherweise aktualisiert werden, wenn Sie ein Upgrade der Version durchführen. | string | v0.36.0_vmware.1 |
monitoring.cadvisor.image.pullPolicy | Cadvisor-Image-Pull-Richtlinie | string | IfNotPresent |
monitoring.cadvisor.deployment.replicas | Anzahl an Cadvisor-Replikas | integer | 1 |
monitoring.ingress.enabled | Ingress für Prometheus und Alertmanager aktivieren/deaktivieren | Boolean | false Zur Verwendung von Ingress setzen Sie dieses Feld auf |
monitoring.ingress.virtual_host_fqdn | Hostname für den Zugriff auf Prometheus und Alertmanager | string | prometheus.system.tanzu |
monitoring.ingress.prometheus_prefix | Pfadpräfix für Prometheus | string | / |
monitoring.ingress.alertmanager_prefix | Pfadpräfix für Alertmanager | string | /alertmanager/ |
monitoring.ingress.tlsCertificate.tls.crt | Optionales Zertifikat für Ingress, wenn Sie Ihr eigenes TLS-Zertifikat verwenden möchten. Standardmäßig wird ein selbstsigniertes Zertifikat generiert | string | Generiertes Zertifikat |
monitoring.ingress.tlsCertificate.tls.key | Optionaler privater Zertifikatsschlüssel für Ingress, wenn Sie Ihr eigenes TLS-Zertifikat verwenden möchten. | string | Generierter Zertifikatsschlüssel |
Parameter | Beschreibung | Typ | Standard |
---|---|---|---|
evaluation_interval | Häufigkeit, mit der Regeln ausgewertet werden | Dauer | 1 m |
scrape_interval | Häufigkeit des Scrapens von Zielen | Dauer | 1 m |
scrape_timeout | Dauer bis zum Timeout einer Scrape-Anforderung | Dauer | 10 s |
rule_files | Regeldateien geben eine Liste von Globs an. Regeln und Warnungen werden aus allen übereinstimmenden Dateien gelesen | yaml-Datei | |
scrape_configs | Eine Liste mit Scraper-Konfigurationen. | Liste | |
job_name | Der Jobname, der scraped-Metriken standardmäßig zugewiesen ist | string | |
kubernetes_sd_configs | Liste der Kubernetes-Diensterkennungskonfigurationen. | Liste | |
relabel_configs | Liste der Konfigurationen für die erneute Beschriftung des Ziels. | Liste | |
Aktion | Durchzuführende Aktion basierend auf dem regex-Abgleich. | string | |
regex | Regulärer Ausdruck, mit dem der extrahierte Wert übereinstimmen soll. | string | |
source_labels | Die Quellbezeichnungen wählen Werte aus vorhandenen Bezeichnungen aus. | string | |
scheme | Konfiguriert das für Anforderungen verwendete Protokollschema. | string | |
tls_config | Konfiguriert die TLS-Einstellungen der Scraper-Anforderung. | string | |
ca_file | CA-Zertifikat zur Validierung des API-Serverzertifikats. | Dateiname | |
insecure_skip_verify | Deaktivieren Sie die Validierung des Serverzertifikats. | Boolean | |
bearer_token_file | Optionale Authentifizierungsinformationen zur Bearer-Token-Datei. | Dateiname | |
replacement | Ersatzwert, mit dem ein Regex ersetzt wird, wenn der reguläre Ausdruck stimmt. | string | |
target_label | Bezeichnung, in die der resultierende Wert in einer Ersatzaktion geschrieben wird. | string |
Parameter | Beschreibung | Typ | Standard |
---|---|---|---|
resolve_timeout | ResolveTimeout ist der Standardwert, der von alertmanager verwendet wird, wenn EndsAt nicht in der Warnung enthalten ist | Dauer | 5 m |
smtp_smarthost | Der SMTP-Host, über den E-Mails gesendet werden. | Dauer | 1 m |
slack_api_url | Die Slack-Webhook-URL. | string | global.slack_api_url |
pagerduty_url | Die Pagerduty-URL, an die API-Anforderungen gesendet werden. | string | global.pagerduty_url |
Vorlagen | Dateien, aus denen benutzerdefinierte Benachrichtigungsvorlagendefinitionen gelesen werden | Dateipfad | |
group_by | Warnungen, nach Bezeichnung gruppiert | string | |
group_interval | Festgelegte Wartezeit, bevor eine Benachrichtigung zu neuen Warnungen gesendet wird, die zu einer Gruppe hinzugefügt werden | Dauer | 5 m |
group_wait | Wie lange zunächst auf das Senden einer Benachrichtigung für eine Gruppe von Warnungen gewartet werden soll | Dauer | 30 s |
repeat_interval | Wie lange gewartet werden soll, bis eine Benachrichtigung erneut gesendet wird, wenn sie bereits erfolgreich für eine Warnung gesendet wurde | Dauer | 4 h |
Empfänger | Eine Liste der Benachrichtigungsempfänger. | Liste | |
Schweregrad | Schweregrad des Vorfalls | string | |
Kanal | Der Kanal oder Benutzer, an den Benachrichtigungen gesendet werden sollen. | string | |
html | Der HTML-Textkörper der E-Mail-Benachrichtigung. | string | |
Text | Der Textkörper der E-Mail-Benachrichtigung. | string | |
send_resolved | Ob behobene Warnungen gemeldet werden sollen oder nicht. | Dateiname | |
email_configs | Konfigurationen für E-Mail-Integration | Boolean |
Anmerkungen auf Pods ermöglichen die Feinsteuerung des Scraping-Vorgangs. Diese Anmerkungen müssen Teil der Pod-Metadaten sein. Sie haben keine Auswirkung, wenn sie auf andere Objekte wie z. B. Dienste oder DaemonSets festgelegt sind.
Pod-Anmerkung | Beschreibung |
---|---|
prometheus.io/scrape |
Mit der Standardkonfiguration werden alle Pods entfernt. Wenn sie auf „false“ festgelegt ist, schließt diese Anmerkung den Pod vom Scraping-Vorgang aus. |
prometheus.io/path |
Wenn der Metrikpfad nicht "/metrics" ist, definieren Sie ihn mit dieser Anmerkung. |
prometheus.io/port |
Scrapen Sie den Pod auf dem angegebenen Port anstatt auf den deklarierten Ports des Pods (der Standard ist ein Ziel ohne Port, wenn keiner angegeben ist). |
Das unten aufgeführte DaemonSet-Manifest weist Prometheus an, alle seine Pods auf Port 9102 zu scrapen.
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