You need to enable JavaScript to run this app.
导航

核心组件监控

最近更新时间2023.12.14 10:18:02

首次发布时间2023.07.24 17:34:24

容器服务支持监控集群控制面核心组件,包括:ApiServer、Etcd、Scheduler 和 ClusterAutoscaler。本文为您介绍如何配置和查看控制面组件的监控信息。

前提条件

  • 容器服务集群已接入托管 Prometheus,详情请参见 接入托管 Prometheus
  • prometheus-agent 组件已经升级到 v2.2.0 及以上版本。详情请参见 组件发布记录
  • 查看 ClusterAutoscaler 监控,需要在集群中安装 ClusterAutoscaler 组件并启用节点池的弹性伸缩功能。详情请参见 创建节点弹性伸缩

操作步骤

创建集群时配置

  1. 登录 容器服务控制台
  2. 在集群管理页面的左侧导航栏,选择 集群
  3. 在集群列表页面,单击左上角 创建集群,配置创建集群所需的参数。
  4. 集群配置 > 运维配置 处,选择与集群绑定的托管 Prometheus 工作区,并选择需要监控的控制平面组件。
    alt

    说明

    创建集群时的其他配置,请参见 创建集群

在已有集群中配置

  1. 登录 容器服务控制台
  2. 在左侧导航栏中选择 集群
  3. 在集群列表页面,单击目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 运维管理 > Prometheus 监控
  5. 在配置页面右上角,单击 指标采集配置
  6. 选择 控制面组件 页签,在组件列表 是否采集 列,单击开关,开启核心组件的采集规则。
    alt

查看大盘

ApiServer 监控

配置控制平面组件监控后,您可以查看控制面组件的指标大盘。设置查询的时间段,并指定刷新方式(手动刷新、自动刷新)。

  1. 登录 容器服务控制台
  2. 在左侧导航栏中选择 集群
  3. 在集群列表页面,单击目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 运维管理 > Prometheus 监控
  5. 在左侧看板列表中选择 核心组件监控 > ApiServer 监控,即可查看监控大盘。
    alt

Etcd 监控

配置控制平面组件监控后,您可以查看控制面组件的指标大盘。设置查询的时间段,并指定刷新方式(手动刷新、自动刷新)。

  1. 登录 容器服务控制台
  2. 在左侧导航栏中选择 集群
  3. 在集群列表页面,单击目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 运维管理 > Prometheus 监控
  5. 在左侧看板列表中选择 核心组件监控 > Etcd 监控,即可查看监控大盘。
    alt

Scheduler 监控

配置控制平面组件监控后,您可以查看控制面组件的指标大盘。设置查询的时间段,选择查询的实例,并指定刷新方式(手动刷新、自动刷新)。

  1. 登录 容器服务控制台
  2. 在左侧导航栏中选择 集群
  3. 在集群列表页面,单击目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 运维管理 > Prometheus 监控
  5. 在左侧看板列表中选择 核心组件监控 > Scheduler 监控,即可查看监控大盘。
    alt

ClusterAutoscaler 监控

配置控制平面组件监控后,您可以查看控制面组件的指标大盘。设置查询的时间段,选择查询的实例,并指定刷新方式(手动刷新、自动刷新)。

  1. 登录 容器服务控制台
  2. 在左侧导航栏中选择 集群
  3. 在集群列表页面,单击目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 运维管理 > Prometheus 监控
  5. 在左侧看板列表中选择 核心组件监控 > ClusterAutoscaler 监控,即可查看监控大盘。
    alt

指标清单

控制面组件监控大盘的指标清单如下表所示。

大盘分类大盘名称PromQL 语句
ApiServerAPIServer QPSsum(irate(apiserver_request_total{cluster="$clusterId"}[1m]))
读请求成功率sum(irate(apiserver_request_total{cluster="$clusterId",code=~"20.*",verb=~"GET|LIST"}[1m]))/sum(irate(apiserver_request_total{cluster="$clusterId",verb=~"GET|LIST"}[1m]))*100
写请求成功率sum(irate(apiserver_request_total{cluster="$clusterId",code=~"20.*",verb!~"GET|LIST|WATCH|CONNECT"}[5m]))/sum(irate(apiserver_request_total{cluster="$clusterId",verb!~"GET|LIST|WATCH|CONNECT"}[5m]))*100
正在处理的读请求数(当前值)sum(apiserver_current_inflight_requests{cluster="$clusterId",request_kind="readOnly"})
正在处理的写请求数(当前值)sum(apiserver_current_inflight_requests{cluster="$clusterId",request_kind="mutating"})
废弃 api 的请求数sum(apiserver_requested_deprecated_apis{cluster="$clusterId"})
GET 的请求延迟 [P90]histogram_quantile(0.90, sum(irate(apiserver_request_duration_seconds_bucket{cluster="$clusterId",verb="GET",resource!="",subresource!~"log|proxy"}[1m])) by ( verb, instance,resource, le))
LIST 的请求延迟 [P90]histogram_quantile(0.90, sum(irate(apiserver_request_duration_seconds_bucket{cluster="$clusterId",verb="LIST",resource!="",subresource!~"log|proxy"}[1m])) by ( verb, instance,resource, le))
写请求延迟 [P90]histogram_quantile(0.90, sum(irate(apiserver_request_duration_seconds_bucket{cluster="$clusterId",verb!~"GET|WATCH|LIST|CONNECT",resource!="",subresource!~"log|proxy"}[1m])) by ( verb, instance,resource, le))
APIServer 非 2XX 返回值的读请求sum by (instance, resource)(increase(apiserver_request_total{cluster="$clusterId",verb="GET", resource!="", code!~"2.."}[1m]) )
APIServer 非 2XX 返回值的写请求sum by (instance, resource)(increase(apiserver_request_total{cluster="$clusterId",verb=~"^(POST|PUT|PATCH|DELETE)$", resource!="", code!~"2.."}[1m]) )
APIServer 在处理的读请求数sum(apiserver_current_inflight_requests{cluster="$clusterId",request_kind="readOnly"})by(instance)
APIServer 在处理的写请求数sum(apiserver_current_inflight_requests{cluster="$clusterId",request_kind="mutating"})by(instance)
Admit 准入控制器时延 [P90]histogram_quantile(0.9, sum by(operation, le, type, rejected) (irate(apiserver_admission_controller_admission_duration_seconds_bucket{cluster="$clusterId",type="admit"}[1m])))
Validate 准入控制器时延 [P90]histogram_quantile(0.9, sum by(operation, le, type, rejected) (irate(apiserver_admission_controller_admission_duration_seconds_bucket{cluster="$clusterId",type="validate"}[5m])))
Admit 准入 Webhook 时延 [P90]histogram_quantile(0.90, sum by(operation, type,le, rejected) (rate(apiserver_admission_webhook_admission_duration_seconds_bucket{cluster="$clusterId",type="admit"}[5m])))
Validate 准入 Webhook 时延 [P90]histogram_quantile(0.90, sum by(operation,le, type, rejected) (rate(apiserver_admission_webhook_admission_duration_seconds_bucket{cluster="$clusterId",type="validating"}[5m])))
UserAgent 请求 QPS Top 10topk(10,sum(rate(apiserver_request_useragent_total{cluster="$ClusterId"}[5m])) by(useragent,verb,resource))
UserAgent List 请求 QPS Top 10topk(10,sum(rate(apiserver_request_useragent_total{cluster="$ClusterId",verb="LIST"}[5m])) by(useragent,resource))
Etcdhas leaderetcd_server_has_leader{cluster="$clusterId"}
Backend commit 平均时延 [P90]histogram_quantile(0.9, avg(rate(etcd_disk_backend_commit_duration_seconds_bucket{cluster="$clusterId"}[5m]))by (instance, le))
Proposal failedsum(etcd_server_proposals_failed_total{cluster="$clusterId"})
Proposal pendingsum(etcd_server_proposals_pending{cluster="$clusterId"})
Backend commit 成功率sum(etcd_server_proposals_applied_total{cluster="$clusterId"})by(instance)/sum(etcd_server_proposals_committed_total{cluster="$clusterId"})by(instance)*100
Backend commit 时延 [P90]histogram_quantile(0.9, sum(rate(etcd_disk_backend_commit_duration_seconds_bucket{cluster="$clusterId"}[5m]))by (instance, le))
使用量的趋势etcd_mvcc_db_total_size_in_use_in_bytes{cluster="$clusterId"}
WAL fsync 操作耗时histogram_quantile(0.90, rate(etcd_disk_wal_fsync_duration_seconds_bucket{cluster="$clusterId"}[5m]))
Proposal failed 数量趋势etcd_server_proposals_failed_total{cluster="$clusterId"}
Proposal pending 数量趋势etcd_server_proposals_pending{cluster="$clusterId"}
Proposal commit - apply 数量趋势abs(etcd_server_proposals_committed_total{cluster="$clusterId"}-etcd_server_proposals_applied_total{cluster="$clusterId"})
Scheduler存活的调度器实例count(sum(scheduler_pod_scheduling_attempts_sum{cluster="$clusterId"})by(instance))
处于 Pending Phase 的 Pods 数sum(scheduler_pending_pods{cluster="$clusterId",instance=~"$instances"})
请求 APIServer 的 P90 时延sum(histogram_quantile(0.9, sum(rate(rest_client_request_duration_seconds_bucket{cluster="$clusterId"}[5m])) by (verb,url,le)))
尝试抢占的次数sum(scheduler_preemption_attempts_total{cluster="$clusterId",instance=~"$instances"})
缓存中的资源数量sum(scheduler_scheduler_cache_size{cluster="$clusterId",type="assumed_pods",instance=~"$instances"})by(type)
Pending Pods 数量sum(scheduler_pending_pods{cluster="$clusterId",instance=~"$instances"})by(queue)
各阶段 Pod 调度数量sum(increase(scheduler_scheduling_algorithm_duration_seconds_count{cluster="$clusterId",instance=~"$instances"}[1m]))
各阶段 Pod 调度耗时histogram_quantile(0.99, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket{cluster="$clusterId",instance=~"$instances"}[5m])) by (le))
请求 APIServer 的 QPSsum(rate(rest_client_requests_total{cluster="$clusterId"}[1m])) by (method,code)
请求 APIServer 的时延趋势图 [P90]histogram_quantile(0.9, sum(rate(rest_client_request_duration_seconds_bucket{cluster="$clusterId"}[1m])) by (verb,url,le))
ClusterAutoscaler集群伸缩状态max(cluster_autoscaler_cluster_safe_to_autoscale{cluster="$ClusterId"}) or vector(0)
是否处于缩容冷却sum(cluster_autoscaler_scale_down_in_cooldown{cluster="$ClusterId"}) or vector(0)
最近检查扩容时间1000*max(cluster_autoscaler_last_activity{cluster="$ClusterId",activity="scaleUp"})
最近检查缩容时间1000*max(cluster_autoscaler_last_activity{cluster="$ClusterId",activity="scaleDown"})
Unschedulable Podsum(cluster_autoscaler_unschedulable_pods_count{cluster="$ClusterId"})by(cluster)
count(kube_pod_status_phase{cluster="$ClusterId",phase="Running"})
弹性伸缩耗时[P99]histogram_quantile(0.99, sum(rate(cluster_autoscaler_function_duration_seconds_bucket{cluster="$ClusterId",function="main"}[1m])) by (le))
CA 添加节点数sum(increase(cluster_autoscaler_scaled_up_nodes_total{cluster="$ClusterId"}[15s]))
sum(increase(cluster_autoscaler_scaled_up_gpu_nodes_total{cluster="$ClusterId"}[15s]))
CA 移除节点数sum(increase(cluster_autoscaler_scaled_down_nodes_total{cluster="$ClusterId"}[15s])) by (reason)
sum(increase(cluster_autoscaler_scaled_down_gpu_nodes_total{cluster="$ClusterId"}[15s]))by(reason)
CA 驱逐 Pod 数sum(increase(cluster_autoscaler_evicted_pods_total{cluster="$ClusterId"}[15s]))
CA 扩容失败次数sum(increase(cluster_autoscaler_failed_scale_ups_total{cluster="$ClusterId"}[15s]))by(reason)

说明

如果您需要在托管 Prometheus 中的 Explore 功能或告警中心使用上述 PromQL 语句查看具体的指标或配置告警,请修改或删除语句中关于集群、节点、容器组的变量。例如:将 cluster=~"$Cluster"参数中的$Cluster变量修改为具体的集群 ID ,或直接删除该参数。

查看指标

您可以使用托管 Prometheus 的 Explore 功能来快速查询和展示指标数据。详情请参见 指标查询

配置告警

您可以在托管 Prometheus 的告警中心配置集群相关告警,包括:

  • 使用指标清单中的 PromQL 语句,配置手工告警规则,详情请参见 创建告警规则
  • 使用预置告警模版,配置告警规则组,详情请参见 创建告警规则组