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
O ambiente de gerenciamento do Kubernetes expõe várias métricas que são representadas em um formato do Prometheus
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
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 abaixo um exemplo de saída.
[...] # 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
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
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 abaixo um exemplo de saída.
# 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 [...]
Devido ao grande volume potencial de dados retornados, existe um endpoint adicional de métricas do kube-scheduler para recuperar as métricas kube_pod_resource_request e kube_pod_resource_limit. Para recuperar essas métricas, use o comando a seguir.
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/resourcemetrics"
Veja abaixo um exemplo de saída.
# 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 [...]
Obter métricas do kube-controller-manager
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 abaixo um exemplo de saída.
[...] 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 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
| 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. |
|
kube_pod_resource_limit |
scheduler (programador) |
Os limites de recursos para workloads no cluster, detalhados por pod. Isso mostra o uso de recursos que o agendador e o kubelet esperam por pod para recursos, juntamente com a unidade do recurso, se houver. |
|
kube_pod_resource_request |
scheduler (programador) |
Os recursos solicitados pelas workloads no cluster, detalhados por pod. Isso mostra o uso de recursos que o agendador e o kubelet esperam por pod para recursos, juntamente com a unidade do recurso, se houver. |
|
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
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 CloudWatchAWS/EKS e uma dimensão de métricas para seu cluster.