

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Obtención de métricas sin procesar del plano de control en formato Prometheus
<a name="view-raw-metrics"></a>

El plano de control de Kubernetes expone una serie de métricas que se representan en un [formato Prometheus](https://github.com/prometheus/docs/blob/master/content/docs/instrumenting/exposition_formats.md). Estas métricas son útiles para el monitoreo y el análisis. Se exponen internamente a través de puntos de conexión de métricas, y se puede acceder a estos sin implementar Prometheus completamente. Sin embargo, la implementación de Prometheus permite analizar las métricas a lo largo del tiempo de forma más sencilla.

Para ver la salida de métricas sin procesar, reemplace `endpoint` y ejecute el siguiente comando.

```
kubectl get --raw endpoint
```

Este comando permite pasar cualquier ruta de punto de conexión y devuelve la respuesta sin procesar. La salida enumera las diferentes métricas línea por línea, y cada línea incluye un nombre de métrica, etiquetas y un valor.

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

## Cómo obtener métricas del servidor de API
<a name="fetch-metrics"></a>

El punto de conexión general del servidor de API se expone en el plano de control de Amazon EKS. Este punto de conexión resulta útil sobre todo cuando se examina una métrica específica.

```
kubectl get --raw /metrics
```

Un ejemplo de salida sería el siguiente.

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

Este resultado sin procesar devuelve literalmente lo que el servidor de API expone.

## Métricas del plano de control con `metrics.eks.amazonaws.com`
<a name="fetch-metrics-prometheus"></a>

En el caso de los clústeres de la versión `1.28` y posteriores de Kubernetes, Amazon EKS también expone métricas bajo el grupo de la API `metrics.eks.amazonaws.com`. Estas métricas incluyen componentes del plano de control, como `kube-scheduler` y `kube-controller-manager`.

**nota**  
Si tiene una configuración de webhook que podría bloquear la creación de la nueva `v1.metrics.eks.amazonaws.com` del recurso `APIService` en el clúster, es posible que la característica de punto de conexión de métricas no se encuentre disponible. Para verificarlo en el registro de auditoría de `kube-apiserver`, busque la palabra clave `v1.metrics.eks.amazonaws.com`.

### Cómo obtener métricas de `kube-scheduler`
<a name="fetch-metrics-scheduler"></a>

Utilice el siguiente comando para obtener métricas de `kube-scheduler`

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

Un ejemplo de salida sería el siguiente.

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

### Cómo obtener métricas de `kube-controller-manager`
<a name="fetch-metrics-controller"></a>

Utilice el siguiente comando para obtener métricas de `kube-controller-manager`

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

Un ejemplo de salida sería el siguiente.

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

### Comprender las métricas del programador y del administrador de controladores
<a name="scheduler-controller-metrics"></a>

En la siguiente tabla se describen las métricas del programador y del administrador de controladores que están disponibles para la extracción de estilos de Prometheus. Para obtener más información acerca de estas métricas, consulte [Kubernetes Metrics Reference](https://kubernetes.io/docs/reference/instrumentation/metrics/) en la documentación de Kubernetes.


| Métrica | Componente del plano de control | Descripción | 
| --- | --- | --- | 
| scheduler\_pending\_pods | programador | La cantidad de pods que están a la espera de programarse en un nodo para su ejecución. | 
| scheduler\_schedule\_attempts\_total | programador | La cantidad de intentos realizados para programar pods. | 
| scheduler\_preemption\_attempts\_total | programador | La cantidad de intentos realizados por el programador para programar pods de mayor prioridad expulsando los de menor prioridad. | 
| scheduler\_preemption\_victims | programador | La cantidad de pods que se han seleccionado para expulsarse con el fin de liberar espacio para pods de mayor prioridad. | 
| scheduler\_pod\_scheduling\_attempts | programador | La cantidad de intentos de programar un pod correctamente. | 
| scheduler\_scheduling\_attempt\_duration\_seconds | programador | Indica la velocidad con la que el programador es capaz de encontrar un espacio adecuado para la ejecución de un pod en función de varios factores, como la disponibilidad de recursos y las reglas de programación. | 
| scheduler\_pod\_scheduling\_sli\_duration\_seconds | programador | La latencia de extremo a extremo de un pod que se está programando, desde el momento en que entra en la cola de programación. Es posible que sean necesarios varios intentos de programación. | 
| cronjob\_controller\_job\_creation\_skew\_duration\_seconds | administrador de controladores | El tiempo transcurrido entre el momento en que se programa la ejecución de un cronjob y el momento en que se crea el trabajo correspondiente. | 
| workqueue\_depth | administrador de controladores | La profundidad actual de la cola. | 
| workqueue\_adds\_total | administrador de controladores | Cantidad total de adiciones administradas por la cola de trabajo. | 
| workqueue\_queue\_duration\_seconds | administrador de controladores | El tiempo en segundos que un elemento permanece en la cola de trabajo antes de ser solicitado. | 
| workqueue\_work\_duration\_seconds | administrador de controladores | El tiempo en segundos que tarda en procesarse un elemento de la cola de trabajo. | 

## Implementación de un sistema de extracción de Prometheus para extraer métricas de forma sistemática
<a name="deploy-prometheus-scraper"></a>

Para implementar un sistema de extracción de Prometheus que extraiga sistemáticamente las métricas, utilice la siguiente configuración:

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

El permiso que sigue es necesario para que el pod acceda al nuevo punto de conexión de métricas.

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

Para aplicar un parche al rol que se utiliza, puede utilizar el siguiente comando.

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

A continuación, para ver el panel de Prometheus, puede redirigir mediante proxy el puerto del sistema de extracción de Prometheus al puerto local.

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

Para el clúster de Amazon EKS, las métricas del plano de control principal de Kubernetes también se ingieren en las métricas de Amazon CloudWatch bajo el espacio de nombres de `AWS/EKS`. Para verlas, abra la [consola de CloudWatch](https://console.aws.amazon.com/cloudwatch/home#logs:prefix=/aws/eks) y seleccione **Todas las métricas** en el panel de navegación izquierdo. En la página de selección de **Métricas**, elija el espacio de nombres de `AWS/EKS` y una dimensión de métricas para el clúster.