个人理解.
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
来源:oschina
链接:https://my.oschina.net/54188zz/blog/4305978