帮助改进此页面
想为本用户指南做出贡献? 选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
获取 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
。
注意
如果有可能会阻止在集群上新建 APIService
资源 v1.metrics.eks.amazonaws.com
的 Webhook 配置,则指标端点功能可能不可用。您可以通过在 kube-apiserver
审计日志中搜索 v1.metrics.eks.amazonaws.com
关键词进行验证。
获取 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 |
调度器 |
等待调度到节点上执行的容器组(pod)数量。 |
scheduler_schedule_attempts_total |
调度器 |
尝试调度容器组(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
命名空间和指标维度。