获取 Prometheus 格式的控制面板原始指标 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

想为本用户指南做出贡献? 选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

获取 Prometheus 格式的控制面板原始指标

Kubernetes 控制面板公开了许多以 Prometheus 格式表示的指标。这些指标对于监控和分析非常有用。这些指标通过指标端点在内部公开,无需完全部署 Prometheus 即可访问。但是,随着时间的推移,部署 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-schedulerkube-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 命名空间和指标维度。