获取 Prometheus 格式的控制面板原始指标
Kubernetes 控制面板公开了许多以 Prometheus 格式
要查看原始指标输出,请运行以下命令。
kubectl get --raw
endpoint
此命令允许您传递任何端点路径,并返回原始响应。输出结果逐行列出了不同指标,每行都包含指标名称、标签和值。
metric_name{tag="value"[,...]} value
从 API 服务器获取指标
常规 API 服务器端点在 Amazon EKS 控制面板上公开。此端点主要用于查看特定指标。
kubectl get --raw /metrics
示例输出如下。
[...] # 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
此原始输出逐字返回 API 服务器公开的内容。
使用 metrics.eks.amazonaws.com
获取控制面板指标
对于 Kubernetes 1.28
及以上版本的新集群,Amazon EKS 还会在 API 组 metrics.eks.amazonaws.com
下公开指标。这些指标包括控制面板组件,例如 kube-scheduler
和 kube-controller-manager
。这些指标也适用于平台版本与下表相同或更高版本的现有集群。
Kubernetes 版本 | 平台版本 |
---|---|
|
|
|
|
|
|
|
|
获取 kube-scheduler
指标
使用以下命令来检索 kube-scheduler
指标。
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics"
示例输出如下。
# 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 [...]
获取 kube-controller-manager
指标
使用以下命令来检索 kube-controller-manager
指标。
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics"
示例输出如下。
[...] 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 [...]
了解调度器和控制器管理器指标
下表描述了可用于 Prometheus 样式获取的调度器和控制器管理器指标。有关这些指标的更多信息,请参阅 Kubernetes 文档中的 Kubernetes Metrics Reference
指标 | 控制面板组件 | 描述 |
---|---|---|
scheduler_pending_pods |
scheduler |
等待调度到节点上执行的容器组(pod)数量。 |
scheduler_schedule_attempts_total |
scheduler |
尝试调度容器组(pod)的次数。 |
scheduler_preemption_tapts_total |
调度器 |
调度器尝试通过驱逐优先级较低的容器组(pod)来调度优先级较高的容器组(pod)的次数。 |
scheduler_preemption_victims |
调度器 |
为容纳优先级更高的容器组(pod)腾出空间而被选中驱逐的容器组(pod)的数量。 |
scheduler_pod_scheduling_attempts |
调度器 |
成功尝试调度容器组(pod)的次数。 |
scheduler_scheduling_attempt_duration_seconds |
调度器 |
表示调度器能够根据可用资源和调度规则等各种因素找到容器组(pod)的合适运行位置的速度。 |
scheduler_pod_scheduling_sli_duration_seconds |
调度器 |
从容器组(pod)进入调度队列之时起调度容器组(pod)的端到端延迟。这可能涉及多次尝试调度。 |
kube_pod_resource_request |
调度器 |
集群上工作负载请求的资源,按容器组(pod)细分。显示调度器和 Kubelet 预计的各容器组(pod)资源使用量,以及资源的单位(如有)。 |
kube_pod_resource_limit |
调度器 |
集群上工作负载的资源限制,按容器组(pod)细分。显示调度器和 Kubelet 预计的各容器组(pod)资源使用量,以及资源的单位(如有)。 |
cronjob_controller_job_creation_skew_duration_skeond |
控制器管理器 |
从计划运行 cronjob 到创建相应作业的时间。 |
workqueue_depth |
控制器管理器 |
当前工作队列的深度。 |
workqueue_adds_total |
控制器管理器 |
工作队列处理的添加总数。 |
workqueue_queue_duration_seconds |
控制器管理器 |
显示项目在被请求之前在工作队列中停留的时长(以秒为单位)。 |
workqueue_work_duration_seconds |
控制器管理器 |
工作队列中项目的处理时长(以秒为单位)。 |
部署 Prometheus 抓取工具持续抓取指标
要部署 Prometheus 抓取工具持续抓取指标,请使用以下配置:
--- 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
容器组(pod)需要以下权限才能访问新的指标端点。
{ "effect": "allow", "apiGroups": [ "metrics.eks.amazonaws.com" ], "resources": [ "kcm/metrics", "ksh/metrics" ], "verbs": [ "get" ] },
要修补正在使用的角色,请使用以下命令。
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"] } } ]'
然后,您可以通过将 Prometheus 抓取工具的端口代理到本地端口来查看 Prometheus 仪表板。
kubectl port-forward pods/prom-pod 9090:9090
对于您的 Amazon EKS 集群,Kubernetes 控制面板核心指标也将摄取到 AWS/EKS
命名空间下的 Amazon CloudWatch 指标中。要查看这些指标,请打开 CloudWatch 控制台AWS/EKS
命名空间和指标维度。