Rohmetriken der Kontrollebene abrufen in Prometheus Format - Amazon EKS

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Rohmetriken der Kontrollebene abrufen in Prometheus Format

Das Tool Kubernetes Die Kontrollebene stellt eine Reihe von Metriken zur Verfügung, die in einem Prometheus-Format dargestellt werden. Diese Metriken sind für die Überwachung und Analyse hilfreich. Sie werden intern über Metriken-Endpunkte verfügbar gemacht und können abgerufen werden, ohne dass sie vollständig bereitgestellt werden müssen Prometheus. Einsatz jedoch Prometheus ermöglicht eine einfachere Analyse von Metriken im Laufe der Zeit.

Führen Sie den folgenden Befehl aus, um die Ausgabe der Rohmetriken anzuzeigen.

kubectl get --raw endpoint

Mit diesem Befehl können Sie einen beliebigen Endpunktpfad übergeben und die Rohantwort zurückgeben. In der Ausgabe werden verschiedene Metriken aufgeführt line-by-line, wobei jede Zeile einen Metriknamen, Tags und einen Wert enthält.

metric_name{tag="value"[,...]} value

Metriken vom Server abrufen API

Der allgemeine API Serverendpunkt ist auf der EKS Amazon-Steuerebene verfügbar. Dieser Endpunkt ist in erster Linie nützlich, wenn Sie sich eine bestimmte Metrik ansehen.

kubectl get --raw /metrics

Eine Beispielausgabe sieht wie folgt aus.

[...] # HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host. # TYPE rest_client_requests_total counter rest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994 rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1 rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06 rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173 rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2 rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3 rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8 # HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts # TYPE ssh_tunnel_open_count counter ssh_tunnel_open_count 0 # HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts # TYPE ssh_tunnel_open_fail_count counter ssh_tunnel_open_fail_count 0

Diese Rohausgabe gibt wortwörtlich zurück, was der API Server verfügbar macht.

Rufen Sie Metriken der Kontrollebene ab mit metrics.eks.amazonaws.com

Für neue Cluster, die Kubernetes Ab Version 1.28 und höher veröffentlicht Amazon EKS auch Metriken unter der API Gruppemetrics.eks.amazonaws.com. Zu diesen Metriken gehören Komponenten der Steuerungsebene wie kube-scheduler undkube-controller-manager. Diese Metriken sind auch für bestehende Cluster verfügbar, deren Plattformversion identisch oder höher ist als in der folgenden Tabelle.

Kubernetes-Version Plattformversion

1.31

eks.10

1.30

eks.18

1.29

eks.21

1.28

eks.27

Metriken abrufen kube-scheduler

Verwenden Sie den folgenden Befehl, um kube-scheduler Metriken abzurufen.

kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics"

Eine Beispielausgabe sieht wie folgt aus.

# TYPE scheduler_pending_pods gauge scheduler_pending_pods{queue="active"} 0 scheduler_pending_pods{queue="backoff"} 0 scheduler_pending_pods{queue="gated"} 0 scheduler_pending_pods{queue="unschedulable"} 18 # HELP scheduler_pod_scheduling_attempts [STABLE] Number of attempts to successfully schedule a pod. # TYPE scheduler_pod_scheduling_attempts histogram scheduler_pod_scheduling_attempts_bucket{le="1"} 79 scheduler_pod_scheduling_attempts_bucket{le="2"} 79 scheduler_pod_scheduling_attempts_bucket{le="4"} 79 scheduler_pod_scheduling_attempts_bucket{le="8"} 79 scheduler_pod_scheduling_attempts_bucket{le="16"} 79 scheduler_pod_scheduling_attempts_bucket{le="+Inf"} 81 [...]

Metriken abrufen kube-controller-manager

Verwenden Sie den folgenden Befehl, um kube-controller-manager Metriken abzurufen.

kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics"

Eine Beispielausgabe sieht wie folgt aus.

[...] workqueue_work_duration_seconds_sum{name="pvprotection"} 0 workqueue_work_duration_seconds_count{name="pvprotection"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-08"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-07"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-06"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-06"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-05"} 19 workqueue_work_duration_seconds_bucket{name="replicaset",le="0.001"} 109 workqueue_work_duration_seconds_bucket{name="replicaset",le="0.01"} 139 workqueue_work_duration_seconds_bucket{name="replicaset",le="0.1"} 181 workqueue_work_duration_seconds_bucket{name="replicaset",le="1"} 191 workqueue_work_duration_seconds_bucket{name="replicaset",le="10"} 191 workqueue_work_duration_seconds_bucket{name="replicaset",le="+Inf"} 191 workqueue_work_duration_seconds_sum{name="replicaset"} 4.265655885000002 [...]

Machen Sie sich mit den Metriken für Scheduler und Controller Manager vertraut

In der folgenden Tabelle werden die Scheduler- und Controller-Manager-Metriken beschrieben, die für verfügbar sind Prometheus Stil: Scraping. Weitere Informationen zu diesen Metriken finden Sie unter Kubernetes Metrics Reference im Kubernetes -Dokumentation.

Metrik Komponente der Steuerungsebene Beschreibung

scheduler_pending_pods

Scheduler

Die Anzahl der Pods, die darauf warten, zur Ausführung auf einem Knoten geplant zu werden.

scheduler_schedule_attempts_total

Scheduler

Die Anzahl der Versuche, Pods zu planen.

scheduler_preemption_attempts_total

Scheduler

Die Anzahl der Versuche des Schedulers, Pods mit höherer Priorität einzuplanen, indem er Pods mit niedrigerer Priorität entfernt.

scheduler_preemption_victims

Scheduler

Die Anzahl der Pods, die für die Räumung ausgewählt wurden, um Platz für Pods mit höherer Priorität zu schaffen.

scheduler_pod_scheduling_attempts

Scheduler

Die Anzahl der Versuche, einen Pod erfolgreich zu planen.

scheduler_scheduling_attempt_duration_seconds

Scheduler

Gibt an, wie schnell oder langsam der Scheduler auf der Grundlage verschiedener Faktoren wie Ressourcenverfügbarkeit und Planungsregeln in der Lage ist, einen geeigneten Ort für die Ausführung eines Pods zu finden.

scheduler_pod_scheduling_sli_duration_seconds

Scheduler

Die end-to-end Latenz für einen geplanten Pod ab dem Zeitpunkt, zu dem der Pod in die Warteschlange für die Terminplanung aufgenommen wird. Dies kann mehrere Planungsversuche beinhalten.

kube_pod_resource_request

Scheduler

Die von Workloads auf dem Cluster angeforderten Ressourcen, aufgeschlüsselt nach Pods. Dies zeigt die Ressourcennutzung, die der Scheduler und Kubelet pro Pod für Ressourcen erwarten, sowie die Einheit für die Ressource, falls vorhanden.

kube_pod_resource_limit

Scheduler

Das Ressourcenlimit für Workloads auf dem Cluster, aufgeschlüsselt nach Pods. Dies zeigt die Ressourcennutzung, die der Scheduler und Kubelet pro Pod für Ressourcen erwarten, sowie die Einheit für die Ressource, falls vorhanden.

cronjob_controller_job_creation_skew_duration_seconds

Controller-Manager

Die Zeit zwischen der geplanten Ausführung eines Cronjobs und der Erstellung des entsprechenden Jobs.

workqueue_depth

Controller-Manager

Die aktuelle Tiefe der Warteschlange.

workqueue_adds_total

Controller-Manager

Die Gesamtzahl der von der Workqueue verarbeiteten Hinzufügungen.

workqueue_queue_duration_seconds

Controller-Manager

Die Zeit in Sekunden, in der ein Element in der Arbeitswarteschlange verbleibt, bevor es angefordert wird.

workqueue_work_duration_seconds

Controller-Manager

Die Zeit in Sekunden, die die Verarbeitung eines Elements aus der Arbeitswarteschlange dauert.

Setzen Sie einen Prometheus-Scraper ein, um Kennzahlen konsistent zu erfassen

Verwenden Sie die folgende Konfiguration, um einen Prometheus-Scraper zur konsistenten Erfassung der Metriken einzusetzen:

--- apiVersion: v1 kind: ConfigMap metadata: name: prometheus-conf data: prometheus.yml: |- global: scrape_interval: 30s scrape_configs: # apiserver metrics - job_name: apiserver-metrics kubernetes_sd_configs: - role: endpoints 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 relabel_configs: - source_labels: [ __meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name, ] action: keep regex: default;kubernetes;https # Scheduler metrics - job_name: 'ksh-metrics' kubernetes_sd_configs: - role: endpoints metrics_path: /apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics 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 relabel_configs: - source_labels: [ __meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name, ] action: keep regex: default;kubernetes;https # Controller Manager metrics - job_name: 'kcm-metrics' kubernetes_sd_configs: - role: endpoints metrics_path: /apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics 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 relabel_configs: - source_labels: [ __meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name, ] action: keep regex: default;kubernetes;https --- apiVersion: v1 kind: Pod metadata: name: prom-pod spec: containers: - name: prom-container image: prom/prometheus ports: - containerPort: 9090 volumeMounts: - name: config-volume mountPath: /etc/prometheus/ volumes: - name: config-volume configMap: name: prometheus-conf

Die folgende Berechtigung ist erforderlich, damit der Pod auf den neuen Metriken-Endpunkt zugreifen kann.

{ "effect": "allow", "apiGroups": [ "metrics.eks.amazonaws.com" ], "resources": [ "kcm/metrics", "ksh/metrics" ], "verbs": [ "get" ] },

Um die verwendete Rolle zu patchen, können Sie den folgenden Befehl verwenden.

kubectl patch clusterrole <role-name> --type=json -p='[ { "op": "add", "path": "/rules/-", "value": { "verbs": ["get"], "apiGroups": ["metrics.eks.amazonaws.com"], "resources": ["kcm/metrics", "ksh/metrics"] } } ]'

Dann können Sie sich das ansehen Prometheus Dashboard, indem Sie den Port des Proxys verwenden Prometheus Scraper zu Ihrem lokalen Port.

kubectl port-forward pods/prom-pod 9090:9090

Für Ihren EKS Amazon-Cluster werden die Kernmetriken der Kubernetes-Kontrollebene auch in Amazon CloudWatch Metrics unter dem Namespace aufgenommen. AWS/EKS Um sie anzuzeigen, öffnen Sie die CloudWatch Konsole und wählen Sie im linken Navigationsbereich Alle Metriken aus. Wählen Sie auf der Seite zur Auswahl der Metriken den AWS/EKS Namespace und eine Metrikdimension für Ihren Cluster aus.