Récupérer les métriques brutes du plan de contrôle au format Prometheus - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Récupérer les métriques brutes du plan de contrôle au format Prometheus

Le plan de contrôle Kubernetes expose un certain nombre de métriques représentées au format Prometheus. Ces métriques sont utiles pour la surveillance et l’analyse. Elles sont exposées en interne via des points de terminaison de métriques et sont accessibles sans avoir à déployer Prometheus dans son intégralité. Cependant, le déploiement de Prometheus facilite l’analyse des métriques au fil du temps.

Pour afficher les métriques brutes, remplacez endpoint et exécutez la commande suivante.

kubectl get --raw endpoint

Cette commande vous permet de passer n’importe quel chemin d’accès au point de terminaison et renvoie la réponse brute. La sortie répertorie différentes métriques ligne par ligne, chaque ligne comprenant un nom de métrique, des balises et une valeur.

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

Récupérer les métriques à partir du serveur API

Le point de terminaison général du serveur API est exposé sur le plan de contrôle Amazon EKS. Ce point de terminaison est particulièrement utile lorsque vous recherchez 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 tel quel ce que le serveur d'API expose.

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

Pour les clusters Kubernetes version 1.28 et supérieure, Amazon EKS expose également les métriques sous le groupe API metrics.eks.amazonaws.com. Ces métriques incluent les composants du plan de contrôle tels que kube-scheduler et kube-controller-manager.

Note

Si vous disposez d’une configuration de webhook susceptible de bloquer la création de la nouvelle ressource APIService v1.metrics.eks.amazonaws.com sur votre cluster, la fonctionnalité du point de terminaison des métriques peut ne pas être disponible. Vous pouvez le vérifier dans le journal d’audit kube-apiserver en recherchant le mot-clé v1.metrics.eks.amazonaws.com.

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

Pour récupérer les métriques kube-scheduler, 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érer les métriques kube-controller-manager

Pour récupérer les métriques kube-controller-manager, 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 gestionnaire de contrôleurs

Le tableau suivant décrit les métriques du planificateur et du gestionnaire de contrôleurs qui sont disponibles pour le scraping de type Prometheus. Pour plus d’informations sur ces métriques, consultez Référence des métriques Kubernetes dans la documentation Kubernetes.

Métrique Composant du plan de contrôle Description

scheduler_pending_pods

planificateur

Nombre de pods en attente d’être planifiés sur un nœud pour exécution.

scheduler_schedule_attempts_total

planificateur

Nombre de tentatives effectuées pour planifier des pods.

scheduler_preemption_attempts_total

planificateur

Nombre de tentatives effectuées par le planificateur pour planifier des pods de priorité supérieure en évictant ceux de priorité inférieure.

scheduler_preemption_victims

planificateur

Nombre de pods sélectionnés pour être évictés afin de libérer de l’espace pour des pods de priorité supérieure.

scheduler_pod_scheduling_attempts

planificateur

Nombre de tentatives pour planifier avec succès 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 l’exécution d’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

Latence de bout en bout pour 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.

cronjob_controller_job_creation_skew_duration_seconds

gestionnaire de contrôleur

Temps entre le moment où une tâche cron est planifiée pour être exécutée et le moment où la tâche correspondante est créée.

workqueue_depth

gestionnaire de contrôleur

La profondeur actuelle de la file d’attente.

workqueue_adds_total

gestionnaire de contrôleur

Le nombre total d’ajouts traités par la file d’attente de travail.

workqueue_queue_duration_seconds

gestionnaire de contrôleur

Le temps en secondes pendant lequel un élément reste dans la file d’attente de travail avant d’être demandé.

workqueue_work_duration_seconds

gestionnaire de contrôleur

Le temps en secondes nécessaire au traitement d’un élément de la file d’attente de travail.

Déployer un scraper Prometheus pour récupérer les métriques de manière cohérente

Pour déployer un scraper Prometheus afin de récupérer les métriques de manière cohérente, 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 suivante 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 appliquer un correctif au 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"] } } ]'

Vous pouvez ensuite afficher le tableau de bord Prometheus en redirigeant le port du scraper Prometheus vers votre port local.

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

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