监控策略
| 目标 |
服务发现模式 |
监控方法 |
数据源 |
| 从集群各节点kubelet组件中获取节点kubelet的基本运行状态的监控指标 |
node |
白盒监控 |
kubelet |
| 从集群各节点kubelet内置的cAdvisor中获取,节点中运行的容器的监控指标 |
node |
白盒监控 |
kubelet |
| 从部署到各个节点的Node Exporter中采集主机资源相关的运行资源 |
node |
白盒监控 |
node exporter |
| 对于内置了Promthues支持的应用,需要从Pod实例中采集其自定义监控指标 |
pod |
白盒监控 |
custom pod |
| 获取API Server组件的访问地址,并从中获取Kubernetes集群相关的运行监控指标 |
endpoints |
白盒监控 |
api server |
| 获取集群中Service的访问地址,并通过Blackbox Exporter获取网络探测指标 |
service |
黑盒监控 |
blackbox exporter |
| 获取集群中Ingress的访问信息,并通过Blackbox Exporter获取网络探测指标 |
ingress |
黑盒监控 |
blackbox exporter |
k8s 插件采集指标说明
包含夜莺指标做横向对比参考
Cadvisor 指标说明
cpu 指标
| 指标名 |
含义 |
prometheus metrics或计算方式 |
说明 |
| cpu.util |
容器cpu使用占其申请的百分比 |
sum (rate (container_cpu_usage_seconds_total[1m])) by( container) /( sum (container_spec_cpu_quota) by(container) /100000) * 100 |
0-100的范围 |
| cpu.idle |
容器cpu空闲占其申请的百分比 |
100 - cpu.util |
0-100的范围 |
| cpu.user |
容器cpu用户态使用占其申请的百分比 |
sum (rate (container_cpu_user_seconds_total[1m])) by( container) /( sum (container_spec_cpu_quota) by(container) /100000) * 100 |
0-100的范围 |
| cpu.sys |
容器cpu内核态使用占其申请的百分比 |
sum (rate (container_cpu_sys_seconds_total[1m])) by( container) /( sum (container_spec_cpu_quota) by(container) /100000) * 100 |
0-100的范围 |
| cpu.cores.occupy |
容器cpu使用占用机器几个核 |
rate(container_cpu_usage_seconds_total[1m]) |
0到机器核数上限,结果为1就是占用1个核 |
| cpu.spec.quota |
容器的CPU配额 |
container_spec_cpu_quota |
为容器指定的CPU个数*100000 |
| cpu.throttled.util |
容器CPU执行周期受到限制的百分比 |
未录入 |
0-100的范围 |
| cpu.periods |
容器生命周期中度过的cpu周期总数 |
counter型无需计算 |
使用rate/increase 查看 |
| cpu.throttled.periods |
容器生命周期中度过的受限的cpu周期总数 |
counter型无需计算 |
使用rate/increase 查看 |
| cpu.throttled.time |
容器被节流的总时间 ) |
counter型无需计算 |
单位(纳秒 |
mem 指标
| 夜莺指标名 |
含义 |
prometheus metrics或计算方式 |
说明 |
| mem.bytes.total |
容器的内存限制 |
无需计算 |
单位byte 对应pod yaml中resources.limits.memory |
| mem.bytes.used |
当前内存使用情况,包括所有内存,无论何时访问 |
container_memory_rss + container_memory_cache + kernel memory |
单位byte |
| mem.bytes.used.percent |
容器内存使用率 |
container_memory_usage_bytes/container_spec_memory_limit_bytes *100 |
范围0-100 |
| mem.bytes.workingset |
容器真实使用的内存量,也是limit限制时的 oom 判断依据 |
container_memory_max_usage_bytes > container_memory_usage_bytes >= container_memory_working_set_bytes > container_memory_rss |
单位byte |
| mem.bytes.workingset.percent |
容器真实使用的内存量百分比 |
container_memory_working_set_bytes/container_spec_memory_limit_bytes *100 |
范围0-100 |
| mem.bytes.cached |
容器cache内存量 |
container_memory_cache |
单位byte |
| mem.bytes.rss |
容器rss内存量 |
container_memory_rss |
单位byte |
| mem.bytes.swap |
容器cache内存量 |
container_memory_swap |
单位byte |
filesystem && disk.io 指标
| 夜莺指标名 |
含义 |
prometheus metrics或计算方式 |
说明 |
| disk.bytes.total |
容器可以使用的文件系统总量 |
container_fs_limit_bytes |
(单位:字节) |
| disk.bytes.used |
容器已经使用的文件系统总量 |
container_fs_usage_bytes |
(单位:字节) |
| disk.bytes.used.percent |
容器文件系统使用百分比 |
container_fs_usage_bytes/container_fs_limit_bytes *100 |
范围0-100 |
| disk.io.read.bytes |
容器io.read qps |
rate(container_fs_reads_bytes_total)[1m] |
(单位:bps) |
| disk.io.write.bytes |
容器io.write qps |
rate(container_fs_write_bytes_total)[1m] |
(单位:bps) |
network 指标
| 夜莺指标名 |
含义 |
prometheus metrics或计算方式 |
说明 |
| net.in.bytes |
容器网络接收数据总数 |
rate(container_network_receive_bytes_total)[1m] |
(单位:bytes/s) |
| net.out.bytes |
容器网络积传输数据总数) |
rate(container_network_transmit_bytes_total)[1m] |
(单位:bytes/s) |
| net.in.pps |
容器网络接收数据包pps |
rate(container_network_receive_packets_total)[1m] |
(单位:p/s) |
| net.out.pps |
容器网络发送数据包pps |
rate(container_network_transmit_packets_total)[1m] |
(单位:p/s) |
| net.in.errs |
容器网络接收数据错误数 |
rate(container_network_receive_errors_total)[1m] |
(单位:bytes/s) |
| net.out.errs |
容器网络发送数据错误数 |
rate(container_network_transmit_errors_total)[1m] |
(单位:bytes/s) |
| net.in.dropped |
容器网络接收数据包drop pps |
rate(container_network_receive_packets_dropped_total)[1m] |
(单位:p/s) |
| net.out.dropped |
容器网络发送数据包drop pps |
rate(container_network_transmit_packets_dropped_total)[1m] |
(单位:p/s) |
| container_network_{tcp,udp}_usage_total 默认不采集是因为 –disable_metrics=tcp, udp ,因为开启cpu压力大 |
|
|
|
system 指标
| 夜莺指标名 |
含义 |
prometheus metrics或计算方式 |
说明 |
| sys.ps.process.count |
容器中running进程个数 |
container_processes |
(单位:个) |
| sys.ps.thread.count |
容器中进程running线程个数 |
container_threads |
(单位:个) |
| sys.fd.count.used |
容器中打开文件描述符个数 |
container_file_descriptors |
(单位:个) |
| sys.fd.soft.ulimits |
容器中root process Soft ulimit |
container_ulimits_soft |
(单位:个) |
| sys.socket.count.used |
容器中打开套接字个数 |
container_sockets |
(单位:个) |
| sys.task.state |
容器中task 状态分布 |
container_tasks_state |
(单位:个) |
kube-apiserver metrics 指标说明
| 指标名 |
类型 |
含义 |
说明 |
| apiserver_request_total |
counter |
对APIServer不同请求的计数。 |
|
| apiserver_request_duration_seconds_sum |
gauge |
统计APIServer客户端对APIServer的访问时延。对APIServer不同请求的时延分布。 |
|
| apiserver_request_duration_seconds_count |
gauge |
请求延迟记录数 |
计算平均延迟:apiserver_request_duration_seconds_sum/apiserver_request_duration_seconds_count |
| apiserver_admission_controller_admission_duration_seconds_bucket |
Gauge |
准入控制器(Admission Controller)的处理延时。标签包括准入控制器名字、操作(CREATE、UPDATE、CONNECT等)、API资源、操作类型(validate或admit)和请求是否被拒绝(true或false)。 |
|
| apiserver_admission_webhook_admission_duration_seconds_bucket |
Gauge |
准入Webhook(Admission Webhook)的处理延时。标签包括准入控制器名字、操作(CREATE、UPDATE、CONNECT等)、API资源、操作类型(validate或admit)和请求是否被拒绝(true或false)。 |
|
| apiserver_admission_webhook_admission_duration_seconds_count |
Counter |
准入Webhook(Admission Webhook)的处理请求统计。标签包括准入控制器名字、操作(CREATE、UPDATE、CONNECT等)、API资源、操作类型(validate或admit)和请求是否被拒绝(true或false)。 |
|
| apiserver_response_sizes_sum |
counter |
请求响应大小记录和 |
|
| apiserver_response_sizes_count |
counter |
请求响应大小记录数 |
|
| authentication_attempts |
counter |
认证尝试数 |
|
| authentication_duration_seconds_sum |
counter |
认证耗时记录和 |
|
| authentication_duration_seconds_count |
counter |
认证耗时记录数 |
|
| apiserver_tls_handshake_errors_total |
counter |
tls握手失败计数 |
|
| apiserver_client_certificate_expiration_seconds_sum |
gauge |
证书过期时间总数 |
|
| apiserver_client_certificate_expiration_seconds_count |
gauge |
证书过期时间记录个数 |
|
| apiserver_client_certificate_expiration_seconds_bucket |
gauge |
证书过期时间分布 |
|
| apiserver_current_inflight_requests |
gauge |
APIServer当前处理的请求数。包括ReadOnly和Mutating两种 |
|
| apiserver_current_inqueue_requests |
gauge |
是一个表向量, 记录最近排队请求数量的高水位线 |
apiserver请求限流 |
| apiserver_flowcontrol_current_executing_requests |
gauge |
记录包含执行中(不在队列中等待)请求的瞬时数量 |
APF api的QOS APIPriorityAndFairness |
| apiserver_flowcontrol_current_inqueue_requests |
gauge |
记录包含排队中的(未执行)请求的瞬时数量 |
|
| workqueue_adds_total |
counter |
wq 入队数 |
|
| workqueue_retries_total |
counter |
wq retry数 |
|
| workqueue_longest_running_processor_seconds |
gauge |
wq中最长运行时间 |
|
| workqueue_queue_duration_seconds_sum |
gauge |
wq中等待延迟记录和 |
|
| workqueue_queue_duration_seconds_count |
gauge |
wq中等待延迟记录数 |
|
| workqueue_work_duration_seconds_sum |
gauge |
wq中处理延迟记录和 |
|
| workqueue_work_duration_seconds_count |
gauge |
wq中处理延迟记录数 |
|
| up |
Gauge |
服务可用性,1 表示服务可用,0 表示服务不可用 |
|
关键指标:
$interval 表示间隔时间,例如 5m
$quantile 0 ≤ 值 ≤ 1,用于计算当前样本数据值的分布情况,当值为 0.5 时,即表示找到当前样本数据中的中位数
| 名称 |
PromQL |
说明 |
| API QPS |
sum (irate(apiserver_request_total[$interval])) |
APIServer总QPS |
| 读请求成功率 |
sum(irate(apiserver_request_total{code=~“20.*",verb=~“GET|LIST”}[$interval]))/sum(irate(apiserver_request_total{verb=~“GET|LIST”}[$interval])) |
APIServer读请求成功率。 |
| 写请求成功率 |
sum(irate(apiserver_request_total{code=~“20.*",verb!~“GET|LIST|WATCH|CONNECT”}[$interval]))/sum(irate(apiserver_request_total{verb!~“GET|LIST|WATCH|CONNECT”}[$interval])) |
APIServer写请求成功率。 |
| 在处理读请求数量 |
sum(apiserver_current_inflight_requests{request_kind=“readOnly”}) |
所有 APIServer 当前在处理读请求数量; 不加 sum() 显示每个 apiserver 在处理的读请求数量 |
| 在处理写请求数量 |
sum(apiserver_current_inflight_requests{request_kind=“mutating”}) |
APIServer当前在处理写请求数量(老版本 k8s requestKind) |
| GET读请求时延 |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb=“GET”,resource!=”",subresource!~“log|proxy”}[$interval])) by (pod, verb, resource, subresource, scope, le)) |
展示GET请求的响应时间,维度包括APIServer Pod、Verb(GET)、Resources(例如Configmaps、Pods、Leases等)、Scope(范围例如Namespace级别、Cluster级别)。 |
| LIST读请求时延 |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb=“LIST”}[$interval])) by (pod_name, verb, resource, scope, le)) |
展示LIST请求的响应时间,维度包括APIServer Pod、Verb(GET)、Resources(例如Configmaps、Pods、Leases等)、Scope(范围例如Namespace级别、Cluster级别)。 |
| 写请求时延 |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb!~“GET|WATCH|LIST|CONNECT”}[$interval])) by (cluster, pod_name, verb, resource, scope, le)) |
展示Mutating请求的响应时间,维度包括APIServer Pod、Verb(GET)、Resources(例如Configmaps、Pods、Leases等)、Scope(范围例如Namespace级别、Cluster级别)。 |
etcd metrics 指标说明
| 指标名 |
类型 |
含义 |
说明 |
| etcd_db_total_size_in_bytes |
gauge |
db物理文件大小 |
|
| etcd_object_counts |
gauge |
etcd对象按种类计数 |
|
| etcd_request_duration_seconds_sum |
gauge |
etcd请求延迟记录和 |
|
| etcd_request_duration_seconds_count |
gauge |
etcd请求延迟记录数 |
|
kube-scheduler 指标说明
| 指标名 |
类型 |
含义 |
说明 |
| scheduler_e2e_scheduling_duration_seconds_sum |
gauge |
端到端调度延迟记录和 |
|
| scheduler_e2e_scheduling_duration_seconds_count |
gauge |
端到端调度延迟记录数 |
|
| scheduler_pod_scheduling_duration_seconds_sum |
gauge |
调度延迟记录和 |
分析次数 |
| scheduler_pod_scheduling_duration_seconds_count |
gauge |
调度延迟记录数 |
|
| scheduler_pending_pods |
gauge |
调度队列pending pod数 |
|
| scheduler_queue_incoming_pods_total |
counter |
进入调度队列pod数 |
|
| scheduler_scheduling_algorithm_duration_seconds_sum |
gauge |
调度算法延迟记录和 |
|
| scheduler_scheduling_algorithm_duration_seconds_count |
gauge |
调度算法延迟记录数 |
|
| scheduler_pod_scheduling_attempts_sum |
gauge |
成功调度一个pod 的尝试次数记录和 |
|
| scheduler_pod_scheduling_attempts_count |
gauge |
成功调度一个pod 的尝试次数记录数 |
|
coredns 指标说明
| 指标名 |
类型 |
含义 |
说明 |
| coredns_dns_requests_total |
counter |
解析请求数 |
A记录,AAAA记录,other记录 |
| coredns_dns_responses_total |
counter |
解析响应数 |
NOERROR,NXDOMAIN,REFUSED |
| coredns_cache_entries |
gauge |
缓存记录数 |
成功或失败 |
| coredns_cache_hits_total |
counter |
缓存命中数 |
成功或失败 |
| coredns_cache_misses_total |
counter |
缓存未命中数 |
成功或失败 |
| coredns_dns_request_duration_seconds_sum |
gauge |
解析延迟记录和 |
|
| coredns_dns_request_duration_seconds_count |
gauge |
解析延迟记录数 |
|
| coredns_dns_response_size_bytes_sum |
gauge |
解析响应大小记录和 |
|
| coredns_dns_response_size_bytes_count |
gauge |
解析响应大小记录数 |
|
kube-stats-metrics 指标说明
pod metrics
| 指标名 |
类型 |
含义 |
| kube_pod_status_phase |
gauge |
pod状态统计:Pending,Succeeded,Failed,Running,Unknown |
| kube_pod_container_status_waiting |
counter |
pod处于waiting状态,值为1代表waiting |
| kube_pod_container_status_waiting_reason |
gauge |
pod处于waiting状态原因:ContainerCreating,CrashLoopBackOff pod启动崩溃,再次启动然后再次崩溃,CreateContainerConfigError,ErrImagePull,ImagePullBackOff,CreateContainerError,InvalidImageName |
| kube_pod_container_status_terminated |
gauge |
pod处于terminated状态,值为1代表terminated |
| kube_pod_container_status_terminated_reason |
gauge |
pod处于terminated状态原因:OOMKilled,Completed,Error,ContainerCannotRun,DeadlineExceeded,Evicted |
| kube_pod_container_status_restarts_total |
counter |
pod中的容器重启次数 |
| kube_pod_container_resource_requests_cpu_cores |
gauge |
pod容器cpu limit |
| kube_pod_container_resource_requests_memory_bytes |
gauge |
pod容器mem limit(单位:字节) |
deployment metrics
| 指标名 |
类型 |
含义 |
| kube_deployment_status_replicas |
gauge |
dep中的pod num |
| kube_deployment_status_replicas_available |
gauge |
dep中的 可用pod num |
| kube_deployment_status_replicas_unavailable |
gauge |
dep中的 不可用pod num |
daemonSet metrics
| 指标名 |
类型 |
含义 |
| kube_daemonset_status_number_available |
gauge |
ds 可用数 |
| kube_daemonset_status_number_unavailable |
gauge |
ds 不可用数 |
| kube_daemonset_status_number_ready |
gauge |
ds ready数 |
| kube_daemonset_status_number_misscheduled |
gauge |
未经过调度运行ds的节点数 |
| kube_daemonset_status_current_number_scheduled |
gauge |
ds目前运行节点数 |
| kube_daemonset_status_desired_number_scheduled |
gauge |
应该运行ds的节点数 |
daemonSet metrics
| 指标名 |
类型 |
含义 |
| kube_statefulset_status_replicas |
gauge |
ss副本总数 |
| kube_statefulset_status_replicas_current |
gauge |
ss当前副本数 |
| kube_statefulset_status_replicas_updated |
gauge |
ss已更新副本数 |
| kube_statefulset_replicas |
gauge |
ss目标副本数 |
Job metrics
| 指标名 |
类型 |
含义 |
| kube_job_status_active |
gauge |
job running pod数 |
| kube_job_status_succeeded |
gauge |
job 成功 pod数 |
| kube_job_status_failed |
gauge |
job 失败 pod数 |
| kube_job_complete |
gauge |
job 是否完成 |
| kube_job_failed |
gauge |
job 是否失败 |
CronJob metrics
| 指标名 |
类型 |
含义 |
| kube_cronjob_status_active |
gauge |
job running pod数 |
| kube_cronjob_spec_suspend |
gauge |
=1代表 job 被挂起 |
| kube_cronjob_next_schedule_time |
gauge |
job 下次调度时间 |
| kube_cronjob_status_last_schedule_time |
gauge |
job 下次调度时间 |
PersistentVolume metrics
| 指标名 |
类型 |
含义 |
| kube_persistentvolume_capacity_bytes |
gauge |
pv申请大小 |
| kube_persistentvolume_status_phase |
gauge |
pv状态:Pending,Available,Bound,Released,Failed |
PersistentVolumeClaim metrics
| 指标名 |
类型 |
含义 |
| kube_persistentvolumeclaim_resource_requests_storage_bytes |
gauge |
pvc request大小 |
| kube_persistentvolumeclaim_status_phase |
gauge |
pvc状态:Lost,Bound,Pending |
node metrics 指标说明
| 指标名 |
类型 |
含义 |
| kube_node_status_condition |
gauge |
condition:NetworkUnavailable,MemoryPressure,DiskPressure,PIDPressure,Ready |
| kube_node_status_allocatable_cpu_cores |
gauge |
节点可以分配cpu核数 |
| kube_node_status_allocatable_memory_bytes |
gauge |
节点可以分配内存总量(单位:字节) |
| kube_node_spec_taint |
gauge |
节点污点情况 |
| kube_node_status_capacity_memory_bytes |
gauge |
节点内存总量(单位:字节) |
| kube_node_status_capacity_cpu_cores |
gauge |
节点cpu核数 |
| kube_node_status_capacity_pods |
gauge |
节点可运行的pod总数 |