

 **Aidez à améliorer cette page** 

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.

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

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érer les métriques brutes du plan de contrôle au format Prometheus
<a name="view-raw-metrics"></a>

Le plan de contrôle Kubernetes expose un certain nombre de métriques représentées au [format Prometheus](https://github.com/prometheus/docs/blob/master/content/docs/instrumenting/exposition_formats.md). 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
<a name="fetch-metrics"></a>

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`
<a name="fetch-metrics-prometheus"></a>

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`
<a name="fetch-metrics-scheduler"></a>

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

En raison de la quantité potentiellement importante de données renvoyées, il existe un point de terminaison de `kube-scheduler` mesures supplémentaire pour la récupération `kube_pod_resource_request` et les `kube_pod_resource_limit` métriques. Pour récupérer ces métriques, utilisez la commande suivante.

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

L'exemple qui suit illustre un résultat.

```
# HELP kube_pod_resource_limit [STABLE] Resources limit for workloads on the cluster, broken down by pod. This shows the resource usage the scheduler and kubelet expect per pod for resources along with the unit for the resource if any.
# TYPE kube_pod_resource_limit gauge
kube_pod_resource_limit{namespace="kube-system",node="ip-192-168-87-3.us-west-2.compute.internal",pod="coredns-7bf648ff5d-dj4ss",priority="2000000000",resource="memory",scheduler="default-scheduler",unit="bytes"} 1.7825792e+08
# HELP kube_pod_resource_request [STABLE] Resources requested by workloads on the cluster, broken down by pod. This shows the resource usage the scheduler and kubelet expect per pod for resources along with the unit for the resource if any.
# TYPE kube_pod_resource_request gauge
kube_pod_resource_request{namespace="kube-system",node="ip-192-168-87-3.us-west-2.compute.internal",pod="aws-node-x7znh",priority="2000001000",resource="cpu",scheduler="default-scheduler",unit="cores"} 0.05
kube_pod_resource_request{namespace="kube-system",node="ip-192-168-87-3.us-west-2.compute.internal",pod="coredns-7bf648ff5d-dj4ss",priority="2000000000",resource="cpu",scheduler="default-scheduler",unit="cores"} 0.1
[...]
```

### Récupérer les métriques `kube-controller-manager`
<a name="fetch-metrics-controller"></a>

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
<a name="scheduler-controller-metrics"></a>

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](https://kubernetes.io/docs/reference/instrumentation/metrics/) 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. | 
| 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 Kubelet attendent par pod pour les ressources, ainsi que l'unité de la ressource, le cas échéant. | 
| demande\_ressource kube\_pod\_ | planificateur | Ressources demandées par les charges de travail du cluster, ventilées par module. Cela montre l'utilisation des ressources que le planificateur et 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 | 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
<a name="deploy-prometheus-scraper"></a>

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 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](https://console.aws.amazon.com/cloudwatch/home#logs:prefix=/aws/eks) et sélectionnez **Toutes les mesures** dans le volet de navigation de 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.