目录

Prometheus 监控k8s 组件指标梳理

监控策略

目标服务发现模式监控方法数据源
从集群各节点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) * 1000-100的范围
cpu.idle容器cpu空闲占其申请的百分比100 - cpu.util0-100的范围
cpu.user容器cpu用户态使用占其申请的百分比sum (rate (container_cpu_user_seconds_total[1m])) by( container) /( sum (container_spec_cpu_quota) by(container) /100000) * 1000-100的范围
cpu.sys容器cpu内核态使用占其申请的百分比sum (rate (container_cpu_sys_seconds_total[1m])) by( container) /( sum (container_spec_cpu_quota) by(container) /100000) * 1000-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 qpsrate(container_fs_reads_bytes_total)[1m](单位:bps)
disk.io.write.bytes容器io.write qpsrate(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容器网络接收数据包ppsrate(container_network_receive_packets_total)[1m](单位:p/s)
net.out.pps容器网络发送数据包ppsrate(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 ppsrate(container_network_receive_packets_dropped_total)[1m](单位:p/s)
net.out.dropped容器网络发送数据包drop ppsrate(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 ulimitcontainer_ulimits_soft(单位:个)
sys.socket.count.used容器中打开套接字个数container_sockets(单位:个)
sys.task.state容器中task 状态分布container_tasks_state(单位:个)

kube-apiserver metrics 指标说明

指标名类型含义说明
apiserver_request_totalcounter对APIServer不同请求的计数。
apiserver_request_duration_seconds_sumgauge统计APIServer客户端对APIServer的访问时延。对APIServer不同请求的时延分布。
apiserver_request_duration_seconds_countgauge请求延迟记录数计算平均延迟:apiserver_request_duration_seconds_sum/apiserver_request_duration_seconds_count
apiserver_admission_controller_admission_duration_seconds_bucketGauge准入控制器(Admission Controller)的处理延时。标签包括准入控制器名字、操作(CREATE、UPDATE、CONNECT等)、API资源、操作类型(validate或admit)和请求是否被拒绝(true或false)。
apiserver_admission_webhook_admission_duration_seconds_bucketGauge准入Webhook(Admission Webhook)的处理延时。标签包括准入控制器名字、操作(CREATE、UPDATE、CONNECT等)、API资源、操作类型(validate或admit)和请求是否被拒绝(true或false)。
apiserver_admission_webhook_admission_duration_seconds_countCounter准入Webhook(Admission Webhook)的处理请求统计。标签包括准入控制器名字、操作(CREATE、UPDATE、CONNECT等)、API资源、操作类型(validate或admit)和请求是否被拒绝(true或false)。
apiserver_response_sizes_sumcounter请求响应大小记录和
apiserver_response_sizes_countcounter请求响应大小记录数
authentication_attemptscounter认证尝试数
authentication_duration_seconds_sumcounter认证耗时记录和
authentication_duration_seconds_countcounter认证耗时记录数
apiserver_tls_handshake_errors_totalcountertls握手失败计数
apiserver_client_certificate_expiration_seconds_sumgauge证书过期时间总数
apiserver_client_certificate_expiration_seconds_countgauge证书过期时间记录个数
apiserver_client_certificate_expiration_seconds_bucketgauge证书过期时间分布
apiserver_current_inflight_requestsgaugeAPIServer当前处理的请求数。包括ReadOnly和Mutating两种
apiserver_current_inqueue_requestsgauge是一个表向量, 记录最近排队请求数量的高水位线apiserver请求限流
apiserver_flowcontrol_current_executing_requestsgauge记录包含执行中(不在队列中等待)请求的瞬时数量APF api的QOS APIPriorityAndFairness
apiserver_flowcontrol_current_inqueue_requestsgauge记录包含排队中的(未执行)请求的瞬时数量
workqueue_adds_totalcounterwq 入队数
workqueue_retries_totalcounterwq retry数
workqueue_longest_running_processor_secondsgaugewq中最长运行时间
workqueue_queue_duration_seconds_sumgaugewq中等待延迟记录和
workqueue_queue_duration_seconds_countgaugewq中等待延迟记录数
workqueue_work_duration_seconds_sumgaugewq中处理延迟记录和
workqueue_work_duration_seconds_countgaugewq中处理延迟记录数
upGauge服务可用性,1 表示服务可用,0 表示服务不可用

关键指标

$interval 表示间隔时间,例如 5m $quantile 0 ≤ 值 ≤ 1,用于计算当前样本数据值的分布情况,当值为 0.5 时,即表示找到当前样本数据中的中位数

名称PromQL说明
API QPSsum (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_bytesgaugedb物理文件大小
etcd_object_countsgaugeetcd对象按种类计数
etcd_request_duration_seconds_sumgaugeetcd请求延迟记录和
etcd_request_duration_seconds_countgaugeetcd请求延迟记录数

kube-scheduler 指标说明

指标名类型含义说明
scheduler_e2e_scheduling_duration_seconds_sumgauge端到端调度延迟记录和
scheduler_e2e_scheduling_duration_seconds_countgauge端到端调度延迟记录数
scheduler_pod_scheduling_duration_seconds_sumgauge调度延迟记录和分析次数
scheduler_pod_scheduling_duration_seconds_countgauge调度延迟记录数
scheduler_pending_podsgauge调度队列pending pod数
scheduler_queue_incoming_pods_totalcounter进入调度队列pod数
scheduler_scheduling_algorithm_duration_seconds_sumgauge调度算法延迟记录和
scheduler_scheduling_algorithm_duration_seconds_countgauge调度算法延迟记录数
scheduler_pod_scheduling_attempts_sumgauge成功调度一个pod 的尝试次数记录和
scheduler_pod_scheduling_attempts_countgauge成功调度一个pod 的尝试次数记录数

coredns 指标说明

指标名类型含义说明
coredns_dns_requests_totalcounter解析请求数A记录,AAAA记录,other记录
coredns_dns_responses_totalcounter解析响应数NOERROR,NXDOMAIN,REFUSED
coredns_cache_entriesgauge缓存记录数成功或失败
coredns_cache_hits_totalcounter缓存命中数成功或失败
coredns_cache_misses_totalcounter缓存未命中数成功或失败
coredns_dns_request_duration_seconds_sumgauge解析延迟记录和
coredns_dns_request_duration_seconds_countgauge解析延迟记录数
coredns_dns_response_size_bytes_sumgauge解析响应大小记录和
coredns_dns_response_size_bytes_countgauge解析响应大小记录数

kube-stats-metrics 指标说明

pod metrics

指标名类型含义
kube_pod_status_phasegaugepod状态统计:Pending,Succeeded,Failed,Running,Unknown
kube_pod_container_status_waitingcounterpod处于waiting状态,值为1代表waiting
kube_pod_container_status_waiting_reasongaugepod处于waiting状态原因:ContainerCreating,CrashLoopBackOff pod启动崩溃,再次启动然后再次崩溃,CreateContainerConfigError,ErrImagePull,ImagePullBackOff,CreateContainerError,InvalidImageName
kube_pod_container_status_terminatedgaugepod处于terminated状态,值为1代表terminated
kube_pod_container_status_terminated_reasongaugepod处于terminated状态原因:OOMKilled,Completed,Error,ContainerCannotRun,DeadlineExceeded,Evicted
kube_pod_container_status_restarts_totalcounterpod中的容器重启次数
kube_pod_container_resource_requests_cpu_coresgaugepod容器cpu limit
kube_pod_container_resource_requests_memory_bytesgaugepod容器mem limit(单位:字节)

deployment metrics

指标名类型含义
kube_deployment_status_replicasgaugedep中的pod num
kube_deployment_status_replicas_availablegaugedep中的 可用pod num
kube_deployment_status_replicas_unavailablegaugedep中的 不可用pod num

daemonSet metrics

指标名类型含义
kube_daemonset_status_number_availablegaugeds 可用数
kube_daemonset_status_number_unavailablegaugeds 不可用数
kube_daemonset_status_number_readygaugeds ready数
kube_daemonset_status_number_misscheduledgauge未经过调度运行ds的节点数
kube_daemonset_status_current_number_scheduledgaugeds目前运行节点数
kube_daemonset_status_desired_number_scheduledgauge应该运行ds的节点数

daemonSet metrics

指标名类型含义
kube_statefulset_status_replicasgaugess副本总数
kube_statefulset_status_replicas_currentgaugess当前副本数
kube_statefulset_status_replicas_updatedgaugess已更新副本数
kube_statefulset_replicasgaugess目标副本数

Job metrics

指标名类型含义
kube_job_status_activegaugejob running pod数
kube_job_status_succeededgaugejob 成功 pod数
kube_job_status_failedgaugejob 失败 pod数
kube_job_completegaugejob 是否完成
kube_job_failedgaugejob 是否失败

CronJob metrics

指标名类型含义
kube_cronjob_status_activegaugejob running pod数
kube_cronjob_spec_suspendgauge=1代表 job 被挂起
kube_cronjob_next_schedule_timegaugejob 下次调度时间
kube_cronjob_status_last_schedule_timegaugejob 下次调度时间

PersistentVolume metrics

指标名类型含义
kube_persistentvolume_capacity_bytesgaugepv申请大小
kube_persistentvolume_status_phasegaugepv状态:Pending,Available,Bound,Released,Failed

PersistentVolumeClaim metrics

指标名类型含义
kube_persistentvolumeclaim_resource_requests_storage_bytesgaugepvc request大小
kube_persistentvolumeclaim_status_phasegaugepvc状态:Lost,Bound,Pending

node metrics 指标说明

指标名类型含义
kube_node_status_conditiongaugecondition:NetworkUnavailable,MemoryPressure,DiskPressure,PIDPressure,Ready
kube_node_status_allocatable_cpu_coresgauge节点可以分配cpu核数
kube_node_status_allocatable_memory_bytesgauge节点可以分配内存总量(单位:字节)
kube_node_spec_taintgauge节点污点情况
kube_node_status_capacity_memory_bytesgauge节点内存总量(单位:字节)
kube_node_status_capacity_cpu_coresgauge节点cpu核数
kube_node_status_capacity_podsgauge节点可运行的pod总数