Kubernetes promtheus-operator收集指标

只愿长相守 提交于 2020-08-13 13:27:53

个人理解.

Kubernetes资源相关:

1 CPUThrottlingHigh
CPU的limit合理性指标
表达式:
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 )
作用: 查出最近5分钟,超过25%的CPU执行周期受到限制的container,使用到kubelet的两个指标
container_cpu_cfs_periods_total:container             生命周期中度过的cpu周期总数
container_cpu_cfs_throttled_periods_total:container   生命周期中度过的受限的cpu周期总数

2 KubeCPUOvercommit 
集群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)
作用: cpu已经无法容忍节点故障,节点资源使用的总量超过节点的CPU总量,所以如果有节点故障将影响集群资源运行因为所需资源将无法被分配
kube_pod_container_resource_requests_cpu_cores   资源CPU使用的cores数量
kube_node_status_allocatable_cpu_cores           节点CPUcores数量

3 KubeMemoryOvercommit
集群MEM过度使用
表达式:
        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)
作用:mem已经无法容忍节点故障,节点资源使用的总量超过节点的CPU总量,所以如果有节点故障将影响集群资源运行因为所需资源将无法被分配
kube_pod_container_resource_requests_memory_bytes   资源MEM使用的量
kube_node_status_allocatable_memory_bytes           节点mem量

4 KubeCPUQuotaOvercommit
集群CPU是否超分
表达式:
        sum(kube_pod_container_resource_limits_cpu_cores{job="kube-state-metrics"})
          /
        sum(kube_node_status_allocatable_cpu_cores)
          > 1.1
作用: 查看CPU资源分配的额度是否超过集群总额度,通常来讲cpu超分比
相关指标:
kube_pod_container_resource_limits_cpu_cores      资源分配的CPU资源额度   
kube_node_status_allocatable_cpu_cores            节点CPU总量
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
作用: 查看MEM资源分配的额度是否超过集群总额度,通常来讲MEM超分比,内存为不可压缩资源,但是在实际使用中分配的内存为一个区间值,所以即便内存不可压缩,那么并不是每个pod都会将内存使用到最大值,所以在这种场景下内存也是可以超分使用
kube_pod_container_resource_limits_memory_bytes    资源配额内存量
kube_node_status_allocatable_memory_bytes          节点内存量

6 KubeMEMQuotaExceeded 
名称空间级内存资源使用的比例,关乎资源配额
表达式:
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
作用: 当使用 request 和 limit 限制资源时,使用值和最大值还是有一点区别,当有request时说明最低分配了这么多资源,我个人理解容器未必使用了这么多,这也是使用top命令时和监控看到的不通

kube_pod_container_resource_requests_memory_bytes    内存资源request量
kube_pod_container_resource_limits_memory_bytes      内存资源limits值
7 KubeCPUQuotaExceeded
名称空间级CPU资源使用的比例,关乎资源配额
表达式:
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
作用:当使用 request 和 limit 限制资源时,使用值和最大值还是有一点区别,当有request时说明最低分配了这么多资源才能启动Pod,但是最大值限制了最小值还是启动的完成的后,pod实际使用的值

kube_pod_container_resource_requests_cpu_cores        CPU requests量
kube_pod_container_resource_limits_cpu_cores          CPU限额limits值

Kubernetes  存储相关

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
作用PVC 容量监控
相关指标:
kubelet_volume_stats_available_bytes          剩余空间
kubelet_volume_stats_capacity_bytes           空间总量

2 KubePersistentVolumeFillingUp
磁盘空间耗尽预测
表达式
        (
          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
作用: 通过PVC资源使用6小时变化率预测 接下来4天的磁盘使用率
相关指标:
kubelet_volume_stats_available_bytes          剩余空间
kubelet_volume_stats_capacity_bytes           空间总量
值得注意 predict_linear 预测函数

3 KubePersistentVolumeErrors
PV 状态监控
表达式:
kube_persistentvolume_status_phase{phase=~"Failed|Pending",job="kube-state-metrics"}
作用 PV 使用状态监测
相关指标:
kube_persistentvolume_status_phase           PV 使用状态

kubernetes-system相关

1 KubeVersionMismatch
组件版本与当前集群版本是否有差异
表达式:
count(count by (gitVersion) (label_replace(kubernetes_build_info{job!~"kube-dns|coredns"},"gitVersion","$1","gitVersion","(v[0-9]*.[0-9]*.[0-9]*).*")))
作用: 对比组件版本是否有差异 默认为1 
相关指标:
kubernetes_build_info                  获取组件信息

2 KubeClientErrors
客户端遇到API错误 错误率
表达式:
        (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            状态码

ApiServer 相关

1 KubeAPILatencyHigh
请求延时
2 KubeAPIErrorsHigh
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
做用: 5分钟内Apiserver请求错误率
相关指标:
apiserver_request_total                 ApiServer 请求状态码

3 KubeClientCertificateExpiration
kubelet 客户端证书过期
表达式: 
       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
作用 : 监测证书状态 30天告警和7天告警
apiserver_client_certificate_expiration_seconds_count     证书有效剩余时间

4 AggregatedAPIErrors 
自定义注册的api service   服务可用性监控
表达式:
sum by(name, namespace)(increase(aggregator_unavailable_apiservice_count[5m])) > 2
作用: 当检测到自定义注册的apiservice 五分钟不用次数达到2次 
相关指标:
aggregator_unavailable_apiservice_count       监测自定义注册的APi service改变次数

5 AggregatedAPIDown
自定注册的API down
表达式:sum by(name, namespace)(sum_over_time(aggregator_unavailable_apiservice[5m])) > 0
作用: 监控自定义API 存活状态
先关指标:
aggregator_unavailable_apiservice         自定义API状态

6 KubeAPIDown
APIserver 失联
表达式:
absent(up{job="apiserver"} == 1)
作用: 监控apiserver 服务,失联原因可能是 服务down 还可能是 网络出现状况

kubelet 相关

1 KubeNodeNotReady 
节点不是 就绪状态
表达式:
kube_node_status_condition{job="kube-state-metrics",condition="Ready",status="true"} == 0
作用: 检测节点是否为就绪状态 ,或者可能是kebelet服务down
kube_node_status_condition        节点状态监测
2 KubeNodeUnreachable 
节点状态为   Unreachable
表达式:
kube_node_spec_unschedulable{job="kube-state-metrics"} == 1
相关指标:
kube_node_spec_taint              节点是否可以调度状态

3 KubeletTooManyPods
节点运行过多pod
表达式:
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
作用: 监测节点上运行的pods数量
相关指标:
kubelet_running_pod_count          节点运行的Pods数量
kubelet_node_name                  节点名称
kube_node_status_capacity_pods     节点可运行的最大pod数量

4 KubeNodeReadinessFlapping 
集群状态 监测
表达式:
sum(changes(kube_node_status_condition{status="true",condition="Ready"}[15m])) by (node) > 2
作用: 查看集群内节点状态改变的频率
kube_node_status_condition         集群节点状态

5 KubeletPlegDurationHigh
表达式:
node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile{quantile="0.99"} >= 10 
相关指标:
node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile    历史周期
6 KubeletPodStartUpLatencyHigh
表达式:
histogram_quantile(0.99, sum(rate(kubelet_pod_worker_duration_seconds_bucket{job="kubelet", metrics_path="/metrics"}[5m])) by (instance, le)) * on(instance) group_left(node) kubelet_node_name{job="kubelet", metrics_path="/metrics"} > 60

7 KubeletDown
kubelet 服务down
absent(up{job="kubelet", metrics_path="/metrics"} == 1)
作用: 监控kubelet服务,down 或者 网络出现问题
up                               是否启动 启动为1 不启动为0

scheduler 相关

1 KubeSchedulerDown
KubeScheduler 失联
表达式:
absent(up{job="kube-scheduler"} == 1)
作用: 监测KubeScheduler  是否正常
相关指标:
up                 up为1 down为0

controller-manager 相关

1 KubeControllerManagerDown
KubeControllerManager down
表达式:
absent(up{job="kube-controller-manager"} == 1)
作用:监测 KubeControllerManager 服务 ,down 或者网络不通
相关指标:
up                     up为1 down为0

prometheus 相关

1 PrometheusBadConfig
prometheus 配置文件出错
表达式
max_over_time(prometheus_config_last_reload_successful{job="prometheus-k8s",namespace="monitoring"}[5m]) == 0
作用: 在修改或者添加配置文件内容需重启服务,当服务重启不成功 说明配置文件出错
prometheus_config_last_reload_successful        服务是否重启成功

2 PrometheusNotificationQueueRunningFull
Prometheus 告警队列 预测
表达式:
          predict_linear(prometheus_notifications_queue_length{job="prometheus-k8s",namespace="monitoring"}[5m], 60 * 30)
        >
          min_over_time(prometheus_notifications_queue_capacity{job="prometheus-k8s",namespace="monitoring"}[5m])
        )
作用: 预测由于告警太多导致队列消耗完
相关指标:
prometheus_notifications_queue_capacity    可承载的队列数

3 PrometheusErrorSendingAlertsToSomeAlertmanagers
告警推送错误率
表达式:
        (
          rate(prometheus_notifications_errors_total{job="prometheus-k8s",namespace="monitoring"}[5m])
        /
          rate(prometheus_notifications_sent_total{job="prometheus-k8s",namespace="monitoring"}[5m])
        )
        * 100
        > 1

        min without(alertmanager) (
          rate(prometheus_notifications_errors_total{job="prometheus-k8s",namespace="monitoring"}[5m])
        /
          rate(prometheus_notifications_sent_total{job="prometheus-k8s",namespace="monitoring"}[5m])
        )
        * 100
        > 3

作用: 产生告警想 alertmanager 推送出错率,达到 1%告警和3%告警
相关指标:
prometheus_notifications_errors_total         推送告警出错数量

4 PrometheusNotConnectedToAlertmanagers
prometheus 与 Alertmanagers 失联
表达式:
max_over_time(prometheus_notifications_alertmanagers_discovered{job="prometheus-k8s",namespace="monitoring"}[5m]) < 1
作用: 监测 prometheus 与 Alertmanagers 连通性, 0 为失联
prometheus_notifications_alertmanagers_discovered         是否连通

5 PrometheusTSDBReloadsFailing
prometheus 从磁盘加载出错
表达式:
increase(prometheus_tsdb_reloads_failures_total{job="prometheus-k8s",namespace="monitoring"}[3h]) > 0
作用: prometheus 从磁盘加载数据出错, 0 为正常 
相关指标:
prometheus_tsdb_reloads_failures_total          加载tsdb状态
6 PrometheusTSDBCompactionsFailing
tsdb 数据压缩挫问题
表达式:
increase(prometheus_tsdb_compactions_failed_total{job="prometheus-k8s",namespace="monitoring"}[3h]) > 0
作用: 接受数据会进行压缩
相关表达式:
prometheus_tsdb_compactions_failed_total        数据压缩状态

7 PrometheusNotIngestingSamples 
prometheus 无法接收数据
表达式:
rate(prometheus_tsdb_head_samples_appended_total{job="prometheus-k8s",namespace="monitoring"}[5m]) <= 0
作用: prometheus 是否正常接受数据,长时间数据量为发生变化则说明不接收数据
相关指标:
prometheus_tsdb_head_samples_appended_total       添加数据量

8 PrometheusDuplicateTimestamps
删除 重复数据
表达式:
rate(prometheus_target_scrapes_sample_duplicate_timestamp_total{job="prometheus-k8s",namespace="monitoring"}[5m]) > 0
作用:删除 带有重复时间戳的样本数据
相关指标:
prometheus_target_scrapes_sample_duplicate_timestamp_total    拥有相同时间戳样本数据

9 PrometheusOutOfOrderTimestamps
丢弃时间戳不争取的样本数据
表达式:
 rate(prometheus_target_scrapes_sample_out_of_order_total{job="prometheus-k8s",namespace="monitoring"}[5m]) > 0
作用: 错误时间戳样本数据
相关表达式:
prometheus_target_scrapes_sample_out_of_order_total         错误时间错样本数据

10 PrometheusRemoteStorageFailures
无法将数据存错到远程存储
表达式:
        (
          rate(prometheus_remote_storage_failed_samples_total{job="prometheus-k8s",namespace="monitoring"}[5m])
        /
          (
            rate(prometheus_remote_storage_failed_samples_total{job="prometheus-k8s",namespace="monitoring"}[5m])
          +
            rate(prometheus_remote_storage_succeeded_samples_total{job="prometheus-k8s",namespace="monitoring"}[5m])
          )
        )
        * 100
        > 1
作用: 监测 数据是否可以存储到远程存储
相关指标:
prometheus_remote_storage_failed_samples_total           远端存储失败的数量
prometheus_remote_storage_succeeded_samples_total        远端存储成功的数量

10 PrometheusRemoteWriteBehind 
存储延时:
 (
          max_over_time(prometheus_remote_storage_highest_timestamp_in_seconds{job="prometheus-k8s",namespace="monitoring"}[5m])
        - on(job, instance) group_right
          max_over_time(prometheus_remote_storage_queue_highest_sent_timestamp_seconds{job="prometheus-k8s",namespace="monitoring"}[5m])
        )
        > 120
作用 写入延迟
11 PrometheusRemoteWriteDesiredShards 
所需实际分片数量大于分配数量
        (
          max_over_time(prometheus_remote_storage_shards_desired{job="prometheus-k8s",namespace="monitoring"}[5m])
        >
          max_over_time(prometheus_remote_storage_shards_max{job="prometheus-k8s",namespace="monitoring"}[5m])
        )
作用: 写入分片 需求高于分配
相关指标:
prometheus_remote_storage_shards_desired              需要分片数量
prometheus_remote_storage_shards_max                  分片总数量

12 PrometheusRuleFailures
无法评估的规则
表达式:
increase(prometheus_rule_evaluation_failures_total{job="prometheus-k8s",namespace="monitoring"}[5m]) > 0
相关指标:
prometheus_rule_evaluation_failures_total            失败规则数量

13 PrometheusMissingRuleEvaluations
确实的规则或者评估规则慢
表达式:
increase(prometheus_rule_group_iterations_missed_total{job="prometheus-k8s",namespace="monitoring"}[5m]) > 0
作用: 监测确实的规则
相关指标:
prometheus_rule_group_iterations_missed_total        规则缺失或评估慢数量

14 AlertmanagerConfigInconsistent
集群配置不同步
表达式:
     count_values("config_hash", alertmanager_config_hash{job="alertmanager-main",namespace="monitoring"}) BY (service) / ON(service) GROUP_LEFT() label_replace(max(prometheus_operator_spec_replicas{job="prometheus-operator",namespace="monitoring",controller="alertmanager"}) by (name, job, namespace, controller), "service", "alertmanager-$1", "name", "(.*)") != 1
作用:监测 Alertmanager集群配置是否同步

15 AlertmanagerFailedReload 
Alertmanager 重新加载失败
表达式:
alertmanager_config_last_reload_successful{job="alertmanager-main",namespace="monitoring"} == 0
作用: 监测 Alertmanager 重新加载状态
相关指标:
alertmanager_config_last_reload_successful       Alertmanager 是否加载成功

16 AlertmanagerMembersInconsistent
Alertmanager  集群成员监测
表达式:
alertmanager_cluster_members{job="alertmanager-main",namespace="monitoring"}
          != on (service) GROUP_LEFT()
        count by (service) (alertmanager_cluster_members{job="alertmanager-main",namespace="monitoring"})
作用: 监测集群成员是否存在
相关指标:
alertmanager_cluster_members               集群成员数量

general 相关

1 TargetDown
部分服务没有 up
表达式:
100 * (count(up == 0) BY (job, namespace, service) / count(up) BY (job,
        namespace, service)) > 10
作用监测 名称空间下的 job namespace 和serveice 是否是up状态
up                         up为1 down为0

node-network 相关

1 NodeNetworkInterfaceFlapping
节点网卡状态改变
表达式:
changes(node_network_up{job="node-exporter",device!~"veth.+"}[2m]) > 2
作用: 监测网卡驱动状态
相关指标:
node_network_up           网卡驱动的状态

prometheus-operator 相关

1 PrometheusOperatorReconcileErrors
协调控制器出错
表达式
 rate(prometheus_operator_reconcile_errors_total{job="prometheus-operator",namespace="monitoring"}[5m]) > 0.1
2 PrometheusOperatorNodeLookupErrors
协调 prometheus 出错
表达式:
rate(prometheus_operator_node_address_lookup_errors_total{job="prometheus-operator",namespace="monitoring"}[5m]) > 0.1

kubernetes-apps 相关

1 KubePodCrashLooping 
pod重启时间
表达式:
rate(kube_pod_container_status_restarts_total{job="kube-state-metrics"}[5m]) * 60 * 3 > 0
作用: 
重启时间超过3m告警
相关指标:
kube_pod_container_status_restarts_total         重启状态  0位正常 

2 KubePodNotReady 
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
作用: 监测pod是否就绪
指标:
kube_pod_status_phase       pod 状态

3 KubeDeploymentGenerationMismatch
deploymet 部署失败
表达式:
 kube_deployment_status_observed_generation{job="kube-state-metrics"}
          !=
        kube_deployment_metadata_generation{job="kube-state-metrics"}
作用: deployment 生成的资源与定义的资源不匹配
kube_deployment_status_observed_generation         deployment生成资源数 
kube_deployment_metadata_generation                deployment定义资源数

4 KubeDeploymentReplicasMismatch
deployment副本数预期未达成
表达式:
        (
          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
        )
作用: 查看deplyment副本是否达到预期
相关指标:
kube_deployment_spec_replicas                     资源定义副本数
kube_deployment_status_replicas_available         正在运行副本数
kube_deployment_status_replicas_updated           更新的副本数
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
        )
作用: 监测StatefulSet副本是否达到预期
先关指标:
kube_statefulset_status_replicas_ready              就绪副本数                 
kube_statefulset_status_replicas                    当前副本数 
kube_statefulset_status_replicas_updated            更新的副本数

6 KubeStatefulSetGenerationMismatch
StatefulSet失败且未回滚
表达式:
        kube_statefulset_status_observed_generation{job="kube-state-metrics"}
          !=
        kube_statefulset_metadata_generation{job="kube-state-metrics"}

StatefulSet 倒序更新,对比更新的量和总量
kube_statefulset_status_replicas #Gauge类型,每个StatefulSet的副本数。
kube_statefulset_status_replicas_current #Gauge类型,每个StatefulSet的当前副本数。
kube_statefulset_status_replicas_ready #Gauge类型,每个StatefulSet的就绪副本数。
kube_statefulset_status_replicas_updated #Gauge类型,每个StatefulSet的更新副本数。
kube_statefulset_status_observed_generation #Gauge类型,StatefulSet控制器观察到的生成。
kube_statefulset_replicas #Gauge类型,StatefulSet所需的pod数。
kube_statefulset_metadata_generation #Gauge类型,表示StatefulSet所需状态的特定生成的序列号。
kube_statefulset_created #Gauge类型,Unix创建时间戳。
kube_statefulset_labels #Gauge类型,Kubernetes标签转换为Prometheus标签。
kube_statefulset_status_current_revision #Gauge类型,指示用于按顺序[0,currentReplicas)生成Pod的StatefulSet的版本。
kube_statefulset_status_update_revision #Gauge类型,指示用于按顺序[replicas-updatedReplicas,replicas]生成Pod的StatefulSet的版本。

7 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 #Gauge类型,每个StatefulSet的副本数。
kube_statefulset_status_replicas_current #Gauge类型,每个StatefulSet的当前副本数。
kube_statefulset_status_replicas_ready #Gauge类型,每个StatefulSet的就绪副本数。
kube_statefulset_status_replicas_updated #Gauge类型,每个StatefulSet的更新副本数。
kube_statefulset_status_observed_generation #Gauge类型,StatefulSet控制器观察到的生成。
kube_statefulset_replicas #Gauge类型,StatefulSet所需的pod数。
kube_statefulset_metadata_generation #Gauge类型,表示StatefulSet所需状态的特定生成的序列号。
kube_statefulset_created #Gauge类型,Unix创建时间戳。
kube_statefulset_labels #Gauge类型,Kubernetes标签转换为Prometheus标签。
kube_statefulset_status_current_revision #Gauge类型,指示用于按顺序[0,currentReplicas)生成Pod的StatefulSet的版本。
kube_statefulset_status_update_revision #Gauge类型,指示用于按顺序[replicas-updatedReplicas,replicas]生成Pod的StatefulSet的版本。
8 KubeDaemonSetRolloutStuck
DaemonSet 部分Pod准备就绪 
表达式:
        kube_daemonset_status_number_ready{job="kube-state-metrics"}
          /
        kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"} < 1.00
作用: 监测DaemonSet 就绪状态
指标:
kube_daemonset_status_number_ready                       就绪的DaemonSet 
kube_daemonset_status_desired_number_scheduled           应该调度的DaemonSet数量 

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

10 KubeDaemonSetNotScheduled
DaemonSet 未被调度成功
表达式:
        kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"}
          -
        kube_daemonset_status_current_number_scheduled{job="kube-state-metrics"} > 0
作用:查看 DaemonSet 是否都成功调度
指标: 
kube_daemonset_status_desired_number_scheduled       应该调度的DaemonSet数量   
kube_daemonset_status_current_number_scheduled       当前运行的DaemonSet数量

11 KubeDaemonSetMisScheduled 
DaemonSet  运行在不该运行的节点上面
表达式:
kube_daemonset_status_number_misscheduled{job="kube-state-metrics"} > 0
作用: DaemonSet 运行,但是不是指定的节点
指标:
kube_daemonset_status_number_misscheduled       运行在不该运行的节点状态

1 NodeClockNotSynchronising 
主机与时间服务器失联
min_over_time(node_timex_sync_status[5m]) == 0
node_timex_sync_status    同步状态

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      误差

3   NodeHighNumberConntrackEntriesUsed
链接状态跟踪
 (node_nf_conntrack_entries / node_nf_conntrack_entries_limit) > 0.75
node_nf_conntrack_entries            链接状态跟踪表分配的数量
node_nf_conntrack_entries_limit      表总量

4 NodeNetworkReceiveErrs
网卡接收错误量
increase(node_network_receive_errs_total[2m]) > 10
node_network_receive_errs_total         接收错误总量

5 NodeNetworkTransmitErrs 
网卡传输错误量
increase(node_network_transmit_errs_total[2m]) > 10
node_network_transmit_errs_total        传输错误总量

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总量

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 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         总容量

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         总容量

10 KubeStateMetricsWatchErrors
kube-state-metrics 获取资源列遇到错误属于kube-state-metrics 自我度量
        (sum(rate(kube_state_metrics_watch_total{job="kube-state-metrics",result="error"}[5m]))
          /
        sum(rate(kube_state_metrics_watch_total{job="kube-state-metrics"}[5m])))
        > 0.01

kube_state_metrics_watch_total                调用获取资源的总数,result包括 error和success

12 KubeStateMetricsListErrors
kube-state-metrics 查看资源列遇到错误属于kube-state-metrics 自我度量 
        (sum(rate(kube_state_metrics_list_total{job="kube-state-metrics",result="error"}[5m]))
          /
        sum(rate(kube_state_metrics_list_total{job="kube-state-metrics"}[5m])))
        > 0.01

kube_state_metrics_list_total                 查看资源的总数,result包括 error和success 

ETCD相关

1 EtcdLived
etcd 存活
up{job="etcd"} < 1

2 EtcdCluseterUnavailable
集群健康检查,down 数量大于 集群可允许故障数量
count(up{job="etcd"} == 0) > (count(up{job="etcd"}) / 2 - 1)


3 EtcdLeaderCheck
检查 leader
max(etcd_server_has_leader) != 1

4 EtcdBackendFsync
i/o 监测

histogram_quantile(0.99, sum(rate(etcd_disk_backend_commit_duration_seconds_bucket[5m])) by (instance, le)) > 100
后端提交 延时
理解 99% 指标
5 EtcdWalFsync
i/o 监测
histogram_quantile(0.99, sum(rate(etcd_disk_wal_fsync_duration_seconds_bucket[5m])) by (instance, le)) > 100

文件同步到磁盘延时

6 EtcdDbSize 
数据量
etcd_debugging_mvcc_db_total_size_in_bytes/1024/1024 > 1024
数据库数据大小

7 EtcdGrpc
Grpc 调用速率
sum(rate(grpc_server_handled_total{grpc_type="unary"}[1m])) > 100

8 EtcdGrpcFaild
sum(rate(grpc_server_handled_total{grpc_type="unary",grpc_code!="OK"}[1m])) > 10
未处理成功的数量

CoreDNS相关

1  DnsRequest 
查询速率
sum(irate(coredns_dns_request_count_total{zone !="dropped"}[1m])) > 100
作用:每分钟查询超过100 告警
coredns_dns_request_count_total   总查询数

2 DnsRequestFaild
异常查询
irate(coredns_dns_response_rcode_count_total{rcode!="NOERROR"} [1m]) > 0
作用: 异常状态码  不是:NOERROR
coredns_dns_response_rcode_count_total      查询返回状态码
关于DNS-Rcode
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不在服务的范围内

3 DnsDown
absent(up{job="kube-dns"} == 1)
4 DnsPanic
dns 恐慌值 
irate(coredns_panic_count_total[1m]) > 100
可能受到攻击
coredns_panic_count_total   慌值总数
5 DnsDrop
dns drop掉的 查询
irate(coredns_dns_request_count_total{zone="dropped"}[1m] ) > 100

Ingress相关

1 IngressDown
查看ingress 服务
up{job="nginx-ingress-controller",namespace="ingress-nginx",service="nginx-ingress-controller"} != 1

2 IngressRequestFaild
Igress 1m请求错误值
sum(rate(nginx_ingress_controller_requests{status =~ "[4-5].*"}[1m])) by (namespace,service,controller_pod,status) > 100\

3 IngressConfigFaild
最新 配置文件更改是否错误
count(nginx_ingress_controller_config_last_reload_successful) == 0

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!