Skip to content

Latest commit

 

History

History
82 lines (65 loc) · 5.48 KB

02_k8s监控指标讲解.md

File metadata and controls

82 lines (65 loc) · 5.48 KB

指标分析

下面只给出了部分指标的解读

容器基础资源指标

cpu

  • cpu 在Kubernetes中CPU属于可压缩资源,意思是pod中服务使用CPU超过设置的limits,pod不会被kill掉但会被限制。所以我们应该通过观察容器CPU被限制的情况来考虑是否将CPU的limit调大。
  • 有这样的两个CPU指标,container_``CPU``_cfs_periods_total代表 container生命周期中度过的CPU周期总数,container_``CPU``_cfs_throttled_periods_total代表container生命周期中度过的受限的CPU周期总数。
  • 所以我们可以使用下面的表达式来查出最近5分钟,超过25%的CPU执行周期受到限制的container有哪些。
 100 * sum by(container_name, pod_name, namespace) (increase(container_CPU_cfs_throttled_periods_total{container_name!=""}[5m]))
/ sum by(container_name, pod_name, namespace) (increase(container_CPU_cfs_periods_total[5m])) > 25
  • 我们可以用下面的计算方式表示容器CPU使用率,其中container_``CPU``_usage_seconds_total代表CPU的计数器,container_spec_``CPU``_quota是容器的CPU配额,它的值是容器指定的CPU个数*100000。
sum(rate(container_CPU_usage_seconds_total{image!=""}[1m])) by (container, pod) / (sum(container_spec_CPU_quota{image!=""}/100000) by (container, pod) )* 100

mem

  • 在Kubernetes中mem属于不可压缩资源,pod之间是无法共享的,完全独占的。所以一旦容器内存使用超过limits,会导致oom,然后重新调度。
  • container_memory_working_set_bytes是容器真实使用的内存量, kubelet通过比较container_memory_working_set_bytescontainer_spec_memory_limit_bytes来决定oom container。
  • 同时还有container_memory_usage_bytes用来表示容器使用内存,其中包含了很久没用的缓存,该值比container_memory_working_set_bytes要大
  • 所以内存使用率可以使用下面的公式计算
(container_memory_working_set_bytes/container_spec_memory_limit_bytes )*100

k8s对象资源指标

pod状态

下面的表格中一系列指标描述容器的运行状态。

指标名 含义 标签举例
kube_pod_status_phase 容器当前的运行状态,非Running的都是异常的。 Pending
Succeeded
Failed
Running
Unknown
kube_pod_container_status_waiting 容器处于waiting状态 值为1代表waiting
kube_pod_container_status_waiting_reason pod处于waiting状态原因 ContainerCreating
CrashLoopBackOff pod启动崩溃,再次启动然后再次崩溃
CreateContainerConfigError
ErrImagePull
ImagePullBackOff
CreateContainerError
InvalidImageName
kube_pod_container_status_terminated pod处于terminated状态 值为1代表terminated
kube_pod_container_status_terminated_reason pod处于terminated状态原因 OOMKilled
Completed
Error
ContainerCannotRun
DeadlineExceeded
Evicted
kube_pod_container_status_restarts_total pod中的容器重启次数 -
  • 下面给出一些经常使用的告警。

  • 比如查看下因为拉取镜像失败导致waiting的容器kube_pod_container_status_waiting_reason{reason="ErrImagePull"}==1

  • 查看下发生oom的容器kube_pod_container_status_last_terminated_reason{reason="OOMKilled"}==1

  • 最近十分钟内有重启(kube_pod_container_status_restarts_total - kube_pod_container_status_restarts_total offset 10m >= 1)

node状态

  • 那么站在Kubernetes集群管理员的角度,也需要关心下node整体的资源情况。
指标名 含义 标签举例
kube_node_status_condition node节点的运行状态,非Ready都是异常
同时可以看到因为哪种资源压力导致的
condition:
NetworkUnavailable
MemoryPressure
DiskPressure
PIDPressure
Ready
kube_node_status_allocatable_CPU_cores 节点可以分配CPU核数
kube_node_status_allocatable_memory_bytes 节点可以分配内存总量(单位:字节)
kube_node_spec_taint 节点污点情况
  • 下面给出一些经常使用的告警。

  • 比如查看节点因为内存有压力不可用kube_node_status_condition{condition="MemoryPressure",status="true"}==1

其他资源的常见指标

  • dep 副本数不正常 kube_deployment_spec_replicas!= kube_deployment_status_replicas_available
  • daemonset中不可用的数量 :kube_daemonset_status_number_unavailable > 0来表示
  • 可以使用kube_job_failed > 0来表示失败的job
  • 在kube-state-metrics中还有很多其他对象的指标,你可以自行查阅使用。

k8s服务组件指标

四大黄金指标

延迟、请求qps、错误数、饱和度

指标

  • apiserver 错误率:100 - 100 * sum(rate(apiserver_request_total{job="kubernetes-apiservers",code=~"2.."}[5m])) /sum(rate(apiserver_request_total{job="kubernetes-apiservers"}[5m]))
  • apiserver 延迟:histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers"}[5m])) by (verb, le))
  • etcd存储空间使用率:(etcd_mvcc_db_total_size_in_bytes / etcd_server_quota_backend_bytes)*100
  • 成功调度一个pod 的平均尝试次数:scheduler_pod_scheduling_attempts_sum/scheduler_pod_scheduling_attempts_count代表

pod业务埋点指标

各个业务自行决定即可。