Récupère les métriques brutes du plan de contrôle dans Prometheus format - Amazon EKS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Récupère les métriques brutes du plan de contrôle dans Prometheus format

Le Kubernetes le plan de contrôle expose un certain nombre de métriques représentées au format Prometheus. Ces métriques sont utiles pour la surveillance et l’analyse. Ils sont exposés en interne via des points de terminaison métriques et sont accessibles sans déploiement complet Prometheus. Toutefois, le déploiement Prometheus permet d'analyser plus facilement les métriques au fil du temps.

Pour afficher la sortie des métriques brutes, exécutez la commande suivante.

kubectl get --raw endpoint

Cette commande vous permet de transmettre n'importe quel chemin de point de terminaison et renvoie la réponse brute. La sortie répertorie différentes métriques line-by-line, chaque ligne incluant un nom de métrique, des balises et une valeur.

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

Récupérez les métriques depuis le serveur API

Le point de terminaison général API du serveur est exposé sur le plan EKS de contrôle Amazon. Ce point de terminaison est principalement utile lorsque vous examinez une métrique spécifique.

kubectl get --raw /metrics

L'exemple qui suit illustre un résultat.

[...] # 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

Cette sortie brute renvoie mot pour mot ce que le API serveur expose.

Récupérez les métriques du plan de contrôle avec metrics.eks.amazonaws.com

Pour les nouveaux clusters qui sont Kubernetes version 1.28 et supérieure, Amazon expose EKS également les statistiques du API groupemetrics.eks.amazonaws.com. Ces mesures incluent les composants du plan de contrôle tels que kube-scheduler etkube-controller-manager. Ces métriques sont également disponibles pour les clusters existants dont la version de plate-forme est identique ou ultérieure par rapport au tableau suivant.

Version de Kubernetes Version de la plateforme

1.31

eks.10

1.30

eks.18

1.29

eks.21

1.28

eks.27

Récupérez kube-scheduler les métriques

Pour récupérer kube-scheduler des métriques, utilisez la commande suivante.

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

L'exemple qui suit illustre un résultat.

# 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 [...]

Récupérez kube-controller-manager les métriques

Pour récupérer kube-controller-manager des métriques, utilisez la commande suivante.

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

L'exemple qui suit illustre un résultat.

[...] 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 [...]

Comprendre les métriques du planificateur et du responsable du contrôleur

Le tableau suivant décrit les métriques du planificateur et du gestionnaire de contrôleurs mises à disposition pour Prometheus grattage de style. Pour plus d'informations sur ces métriques, consultez la référence des métriques Kubernetes dans le Kubernetes .

Métrique Composant du plan de contrôle Description

scheduler_pending_pods

planificateur

Le nombre de pods qui attendent d'être planifiés sur un nœud pour être exécutés.

scheduler_schedule_attempts total

planificateur

Le nombre de tentatives effectuées pour planifier des pods.

planificateur_preemption_tentats_total

planificateur

Le nombre de tentatives effectuées par le planificateur pour planifier des pods prioritaires en expulsant les pods moins prioritaires.

Scheduler_Preemption_Victims

planificateur

Le nombre de pods sélectionnés pour être expulsés afin de faire de la place à des pods prioritaires.

scheduler_pod_scheduling_attempts

planificateur

Le nombre de tentatives de planification réussie d'un Pod.

scheduler_scheduling_attempt duration_seconds

planificateur

Indique la rapidité ou la lenteur avec laquelle le planificateur est capable de trouver un emplacement approprié pour exécuter un Pod en fonction de divers facteurs tels que la disponibilité des ressources et les règles de planification.

scheduler_pod_scheduling_sli_duration_seconds

planificateur

La end-to-end latence d'un pod en cours de planification, à partir du moment où le pod entre dans la file d'attente de planification. Cela peut impliquer plusieurs tentatives de planification.

demande_ressource kube_pod_

planificateur

Les ressources demandées par les charges de travail du cluster, ventilées par pod. Cela montre l'utilisation des ressources que le planificateur et le kubelet attendent par pod pour les ressources, ainsi que l'unité de la ressource, le cas échéant.

kube_pod_resource_limit

planificateur

Limite de ressources pour les charges de travail sur le cluster, ventilée par module. Cela montre l'utilisation des ressources que le planificateur et le kubelet attendent par pod pour les ressources, ainsi que l'unité de la ressource, le cas échéant.

cronjob_controller_job_creation_skew_duration_seconds

responsable du contrôleur

Le délai entre le moment où l'exécution d'un cronjob est planifiée et le moment où le travail correspondant est créé.

profondeur de la file d'attente

responsable du contrôleur

Profondeur actuelle de la file d'attente.

workqueue_adds_total

responsable du contrôleur

Le nombre total d'ajouts gérés par la file de travail.

file d'attente de travail durée_duration_secondes

responsable du contrôleur

Durée en secondes pendant laquelle un élément reste dans la file d'attente avant d'être demandé.

workqueue_work_duration_seconds

responsable du contrôleur

Durée en secondes nécessaire au traitement d'un élément de la file d'attente.

Déployez un scraper Prometheus pour analyser régulièrement les indicateurs

Pour déployer un scraper Prometheus afin de récupérer régulièrement les métriques, utilisez la configuration suivante :

--- 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

L'autorisation qui suit est requise pour que le Pod puisse accéder au nouveau point de terminaison des métriques.

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

Pour corriger le rôle utilisé, vous pouvez utiliser la commande suivante.

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"] } } ]'

Ensuite, vous pouvez consulter le Prometheus tableau de bord en utilisant un proxy pour le port du Prometheus racloir jusqu'à votre port local.

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

Pour votre EKS cluster Amazon, les principales métriques du plan de contrôle Kubernetes sont également ingérées dans CloudWatch Amazon Metrics sous l'espace de noms. AWS/EKS Pour les consulter, ouvrez la CloudWatch console et sélectionnez Toutes les mesures dans le volet de navigation de gauche. Sur la page de sélection des métriques, choisissez l'espace de AWS/EKS noms et une dimension de métriques pour votre cluster.