Prometheus Operator 常用指標


說明:本文為轉載文章,轉自

Prometheus Operator 安裝完成后會有很多默認的監控指標,一不注意就大量的報警產生,所以我們非常有必要了解下這些常用的監控指標,有部分指標很有可能對於我們自己的業務可有可無,所以可以適當的進行修改,這里我們就來對常用的幾個指標進行簡單的說明。

1. Kubernetes 資源相關

1.1 CPUThrottlingHigh

關於 CPU 的 limit 合理性指標。查出最近5分鍾,超過25%的 CPU 執行周期受到限制的容器。表達式:

sum(increase(container_cpu_cfs_throttled_periods_total{container!="", }[5m])) by (container, pod, namespace)
          /
sum(increase(container_cpu_cfs_periods_total{}[5m])) by (container, pod, namespace)
          > ( 25 / 100 )

相關指標:

  • container_cpu_cfs_periods_total:容器生命周期中度過的 cpu 周期總數
  • container_cpu_cfs_throttled_periods_total:容器生命周期中度過的受限的 cpu 周期總數

1.2 KubeCPUOvercommit

集群 CPU 過度使用。CPU 已經過度使用無法容忍節點故障,節點資源使用的總量超過節點的 CPU 總量,所以如果有節點故障將影響集群資源運行因為所需資源將無法被分配。

表達式:

sum(namespace:kube_pod_container_resource_requests_cpu_cores:sum{})
          /
sum(kube_node_status_allocatable_cpu_cores)
          >
(count(kube_node_status_allocatable_cpu_cores)-1) / count(kube_node_status_allocatable_cpu_cores)

相關指標:

  • kube_pod_container_resource_requests_cpu_cores:資源 CPU 使用的 cores 數量
  • kube_node_status_allocatable_cpu_cores:節點 CPU cores 數量

1.3 KubeMemoryOvercommit

集群內存過度使用。內存已經過度使用無法容忍節點故障,節點資源使用的總量超過節點的內存總量,所以如果有節點故障將影響集群資源運行因為所需資源將無法被分配。表達式:

sum(namespace:kube_pod_container_resource_requests_memory_bytes:sum{})
          /
        sum(kube_node_status_allocatable_memory_bytes)
          >
        (count(kube_node_status_allocatable_memory_bytes)-1)
          /
        count(kube_node_status_allocatable_memory_bytes)

相關指標:

  • kube_pod_container_resource_requests_memory_bytes:資源內存使用的量
  • kube_node_status_allocatable_memory_bytes:節點內存量

1.4 KubeCPUQuotaOvercommit

集群CPU是否超分。查看 CPU 資源分配的額度是否超過進群總額度 表達式:

sum(kube_pod_container_resource_limits_cpu_cores{job="kube-state-metrics"})
          /
        sum(kube_node_status_allocatable_cpu_cores)
          > 1.1

相關指標:

  • kube_pod_container_resource_limits_cpu_cores:資源分配的 CPU 資源額度
  • kube_node_status_allocatable_cpu_cores:節點 CPU 總量

1.5 KubeMemoryQuotaOvercommit

集群超分內存,查看內存資源分配的額度是否超過進群總額度 表達式:

sum(kube_pod_container_resource_limits_memory_bytes{job="kube-state-metrics"})
          /
        sum(kube_node_status_allocatable_memory_bytes{job="kube-state-metrics"})
          > 1.1

相關指標:

  • kube_pod_container_resource_limits_memory_bytes:資源配額內存量
  • kube_node_status_allocatable_memory_bytes:節點內存量

1.6 KubeMEMQuotaExceeded

命名空間級內存資源使用的比例,關乎資源配額。當使用 request 和 limit 限制資源時,使用值和最大值還是有一點區別,當有 request 時說明最低分配了這么多資源。需要注意當 request 等於 limit 時那么說明資源已經是100%已經分配使用當監控告警發出的時候需要區分。表達式:

sum (kube_pod_container_resource_requests_memory_bytes{job="kube-state-metrics"} ) by (namespace)/ (sum(kube_pod_container_resource_limits_memory_bytes{job="kube-state-metrics"}) by (namespace)) > 0.8

相關指標:

  • kube_pod_container_resource_requests_memory_bytes:內存資源使用量
  • kube_pod_container_resource_limits_memory_bytes:內存資源最大值

1.7 KubeCPUQuotaExceeded

命名空間級 CPU 資源使用的比例,關乎資源配額。當使用 request 和 limit 限制資源時,使用值和最大值還是有一點區別,當有 request 時說明最低分配了這么多資源。需要注意當 request 等於 limit 時那么說明資源已經是100%已經分配使用當監控告警發出的時候需要區分。

表達式:

sum (kube_pod_container_resource_requests_cpu_cores{job="kube-state-metrics"} ) by (namespace)/ (sum(kube_pod_container_resource_limits_cpu_cores{job="kube-state-metrics"}) by (namespace)) > 0.8

相關指標:

  • kube_pod_container_resource_requests_cpu_cores:CPU 使用量
  • kube_pod_container_resource_limits_cpu_cores:CPU 限額最大值

2. Kubernetes 存儲相關

2.1 KubePersistentVolumeFillingUp

PVC 容量監控

表達式:

kubelet_volume_stats_available_bytes{job="kubelet", metrics_path="/metrics"}
          /
        kubelet_volume_stats_capacity_bytes{job="kubelet", metrics_path="/metrics"}
          < 0.3

相關指標:

  • kubelet_volume_stats_available_bytes:剩余空間
  • kubelet_volume_stats_capacity_bytes:空間總量

2.2 KubePersistentVolumeFillingUp

磁盤空間耗盡預測:通過PVC資源使用6小時變化率預測 接下來4天的磁盤使用率

表達式:

(kubelet_volume_stats_available_bytes{job="kubelet", metrics_path="/metrics"}
            /
          kubelet_volume_stats_capacity_bytes{job="kubelet", metrics_path="/metrics"}
        ) < 0.4
        and
        predict_linear(kubelet_volume_stats_available_bytes{job="kubelet", metrics_path="/metrics"}[6h], 4 * 24 * 3600) < 0

相關指標:

  • kubelet_volume_stats_available_bytes:剩余空間
  • kubelet_volume_stats_capacity_bytes:空間總量

2.3 KubePersistentVolumeErrors

PV 使用狀態監控。

表達式:

kube_persistentvolume_status_phase{phase=~"Failed|Pending",job="kube-state-metrics"}

相關指標:

  • kube_persistentvolume_status_phase:PV 使用狀態

3. kubernetes system 相關

3.1 KubeVersionMismatch

組件版本與當前集群版本是否有差異。對比組件版本是否有差異,默認為1 。

表達式:

count(count by (gitVersion) (label_replace(kubernetes_build_info{job!~"kube-dns|coredns"},"gitVersion","$1","gitVersion","(v[0-9]*.[0-9]*.[0-9]*).*")))

相關指標:

  • kubernetes_build_info:獲取組件信息

3.2 KubeClientErrors

客戶端訪問某些接口的錯誤率。

表達式:

(sum(rate(rest_client_requests_total{code=~"5.."}[5m])) by (instance, job)
          /
        sum(rate(rest_client_requests_total[5m])) by (instance, job))
        > 0.01

相關指標:

  • rest_client_requests_total:狀態碼

4. APIServer 相關

4.1 KubeAPIErrorsHigh

APIServer 請求錯誤率。5分鍾內 APIServer 請求錯誤率。

表達式:

sum(rate(apiserver_request_total{job="apiserver",code=~"5.."}[5m])) by (resource,subresource,verb)
          /
        sum(rate(apiserver_request_total{job="apiserver"}[5m])) by (resource,subresource,verb) > 0.05

相關指標:

  • apiserver_request_total:APIServer 請求數

4.2 KubeClientCertificateExpiration

kubelet 客戶端證書過期。監測證書狀態30天告警和7天告警。

表達式:

apiserver_client_certificate_expiration_seconds_count{job="apiserver"} > 0 and on(job) histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job="apiserver"}[5m]))) < 2592000
apiserver_client_certificate_expiration_seconds_count{job="apiserver"} > 0 and on(job) histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job="apiserver"}[5m]))) < 604800

相關指標:

  • apiserver_client_certificate_expiration_seconds_count:證書有效剩余時間

4.3 AggregatedAPIErrors

自定義注冊的 APIServer 服務可用性監控,當檢測到自定義注冊的 APIServer 五分鍾不用次數達到2次。

表達式:

sum by(name, namespace)(increase(aggregator_unavailable_apiservice_count[5m])) > 2

相關指標:

  • aggregator_unavailable_apiservice_count:監測自定義注冊的 APIService 不可用次數。

4.4 KubeAPIDown

APIserver 失聯,監控 APIServer 服務,失聯原因可能是服務 down 還可能是網絡出現狀況。

表達式:

absent(up{job="apiserver"} == 1)

5. kubelet 相關

5.1 KubeNodeNotReady

節點是否處於就緒狀態。檢測節點是否為就緒狀態,或者可能是 kubelet 服務down 了。

表達式:

kube_node_status_condition{job="kube-state-metrics",condition="Ready",status="true"} == 0

相關指標:

  • kube_node_status_condition:節點狀態監測

5.2 KubeNodeUnreachable

節點狀態為 Unreachable。

表達式:

kube_node_spec_unschedulable{job="kube-state-metrics"} == 1

5.3 KubeletTooManyPods

節點運行過多的 Pod,監測節點上運行的 Pods 數量。

表達式:

max(max(kubelet_running_pod_count{job="kubelet", metrics_path="/metrics"}) by(instance) * on(instance) group_left(node) kubelet_node_name{job="kubelet", metrics_path="/metrics"}) by(node) / max(kube_node_status_capacity_pods{job="kube-state-metrics"} != 1) by(node) > 0.95

相關指標:

  • kubelet_running_pod_count:節點運行的 Pods 數量
  • kubelet_node_name:節點名稱
  • kube_node_status_capacity_pods:節點可運行的最大 Pod 數量

5.4 KubeNodeReadinessFlapping

監測集群狀態,查看集群內節點狀態改變的頻率。

表達式:

sum(changes(kube_node_status_condition{status="true",condition="Ready"}[15m])) by (node) > 2

5.5 KubeletDown

監控 kubelet 服務,down 或者網絡出現問題。

表達式:

absent(up{job="kubelet", metrics_path="/metrics"} == 1)

6. 集群組件

6.1 KubeSchedulerDown

KubeScheduler 失聯,監測 KubeScheduler 是否正常。

表達式:

absent(up{job="kube-scheduler"} == 1)

6.2 KubeControllerManagerDown

監測 KubeControllerManager 服務,Down 或者網絡不通。

表達式:

absent(up{job="kube-controller-manager"} == 1)

7. 應用相關

7.1 KubePodCrashLooping

Pod 重啟時間,重啟時間超過3m告警。

表達式:

rate(kube_pod_container_status_restarts_total{job="kube-state-metrics"}[5m]) * 60 * 3 > 0

相關指標:

  • kube_pod_container_status_restarts_total:重啟狀態0為正常

7.2 KubePodNotReady

Pods 沒有就緒,檢測 Pod 是否就緒。

表達式:

 sum by (namespace, pod) (max by(namespace, pod) (kube_pod_status_phase{job="kube-state-metrics", phase=~"Pending|Unknown"}) * on(namespace, pod) group_left(owner_kind) max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!="Job"})) > 0

相關指標:

  • kube_pod_status_phase:Pod 狀態

7.3 KubeDeploymentGenerationMismatch

Deployment 部署失敗,Deployment 生成的資源與定義的資源不匹配。

表達式:

kube_deployment_status_observed_generation{job="kube-state-metrics"}
          !=
        kube_deployment_metadata_generation{job="kube-state-metrics"}

相關指標:

  • kube_deployment_status_observed_generation:Deployment 生成資源數
  • kube_deployment_metadata_generation:Deployment 定義資源數

7.4 KubeDeploymentReplicasMismatch

查看 Deplyment 副本是否達到預期。

表達式:

(
          kube_deployment_spec_replicas{job="kube-state-metrics"}
            !=
          kube_deployment_status_replicas_available{job="kube-state-metrics"}
        ) and (
          changes(kube_deployment_status_replicas_updated{job="kube-state-metrics"}[3m])
            ==
          0
        )

相關指標:

  • kube_deployment_spec_replicas 資源定義副本數
  • kube_deployment_status_replicas_available 正在運行副本數
  • kube_deployment_status_replicas_updated 更新的副本數

7.5 KubeStatefulSetReplicasMismatch

監測 StatefulSet 副本是否達到預期。

表達式:

(
          kube_statefulset_status_replicas_ready{job="kube-state-metrics"}
            !=
          kube_statefulset_status_replicas{job="kube-state-metrics"}
        ) and (
          changes(kube_statefulset_status_replicas_updated{job="kube-state-metrics"}[5m])
            ==
          0
        )

相關指標:

  • kube_statefulset_status_replicas_ready:就緒副本數
  • kube_statefulset_status_replicas:當前副本數
  • kube_statefulset_status_replicas_updated:更新的副本數

7.6 KubeStatefulSetUpdateNotRolledOut

StatefulSet 更新失敗且未回滾,對比版本號和副本數。

表達式:

max without (revision) (
          kube_statefulset_status_current_revision{job="kube-state-metrics"}
            unless
          kube_statefulset_status_update_revision{job="kube-state-metrics"}
        )
          *
        (
          kube_statefulset_replicas{job="kube-state-metrics"}
            !=
          kube_statefulset_status_replicas_updated{job="kube-state-metrics"}
        )

相關指標:

  • kube_statefulset_status_replicas:每個 StatefulSet 的副本數。
  • kube_statefulset_status_replicas_current:每個 StatefulSet 的當前副本數。
  • kube_statefulset_status_replicas_ready:每個StatefulSet 的就緒副本數。
  • kube_statefulset_status_replicas_updated:每個StatefulSet 的更新副本數。
  • kube_statefulset_status_observed_generation:StatefulSet 控制器觀察到的生成。
  • kube_statefulset_replicas:StatefulSet 所需的副本數。
  • kube_statefulset_metadata_generation:表示 StatefulSet 所需狀態的特定生成的序列號。
  • kube_statefulset_created:創建時間戳。
  • kube_statefulset_labels:Kubernetes 標簽轉換為 Prometheus 標簽。
  • kube_statefulset_status_current_revision:指示用於按順序(0,currentReplicas)生成 Pod 的StatefulSet 的版本。
  • kube_statefulset_status_update_revision:指示用於按順序 [replicas-updatedReplicas,replicas] 生成 Pod 的 StatefulSet 的版本。

7.7 KubeDaemonSetRolloutStuck

監測 DaemonSet 是否處於就緒狀態。

表達式:

kube_daemonset_status_number_ready{job="kube-state-metrics"}
          /
        kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"} < 1.00

相關指標:

  • kube_daemonset_status_number_ready:就緒的 DaemonSet
  • kube_daemonset_status_desired_number_scheduled:應該調度的 DaemonSet 數量

7.8 KubeDaemonSetMisScheduled

DaemonSet 運行在不該運行的節點上面。

表達式:

kube_daemonset_status_number_misscheduled{job="kube-state-metrics"} > 0

相關指標:

  • kube_daemonset_status_number_misscheduled:運行在不該運行的節點狀態

7.9 KubeContainerWaiting

監測哪些容器是在等待狀態的。

表達式:

sum by (namespace, pod, container) (kube_pod_container_status_waiting_reason{job="kube-state-metrics"}) > 0

相關指標:

  • kube_pod_container_status_waiting_reason:容器聲明周期過程中的狀態,無論是創建成功還是失敗都應該是0。

8. 節點相關

8.1 NodeClockNotSynchronising

主機與時間服務器失聯。

表達式:

min_over_time(node_timex_sync_status[5m]) == 0

相關指標:

  • node_timex_sync_status:同步狀態。

8.2 NodeClockSkewDetected

本地時間偏移量。

表達式:

(node_timex_offset_seconds > 0.05
        and
          deriv(node_timex_offset_seconds[5m]) >= 0
        )
        or
        (
          node_timex_offset_seconds < -0.05
        and
          deriv(node_timex_offset_seconds[5m]) <= 0)

相關指標:

  • node_timex_offset_seconds:誤差

8.3 NodeHighNumberConntrackEntriesUsed

鏈接狀態跟蹤。

表達式:

(node_nf_conntrack_entries / node_nf_conntrack_entries_limit) > 0.75

相關指標:

  • node_nf_conntrack_entries:鏈接狀態跟蹤表分配的數量
  • node_nf_conntrack_entries_limit:表總量

8.4 NodeNetworkReceiveErrs

網卡接收錯誤量。

表達式:

increase(node_network_receive_errs_total[2m]) > 10

相關指標:

  • node_network_receive_errs_total:接收錯誤總量

8.5 NodeNetworkTransmitErrs

網卡傳輸錯誤量。

表達式:

increase(node_network_transmit_errs_total[2m]) > 10

相關指標:

  • node_network_transmit_errs_total:傳輸錯誤總量

8.6 NodeFilesystemAlmostOutOfFiles

inode 數量監測 表達式:

(
          node_filesystem_files_free{job="node-exporter",fstype!=""} / node_filesystem_files{job="node-exporter",fstype!=""} * 100 < 5
        and
          node_filesystem_readonly{job="node-exporter",fstype!=""} == 0
        )

相關指標:

  • node_filesystem_files_free:空閑的 inode
  • node_filesystem_files:inodes 總量

8.7 NodeFilesystemFilesFillingUp

inode 耗盡預測,以6小時曲線變化預測接下來24小時和4小時可能使用的 inodes。

表達式:

(node_filesystem_files_free{job="node-exporter",fstype!=""} / node_filesystem_files{job="node-exporter",fstype!=""} * 100 < 20
        and
          predict_linear(node_filesystem_files_free{job="node-exporter",fstype!=""}[6h], 4*60*60) < 0
        and
          node_filesystem_readonly{job="node-exporter",fstype!=""} == 0)

相關指標:

  • node_filesystem_files_free:空閑的 inode
  • node_filesystem_files:inodes 總量

8.8 NodeFilesystemAlmostOutOfSpace

分區容量使用率。

表達式:

(node_filesystem_avail_bytes{job="node-exporter",fstype!=""} / node_filesystem_size_bytes{job="node-exporter",fstype!=""} * 100 < 10
        and
          node_filesystem_readonly{job="node-exporter",fstype!=""} == 0
        )

相關指標:

  • node_filesystem_avail_bytes:空閑容量
  • node_filesystem_size_bytes:總容量

8.9 NodeFilesystemSpaceFillingUp

分區容量耗盡預測,以6小時曲線變化預測接下來24小時和4小時可能使用的容量。

表達式:

(node_filesystem_avail_bytes{job="node-exporter",fstype!=""} / node_filesystem_size_bytes{job="node-exporter",fstype!=""} * 100 < 15
        and
          predict_linear(node_filesystem_avail_bytes{job="node-exporter",fstype!=""}[6h], 4*60*60) < 0
        and
          node_filesystem_readonly{job="node-exporter",fstype!=""} == 0)

相關指標:

  • node_filesystem_avail_bytes:空閑容量
  • node_filesystem_size_bytes:總容量

9. Etcd 相關

9.1 Etcdlived

etcd 存活檢測。

表達式:

up{job="etcd"} < 1

9.2 EtcdCluseterUnavailable

etcd 集群健康檢查,down 數量大於集群可允許故障數量。

表達式:

count(up{job="etcd"} == 0) > (count(up{job="etcd"}) / 2 - 1)

9.3 EtcdLeaderCheck

檢查 leader。

表達式:

max(etcd_server_has_leader) != 1

9.4 EtcdBackendFsync

etcd io 監測,后端提交 延時。

表達式:

histogram_quantile(0.99, sum(rate(etcd_disk_backend_commit_duration_seconds_bucket[5m])) by (instance, le)) > 100

9.5 EtcdWalFsync

etcd io 監測,文件同步到磁盤延時。

表達式:

histogram_quantile(0.99, sum(rate(etcd_disk_wal_fsync_duration_seconds_bucket[5m])) by (instance, le)) > 100

9.6 EtcdDbSize

檢測數據庫大小。

表達式:

etcd_debugging_mvcc_db_total_size_in_bytes/1024/1024 > 1024

9.7 EtcdGrpc

Grpc 調用速率。表達式:

sum(rate(grpc_server_handled_total{grpc_type="unary"}[1m])) > 100

10. CoreDNS 相關

10.1 DnsRequest

DNS 查詢速率,每分鍾查詢超過100告警。

表達式:

sum(irate(coredns_dns_request_count_total{zone !="dropped"}[1m])) > 100

相關指標:

  • coredns_dns_request_count_total:總查詢數

10.2 DnsRequestFaild

異常查詢,異常狀態碼,不是 NOERROR。

表達式:

irate(coredns_dns_response_rcode_count_total{rcode!="NOERROR"} [1m]) > 0

相關指標:

  • coredns_dns_response_rcode_count_total:查詢返回狀態碼

DNS-Rcode:

DNS-Rcode 作為 DNS 應答報文中有效的字段,主要用來說明 DNS 應答狀態,是排查。通常常見的 Rcode 值如下:

  • Rcode 值為0,對應的 DNS 應答狀態為 NOERROR,意思是成功的響應,即這個域名解析是成功
  • Rcode 值為2,對應的 DNS 應答狀態為 SERVFAIL,意思是服務器失敗,也就是這個域名的權威服務器拒絕響應或者響應 REFUSE,遞歸服務器返回 Rcode 值為 2 給 CLIENT
  • Rcode 值為3,對應的 DNS 應答狀態為 NXDOMAIN,意思是不存在的記錄,也就是這個具體的域名在權威服務器中並不存在
  • Rcode 值為5,對應的 DNS 應答狀態為 REFUSE,意思是拒絕,也就是這個請求源IP不在服務的范圍內

10.3 DnsPanic

DNS 恐慌值,可能收到攻擊。

表達式:

irate(coredns_panic_count_total[1m]) > 100

其他:

PrometheusOutOfOrderTimestamps Prometheus丟棄帶有亂序時間戳的樣本,可清理
PrometheuRuleFailures	prometheus規則解析失敗,查看是否存在錯誤的規則配置,清理:kube-prometheus-stack-kubelet svc
etcdHighNumberOfFailedGRPCRequests 不操作,當前的etcd-rule規則配置異常,grpc_method!=""Watch"",grpc_service!=""etcdserverpb.Watch"""

參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM