

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Obter as métricas brutas do ambiente de gerenciamento no formato do Prometheus
<a name="view-raw-metrics"></a>

O ambiente de gerenciamento do Kubernetes expõe várias métricas que são representadas em um [formato do Prometheus](https://github.com/prometheus/docs/blob/master/content/docs/instrumenting/exposition_formats.md). Essas métricas são úteis para monitoramento e análise. Elas são expostas internamente por meio de endpoints de métricas e podem ser acessadas sem a implantação completa do Prometheus. No entanto, a implantação do Prometheus permite com mais facilidade a análise de métricas ao longo do tempo.

Para visualizar a saída de métricas brutas, substitua o `endpoint` e execute o comando a seguir.

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

Esse comando permite passar qualquer caminho de endpoint e retorna a resposta bruta. A saída lista diferentes métricas linha por linha, com cada linha incluindo um nome de métrica, tags e um valor.

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

## Obter métricas do servidor de API
<a name="fetch-metrics"></a>

O endpoint do servidor de API geral é exposto no ambiente de gerenciamento do Amazon EKS. Esse endpoint é útil principalmente para observar uma métrica específica.

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

Veja um exemplo de saída abaixo.

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

Essa saída bruta retorna textualmente o que o servidor de API expõe.

## Obter métricas do ambiente de gerenciamento com `metrics.eks.amazonaws.com`
<a name="fetch-metrics-prometheus"></a>

Para os clusters com a versão `1.28` do Kubernetes ou mais recente, o Amazon EKS também disponibiliza métricas no grupo de API `metrics.eks.amazonaws.com`. Essas métricas incluem componentes do ambiente de gerenciamento, como `kube-scheduler` e `kube-controller-manager`.

**nota**  
Se você tiver uma configuração de webhook que possa bloquear a criação do novo recurso de `APIService` `v1.metrics.eks.amazonaws.com` no cluster, o recurso de endpoint de métricas talvez não esteja disponível. Você pode verificar isso no log `kube-apiserver` de auditoria pesquisando pela palavra-chave `v1.metrics.eks.amazonaws.com`.

### Obter métricas do `kube-scheduler`
<a name="fetch-metrics-scheduler"></a>

Para recuperar métricas do `kube-scheduler`, use o comando a seguir.

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

Veja um exemplo de saída abaixo.

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

### Obter métricas do `kube-controller-manager`
<a name="fetch-metrics-controller"></a>

Para recuperar métricas do `kube-controller-manager`, use o comando a seguir.

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

Veja um exemplo de saída abaixo.

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

### Noções básicas sobre as métricas do gerenciador do controlador e do programador
<a name="scheduler-controller-metrics"></a>

A tabela a seguir descreve as métricas do gerenciador do controlador e do agendador que são disponibilizadas para extração do estilo do Prometheus. Para obter mais informações sobre essas métricas, consulte [Kubernetes Metrics Reference](https://kubernetes.io/docs/reference/instrumentation/metrics/) na documentação do Kubernetes.


| Métrica | Componente do ambiente de gerenciamento | Descrição | 
| --- | --- | --- | 
| scheduler\_pending\_pods | scheduler (programador) | O número de pods que estão aguardando para serem programados em um nó para execução. | 
| scheduler\_schedule\_attempts\_total | scheduler (programador) | O número de tentativas para programar pods. | 
| scheduler\_preemption\_attempts\_total | scheduler (programador) | O número de tentativas feitas pelo programador para programar pods de maior prioridade removendo os de menor prioridade. | 
| scheduler\_preemption\_victims | scheduler (programador) | O número de pods que foram selecionados para remoção para abrir espaço para pods de maior prioridade. | 
| scheduler\_pod\_scheduling\_attempts | scheduler (programador) | O número de tentativas para programar com êxito um pod. | 
| scheduler\_scheduling\_attempt\_duration\_seconds | scheduler (programador) | Indica com que rapidez ou lentidão o programador consegue encontrar um local adequado para a execução de um pod com base em vários fatores, como disponibilidade de recursos e regras de programação. | 
| scheduler\_pod\_scheduling\_sli\_duration\_seconds | scheduler (programador) | A latência de ponta a ponta de um pod que está sendo programado, a partir do momento em que o pod entra na fila de programação. Isso pode envolver várias tentativas de programação. | 
| cronjob\_controller\_job\_creation\_skew\_duration\_seconds | gerenciador do controlador | O tempo entre o momento em que um cronjob está programado para ser executado e o momento em que o trabalho correspondente é criado. | 
| workqueue\_depth | gerenciador do controlador | A profundidade atual da fila. | 
| workqueue\_adds\_total | gerenciador do controlador | O número total de adições tratadas pela fila de trabalho. | 
| workqueue\_queue\_duration\_seconds | gerenciador do controlador | O tempo em segundos em que um item permanece na fila de trabalho antes de ser solicitado. | 
| workqueue\_work\_duration\_seconds | gerenciador do controlador | O tempo em segundos que o processamento de um item da fila de trabalho leva. | 

## Implantar um extrator do Prometheus para extrair métricas de forma consistente
<a name="deploy-prometheus-scraper"></a>

Para implantar um extrator do Prometheus para extrair métricas de forma consistente, use a seguinte configuração:

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

A permissão a seguir é necessária para que o pod acesse o novo endpoint de métricas.

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

Para aplicar patch no perfil em uso, use o comando a seguir.

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

Você pode então visualizar o painel do Prometheus fazendo proxy da porta do extrator do Prometheus para a sua porta local.

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

Para seu cluster do Amazon EKS, as métricas principais do ambiente de gerenciamento do Kubernetes também são ingeridas no Amazon CloudWatch Metrics sob o namespace `AWS/EKS`. Para visualizá-las, abra o [console do CloudWatch](https://console.aws.amazon.com/cloudwatch/home#logs:prefix=/aws/eks) e selecione **Todas as métricas** no painel de navegação esquerdo. Na página de seleção de **Métricas**, escolha o namespace `AWS/EKS` e uma dimensão de métricas para seu cluster.