Obter as métricas brutas do ambiente de gerenciamento no formato 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, 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 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
Para novos clusters que sejam Kubernetes versão 1.28
e posteriores, o Amazon EKS também expõe 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
. Essas métricas também estão disponíveis para clusters existentes cuja versão da plataforma seja igual ou posterior em comparação com a tabela a seguir.
Versão do Kubernetes | Versão da plataforma |
---|---|
|
|
|
|
|
|
|
|
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 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
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 tabela a seguir descreve as métricas do gerenciador do controlador e do programador que são disponibilizadas para extração no estilo do Prometheus. Para obter mais informações sobre essas métricas, consulte a Referência de métricas 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. |
kube_pod_resource_request |
scheduler (programador) |
Os recursos solicitados pelas workloads no cluster, detalhados por pod. Isso mostra o uso de recursos que o programador e o kubelet esperam por pod para recursos junto com a unidade do recurso, se houver. |
kube_pod_resource_limit |
scheduler (programador) |
Os recursos limitados para workloads no cluster, detalhados por pod. Isso mostra o uso de recursos que o programador e o kubelet esperam por pod para recursos junto 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. |
Implante um extrator do Prometheus para extrair métricas de forma consistente
Para implantar um extrator do Prometheus para coletar consistentemente as métricas, use a configuração a seguir:
--- 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"] } } ]'
Em seguida, é possível 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 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.