天天看點

K8S體系監控-kube-state-metrics叢集資源監控

kube-state-metrics 名額資料

1、kube-state-metrics說明

kube-state-metrics關注于擷取k8s各種資源的最新狀态,如deployment或者daemonset,之是以沒有把kube-state-metrics納入到metric-server的能力中,是因為他們的關注點本質上是不一樣的。metric-server僅僅是擷取、格式化現有資料,寫入特定的存儲,實質上是一個監控系統。而kube-state-metrics是将k8s的運作狀況在記憶體中做了個快照,并且擷取新的名額,但他沒有能力導出這些名額。

2、Node節點數量監控

PromQL語句:

kube_node_info{instance="10.42.4.65:8080"}      

 說明:可以查詢到K8S叢集對應多少Node節點,可以和實際的節點數比較告警,也可以制作大屏

3、叢集節點狀态錯誤

PromQL語句:

kube_node_status_condition{condition="Ready",status!="true"}==1      

 說明:監控叢集節點狀态是否錯誤,如何值是1就是有錯誤可以告警

4、叢集節狀态是否準備好

PromQL語句:

kube_node_status_condition{condition="Ready",status="true"} == 0      

說明:監控叢集節點狀态是否準備好,有點像kubectl get node擷取的狀态

4.1、叢集節點記憶體或磁盤資源是否短缺

PromQL語句:

kube_node_status_condition{condition=~"OutOfDisk|MemoryPressure|DiskPressure",status!="false"}==1      

5、叢集中存在失敗的PVC監控

PromQL語句:

kube_persistentvolumeclaim_status_phase{phase="Failed"}==1      

 6、叢集中存在啟動失敗的Pod監控

PromQL語句:

kube_pod_status_phase{phase=~"Failed|Unknown"}==1      

7、最近30分鐘内有Pod容器重新開機監控

PromQL語句:

changes(kube_pod_container_status_restarts_total[30m])      

8、節點CPU請求總核數(機關cores)

PromQL語句:

sum(kube_pod_container_resource_requests_cpu_cores{})      

說明:監控容器請求的CPU核心數

9、節點CPU限制總核數

PromQL語句:

sum(kube_pod_container_resource_limits_cpu_cores{})      

10、節點CPU總量

PromQL語句:

sum(kube_node_status_capacity_cpu_cores{})       

11、節點記憶體請求值(bytes 1024/1024/1024後為GB)

PromQL語句:

sum(kube_pod_container_resource_requests_memory_bytes{})/1024/1024/1024      

12、節點記憶體限制值

PromQL語句:

sum(kube_pod_container_resource_limits_memory_bytes{})      

13、節點記憶體總量

PromQL語句:

sum(kube_node_status_capacity_memory_bytes{}/1024/1024/1024)      

14、節點不可用監控

PromQL語句:

sum(kube_node_spec_unschedulable{node=~"$node"})      

15、Pod 的生命周期監控

PromQL語句:

kube_pod_status_phase{phase=~"Pending|Running"} == 1      

說明:kube_pod_status_phase可以統計Pod的數量,phase的值:Running(運作中)Pod 已經綁定到了某個節點,Pod 中所有的容器都已被建立。至少有一個容器仍在運作,或者正處于啟動或重新開機狀态。官網對Pod 的生命周期說明:

​​​ https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/​​ PromQL語句:

sum(kube_pod_status_phase{namespace=~".*", phase="Pending"}==1)      

說明:監控懸決的Pods數量;Pod 已被 Kubernetes 系統接受,但有一個或者多個容器尚未建立亦未運作。此階段包括等待 Pod 被排程的時間和通過網絡下載下傳鏡像的時間

PromQL語句:

sum(kube_pod_status_phase{namespace=~".*", phase="Failed"}==1)      

說明:監控成功終止的Pods數量;Pod 中的所有容器都已終止,并且至少有一個容器是因為失敗終止。也就是說,容器以非 0 狀态退出或者被系統終止

PromQL語句:

sum(kube_pod_status_phase{namespace=~".*", phase="Succeeded"}==1)      

說明:監控成功終止的Pods數量;Pod 中的所有容器都已成功終止,并且不會再重新開機

PromQL語句:

sum(kube_pod_status_phase{namespace=~".*", phase="Unknown"}==1)      

說明:監控未知的Pods數量;因為某些原因無法取得 Pod 的狀态。這種情況通常是因為與 Pod 所在主機通信失敗

16、監控K8S已運作的容器

PromQL語句:

kube_pod_container_status_running{namespace=~".*"}==1      

說明:監控正在運作容器數量;可以繪制K8S叢集的容器數量

17、監控K8S等待建立的容器

PromQL語句:

kube_pod_container_status_waiting{namespace=~".*"}==1      

 說明:監控K8S等待建立的容器;可以監控容器

18、監控K8S停止的容器

PromQL語句:

kube_pod_container_status_terminated{namespace=~".*"}==1      

說明:監控K8S停止的容器;可以監控容器

19、監控作業中心成功數

PromQL語句:

sum(kube_job_status_succeeded{namespace=~".*"})      

說明:監控作業中心成功數;可以監控作業執行的成功數

20、監控每個部署的副本數

PromQL語句:

sum(kube_deployment_status_replicas{namespace=~".*"})      

說明:kube_deployment_status_replicas 表示每個部署的副本數,這值是Status.Replicas;

kube_deployment_spec_replicas表示部署所需的吊艙數。這值是Spec.Replicas資源定義副本數

kube_deployment_status_replicas_available 正在運作副本數

kube_deployment_status_replicas_updated 更新的副本數

kube_deployment_status_replicas_unavailable 不可用的副本數

21、叢集磁盤使用率

PromQL語句:

(sum (node_filesystem_size_bytes{nodename=~".*"}) - sum (node_filesystem_free_bytes{nodename=~".*"})) / sum (node_filesystem_size_bytes{nodename=~".*"})      

說明:監控K8S叢集磁盤使用率

22、叢集監控磁盤卷可用空間的

PromQL語句:

kubelet_volume_stats_available_bytes / kubelet_volume_stats_capacity_bytes * 100 < 10      

說明:監控K8S監控磁盤卷可用空間的,小于10就告警

23、叢集監控預測磁盤卷7天是否滿

PromQL語句:

predict_linear(kubelet_volume_stats_available_bytes[1h], 7 * 24 * 3600) < 0      

說明:監控K8S叢集監控預測磁盤卷7天是否滿,小于0就告警

24、叢集監控PV使用狀态監控

PromQL語句:

kube_persistentvolume_status_phase{phase=~"Failed|Pending"} > 0      

kube_persistentvolume_status_phase:PV使用狀态

說明:監控K8S叢集監控PV使用狀态,大于0就告警

25、叢集監控StatefulSet是否down

PromQL語句:

(kube_statefulset_status_replicas_ready / kube_statefulset_status_replicas_current) != 1      

說明:監控K8S叢集StatefulSet是否down,不于1就告警

26、叢集監控HPA動态伸縮異常

PromQL語句:

(sum(kube_hpa_status_condition{condition="ScalingLimited",status="true"}) by (hpa,namespace)) == 1      

說明:監控K8S叢集HPA動态伸縮異常,等于1就告警

27、叢集監控目前5分鐘POD重新開機的次數

PromQL語句:

rate(kube_pod_container_status_restarts_total[5m]) * 60 * 5 >2      

說明:監控K8S叢集監控目前5分鐘POD重新開機的次數,大于2就告警

28、叢集監控replicaset副本數狀态

PromQL語句:

kube_replicaset_spec_replicas != kube_replicaset_status_ready_replicas      

說明:監控K8S叢集叢集監控replicaset副本數狀态,不等異常

同理:

kube_deployment_spec_replicas != kube_deployment_status_replicas_available      
kube_statefulset_status_replicas_ready != kube_statefulset_status_replicas      
kube_deployment_status_observed_generation != kube_deployment_metadata_generation      
kube_statefulset_status_observed_generation != kube_statefulset_metadata_generation