Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

告警梳理

梳理需要用于监控的指标以及规则。告警规则前置设定如下:

  • 执行间隔:以 1 分钟作为默认的告警规则执行间隔。

  • 触发阈值:以连续3次达到触发阈值为前提才触发一次告警。阈值触发在未特殊提醒的前提下,统一使用 >= 的计算方式

  • 告警分级:告警分3个优先级,普通告警(info)、严重告警(warn)、致命告警(crit),分别对应3个不同的阈值。

以下告警阈值初始值为经验设定,在现网配置时会需要根据实际情况进行适当调整,并不断完善该文档。

集群纬度

告警名称

告警描述

表达式

阈值设置

集群CPU使用率

alert.cluster.cpu.usage_rate

重要程序:一般

集群的CPU使用率过高时,意味着需要排查个别容器是否有异常,亦或需要扩展节点资源。

单位%

sum(rate(container_cpu_usage_seconds_total{id="/"}[5m])) by (khaos_product,khaos_cluster) / sum (machine_cpu_cores{}) by (khaos_product,khaos_cluster) * 100

info: 80

warn: 90

crit: 95

集群内存使用率

alert.cluster.memory.usage_rate

重要程序:一般

集群的内存使用率过高时,意味着需要排查个别容器是否有异常,抑或需要扩展节点资源。

单位%

sum (container_memory_working_set_bytes{id="/"}) by (khaos_product,khaos_cluster) / sum (machine_memory_bytes{}) by (khaos_product,khaos_cluster) * 100

info: 80

warn: 90

crit: 95

集群Pods使用率

alert.cluster.pods.usage_rate

重要程序:可有可无

每个Node节点能够维护的Pods数量是有限制的,当每个NodePods使用率过高时会引发集群的Pods使用率过高,会影响Pod的调度,甚至无法创建Pod

单位%

该规则默认不启用。

sum(kube_pod_status_phase{phase="Running"})) by (khaos_product,khaos_cluster) / sum(kube_node_status_allocatable{resource="pods"}) by (khaos_product,khaos_cluster) * 100

info: 80

warn: 90

crit: 95

节点纬度

告警名称

告警描述

表达式

阈值设置

节点CPU使用率

alert.node.cpu.usage_rate

重要程序:重要

CPU使用率过高会导致进程响应慢。

单位%

sum by(khaos_product,khaos_cluster,instance) (irate(node_cpu_seconds_total{mode!="idle"}[5m])) / on(khaos_product,khaos_cluster,instance) group_left sum by (khaos_product,khaos_cluster,instance)((irate(node_cpu_seconds_total{}[5m]))) * 100

info: 80

warn: 90

crit: 95

节点内存使用率

alert.node.memory.usage_rate

重要程序:重要

主机内存利用率高会导致进程响应慢。

单位%

100 - ((avg_over_time(node_memory_MemAvailable_bytes{}[5m]) * 100) / avg_over_time(node_memory_MemTotal_bytes{}[5m]))

info: 80

warn: 90

crit: 95

节点磁盘使用率

alert.node.storage.usage_rate

重要程序:可有可无

由于节点上挂载的磁盘比较多,我们并不需要关心所有挂载点的磁盘使用率,因此该规则默认不启用。

单位%

100 - 100*(sum(node_filesystem_avail_bytes{device=~"/dev.*", mountpoint!~".*pods.*|.*pvc.*"}) by(khaos_product,khaos_cluster, instance, device) / sum(node_filesystem_size_bytes{device=~"/dev.*", mountpoint!~".*pods.*|.*pvc.*"}) by (khaos_product,khaos_cluster, instance, device))

info: 80

warn: 90

crit: 95

节点系统磁盘使用率

alert.node.storage.root.usage_rate

重要程序:重要

系统盘使用率过高会影响系统稳定性。

单位%

100 - 100*(sum(node_filesystem_avail_bytes{device=~"/dev.*", mountpoint="/"}) by(khaos_product,khaos_cluster, instance, device) / sum(node_filesystem_size_bytes{device=~"/dev.*", mountpoint="/"}) by (khaos_product,khaos_cluster, instance, device))

info: 80

warn: 90

crit: 95

磁盘 inode 使用率

alert.node.storage.inode.usage_rate

重要程序:重要

使用率如果达到100%会影响磁盘文件的创建。

单位%

100 - node_filesystem_files_free{fstype=~"ext4|xfs"}/node_filesystem_files{fstype=~"ext4|xfs"} * 100

info: 80

warn: 90

crit: 95

磁盘读延迟过高

alert.node.storage.io_delay_ms.read

重要程序:重要

影响磁盘内容读取。

单位ms

rate(node_disk_read_time_seconds_total{}[5m]) / (rate(node_disk_reads_completed_total{}[5m])>0) * 1000

info: 1000

warn: 3000

crit: 5000

磁盘写延迟过高

alert.node.storage.io_delay_ms.write

重要程序:重要

影响磁盘内容写入。

单位ms

rate(node_disk_write_time_seconds_total{}[5m]) / (rate(node_disk_writes_completed_total{}[5m])>0) * 1000

info: 1000

warn: 3000

crit: 5000

节点TCP每秒出包错误率

alert.node.network.tcp.error_rate.out

重要程序:重要

网络出入包错误率过高会严重影响数据面及管控面网络访问。

5m内的平均网络出包错误率。

单位%

100*(sum(node_network_transmit_errs_total{device="eth0"}[5m]) by (khaos_product,khaos_cluster, device, instance)/sum(node_network_transmit_packets_total{device="eth0"}[5m]) by (khaos_product,khaos_cluster, device, instance))

info: 5

warn: 10

crit: 30

节点TCP每秒入包错误率

alert.node.network.tcp.error_rate.in

重要程序:重要

网络出入包错误率过高会严重影响数据面及管控面网络访问。

5m内的平均网络入包错误率。

单位%

100*(sum(node_network_receive_errs_total{device="eth0"}[5m]) by (khaos_product,khaos_cluster, device, instance)/sum(node_network_receive_packets_total{device="eth0"}[5m]) by (khaos_product,khaos_cluster, device, instance))

info: 5

warn: 10

crit: 30

节点网络流量过大

alert.node.network.flow

重要程序:重要


流量过大可能会影响节点上所有进程的网络通信。原理是1分钟内对外网卡平均流量,包含出+入的流量。流量阈值根据集群硬件条件灵活配置。

单位mb/s

(rate(node_network_receive_bytes_total{device=~"eth.+"}[1m])+rate(node_network_transmit_bytes_total{device=~"eth.+"}[1m]))/1024/1024

info: 5000

warn: 8000

crit: 9000

节点网络带宽使用率

alert.node.network.bandwidth_usage_rate

重要程序:重要


流量过大可能会影响节点上所有进程的网络通信。原理是1分钟内对外网卡的平均流量占用总体网卡带宽的百分比。

单位%

注意事项:

node_network_speed_bytes 指标仅在物理机下有效,虚拟机下的该指标可能会负值或者无效。因此该告警作为流量告警的辅助告警规则。

100*(rate(node_network_receive_bytes_total{device=~"eth.+"}[1m])+rate(node_network_transmit_bytes_total{device=~"eth.+"}[1m]))/(node_network_speed_bytes{device=~"eth.+"} > 0)

info: 80

warn: 90

crit: 95

节点 NotReady 持续时间(5分钟)

alert.node.status.not_ready5

重要程序:重要

主机上的kubelet无法上报主机状态,可能主机宕机或者不稳定,可能会引发后续Kubernetes集群内部针对该节点的调度、网络访问等问题。

按照持续时间划分不同告警级别。

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

info: 1

节点 NotReady 持续时间(10分钟)

alert.node.status.not_ready10

重要程序:重要

warn: 1

节点 NotReady 持续时间(15分钟)

alert.node.status.not_ready15

重要程序:重要

crit: 1

节点Pods使用率

alert.node.status.pods.usage_rate

重要程序:可有可无

每个Node节点能够维护的Pods数量是有限制的,当使用率过高时,Kuberntes调度器将法调度新的Pod到该节点,从而影响节点上的Pod装箱。

该规则默认不启用。

单位%

100*sum(kube_pod_info{}) by (khaos_product,khaos_cluster,node) / sum(kube_node_status_allocatable{resource="pods"}) by (khaos_product,khaos_cluster,node)

info: 80

warn: 90

crit: 95

节点异常关机或重启

alert.node.status.shut_reboot

重要程序:重要

节点5分钟内系统启动时间发生变化,可能发生异常关机或者重启,请注意查看。

abs((node_boot_time_seconds{} or 0) - node_boot_time_seconds{} offset 5m != 0)

crit: 1

容器纬度

告警名称

告警描述

处理方式

表达式

阈值设置

容器CPU使用率

alert.container.cpu.usage_rate

重要程序:可有可无

前置条件:只有在容器配置了resources.limits.cpu条件下才能使用。

单位%

该规则默认不启用。


100*sum(rate(container_cpu_usage_seconds_total{namespace=~"argo|khaos|obs|kube-system"}[5m])) by (khaos_product,khaos_cluster,namespace,app_name,pod,container)/sum(container_spec_cpu_quota{namespace=~"argo|khaos|obs|kube-system"}/container_spec_cpu_period{namespace=~"argo|khaos|obs|kube-system"}) by (khaos_product,khaos_cluster,namespace,app_name,pod,container)

info: 80

warn: 90

crit: 95

容器内存使用率

alert.container.memory.usage_rate

重要程序:可有可无

前置条件:只有在容器配置了resources.limits.memory条件下才能使用。

单位%

该规则默认不启用。


100*(sum (container_memory_working_set_bytes{namespace=~"argo|khaos|obs|kube-system"}) by (khaos_product,khaos_cluster,namespace,app_name,pod,container)/sum (container_spec_memory_limit_bytes{namespace=~"argo|khaos|obs|kube-system"}) by (khaos_product,khaos_cluster,namespace,app_name,pod,container) <= 1)

info: 80

warn: 90

crit: 95

容器磁盘使用率

alert.container.storage.usage_rate

重要程序:可有可无

由于容器内部的挂载点可能很多,并且在Kubernetes下都是通过pv的方式申请存储,对应也有pv的磁盘使用率告警,因此该告警规则默认未启用。

单位%


100*sum(container_fs_usage_bytes{namespace=~"argo|khaos|obs|kube-system"} / (container_fs_limit_bytes{namespace=~"argo|khaos|obs|kube-system"} != 0 )) by (khaos_product,khaos_cluster,namespace,app_name,pod,container,device)

info: 80

warn: 90

crit: 95

容器持续 10 分钟 NotReady

(该告警包含数据面容器)

alert.container.not_ready10

重要程序:重要

通过reason字段告警具体原因,reason字段可能得取值如下:

  • ContainerCreating

  • CrashLoopBackOff

  • CreateContainerConfigError

  • ErrImagePull

  • ImagePullBackOff

  • PodInitializing

  • OOMKilled

  • StartError

  • Error

  • ContainerStatusUnknown

  • Unknown

需要注意:

数据面的告警仅针对内核容器,按照container="khaos-biz"通用配置,并不关心业务Pod中的sidecar容器。

按照持续时间划分不同告警级别。

通过跳板机登录kubernetes集群查看Pod状态,异常容器日志定位准确原因。

管控面:

管控面容器处于异常状态,该容器提供的管控能力失效。

reason的异常容器:

(
(kube_pod_container_status_terminated_reason{reason!="Completed",namespace=~"argo|khaos|obs|kube-system"} + kube_pod_container_status_terminated_reason{reason!="Completed",namespace=~"argo|khaos|obs|kube-system"} offset 10m) == 2
or
(kube_pod_container_status_waiting_reason{reason!="Completed",namespace=~"argo|khaos|obs|kube-system"} + kube_pod_container_status_waiting_reason{reason!="Completed",namespace=~"argo|khaos|obs|kube-system"} offset 10m) == 2
)

unkhown的异常容器:

((kube_pod_container_status_ready{namespace=~"argo|khaos|obs|kube-system"} + kube_pod_container_status_ready{namespace=~"argo|khaos|obs|kube-system"} offset 10m) == 0)
unless on(uid)
(
kube_pod_container_status_terminated_reason{namespace=~"argo|khaos|obs|kube-system"}
or
kube_pod_container_status_waiting_reason{namespace=~"argo|khaos|obs|kube-system"}
)

数据面:

数据面容器异常,会影响用户实例,请优先查看!

reason的异常容器:

(
(kube_pod_container_status_terminated_reason{reason!="Completed",container="khaos-biz"} + kube_pod_container_status_terminated_reason{reason!="Completed",container="khaos-biz"} offset 10m) == 2
or
(kube_pod_container_status_waiting_reason{reason!="Completed",container="khaos-biz"} + kube_pod_container_status_waiting_reason{reason!="Completed",container="khaos-biz"} offset 10m) == 2
)

unkhown的异常容器:

((kube_pod_container_status_ready{container="khaos-biz"} + kube_pod_container_status_ready{container="khaos-biz"} offset 10m) == 0)
unless on(uid)
(
kube_pod_container_status_terminated_reason{container="khaos-biz"}
or
kube_pod_container_status_waiting_reason{container="khaos-biz"}
)

info: 1

容器持续 20 分钟 NotReady

(该告警包含数据面容器)

alert.container.not_ready20

重要程序:重要

warn: 1

容器持续 30 分钟 NotReady

(该告警包含数据面容器)

alert.container.not_ready30

重要程序:重要

crit: 1

容器发生持续重启

(该告警包含数据面容器)

alert.pod.status.crash_loop

重要程序:重要

通过reason字段告警具体原因,reason字段可能得取值如下:

  • CrashLoopBackOff

  • CreateContainerConfigError

  • ErrImagePull

  • ImagePullBackOff

  • OOMKilled

  • StartError

  • Error

  • ContainerStatusUnknown

  • Unknown

需要注意:

  • 由于容器重启使用了时间退避,最长退避时间为5m,因此这里默认使用15m作为间隔来计算重启递增值。

通过跳板机登录kubernetes集群查看Pod状态,异常容器日志定位准确原因。

管控面:

(delta(kube_pod_container_status_restarts_total{namespace=~"argo|khaos|obs|kube-system"} [15m]) > 1) + on(khaos_product,khaos_cluster, namespace, app_name, pod, container) group_right(kube_pod_container_status_last_terminated_reason) 0*(kube_pod_container_status_last_terminated_reason{reason!="Completed",namespace=~"argo|khaos|obs|kube-system"})

数据面(非平台管控面空间)

(delta(kube_pod_container_status_restarts_total{namespace!~"argo|khaos|obs|kube-system"} [15m]) > 1) + on(khaos_product,khaos_cluster, namespace, app_name, pod, container) group_right(kube_pod_container_status_last_terminated_reason) 0*(kube_pod_container_status_last_terminated_reason{reason!="Completed",namespace!~"argo|khaos|obs|kube-system"})

info: 15m 2

warn: 20m 4

crit: 30m 5

Pod纬度

告警名称

告警描述

处理方式

表达式

阈值设置

Pod长期处于无法调度状态

(该告警包含数据面容器)

alert.pod.status.unschedulable

重要程序:重要

Pod在一定时间内没有被调度成功,通常是Pod依赖没有满足要求,例如资源请求、亲和性等前置条件无法满足。

通过跳板机登录集群,使用kubectl describe命令查看具体原因。

kube_pod_status_unschedulable{}

info: 10分钟

warn: 20分钟

crit: 30分钟

Pod PVC使用率

(该告警包含数据面容器)

alert.pod.storage.volume.usage_rate

重要程序:重要

PVC对应的PV使用率高时,会影响存储,进而影响服务功能。

需要注意,数据面现网的PVC磁盘使用率都很高。

单位%

清理或扩容PV磁盘。

100*(kubelet_volume_stats_used_bytes{}/kubelet_volume_stats_capacity_bytes{})+on(khaos_product,khaos_cluster,persistentvolumeclaim,namespace) group_right(persistentvolumeclaim) 0*kube_pod_spec_volumes_persistentvolumeclaims_info{}

info: 80

warn: 90

crit: 95

Pod网络入流量过大

alert.pod.network.flow_rate.in

重要程序:一般


原理是1分钟内的平均流量。需要注意,Pod的网络流量大部分属于集群内部的内网流量。

单位mb/s


rate(container_network_receive_bytes_total{image!="",interface=~"eth.+",namespace=~"argo|khaos|obs|kube-system"}[1m])/1024/1024

info: 800

warn: 900

crit: 1000

Pod网络出流量过大

alert.pod.network.flow_rate.out

重要程序:一般

原理是1分钟内的平均流量。需要注意,Pod的网络流量大部分属于集群内部的内网流量。

单位mb/s


rate(container_network_transmit_bytes_total{image!="",interface=~"eth.+",namespace=~"argo|khaos|obs|kube-system"}[1m])/1024/1024

info: 800

warn: 900

crit: 1000

服务纬度

云巢组件

vmagent

告警名称

告警描述

处理方式

表达式

阈值设置

vmagent 存在错误的集群ID配置

alert.service.khaos.vmagent.incorrect_khaos_cluster

重要程序:一般

有部分集群的集群ID没有更新到vmagent配置中,可能是集群的cluster_values.yaml配置或者CI脚本存在问题。

当集群ID配置错误时,可能会影响上层的告警通知、大盘展示,影响问题的准确定位。

该问题通常与集群ID配置错误一起出现。

首先在catalog仓库中的tencentcloud/arcod/deploys目录检索关键字khaos-cluster看看哪个集群的配置文件有问题。

如果无法找到,那么使用count(kube_pod_info{khaos_cluster="khaos-cluster"})by(namespace)看看是哪个产品的实例,随后对该产品的所有集群遍历查找ns定位是否该集群。

count(kube_pod_info{khaos_cluster="khaos-cluster"})

info: 1

vmagent 存在错误的产品标识配置

alert.service.khaos.vmagent.incorrect_khaos_product

重要程序:一般

有部分集群的产品标识没有更新到vmagent配置中,可能是集群的cluster_values.yaml配置或者CI脚本存在问题。

当集群ID配置错误时,可能会影响上层的告警通知、大盘展示,影响问题的准确定位。

该问题通常与集群ID配置错误一起出现。

同上。

count(kube_pod_info{khaos_product=""})

info: 1

vmagent 错误日志激增

alert.service.khaos.vmagent.log_errors

重要程序:重要

错误日志一段时间内增加过多,可能会影响监控采集能力。

单位

需要去控制台查看vmagent pod的日志确定原因。

sum(increase(vm_log_messages_total{level!="info"}[10m])) by (khaos_product, khaos_cluster, app_name, namespace, pod)

info: 1000

warn: 3000

crit: 5000

vmagent 本地缓存激增

alert.service.khaos.vmagent.local_cache

重要程序:重要

vmagent上报失败时,会按照远端地址缓存本地数据,如果本地缓存数据激增,表示远端写入失败过多。

单位mb

需要去控制台查看vmagent pod的日志确定原因。判断是否地址配置错误,或者远端写入地址对应的服务异常。

sum(vmagent_remotewrite_pending_data_bytes{}) by (job, url)/1024/1024

info: 100

warn: 500

crit: 1000

Kubernetes组件

etcd

告警名称

告警描述

表达式

阈值设置

etcd 是否存在主节点

alert.service.kube.etcd.has_leader

重要程序:重要


表示etcd是否可用。

需要注意:TKE托管类型集群的 etcd 服务由于部署在其他独立的集群中,当前集群内的监控组件没有权限访问因此无法采集其指标。

etcd_server_has_leader{}

crit: ==0

apiserver

告警英文名

告警描述

表达式

阈值设置

apiserver 服务端请求错误率

alert.service.kube.apiserver.server.error_rate

重要程序:重要


5分钟内apiserver处理的请求错误率较高。

单位%

100*sum(rate(apiserver_request_total{code=~"(?:5..)"}[5m])) by (khaos_product,khaos_cluster,app_name,instance,group,version,resource) / sum(rate(apiserver_request_total{}[5m])) by (khaos_product,khaos_cluster,app_name,instance,group,version,resource)

info: 50

warn: 80

crit: 90

客户端向 apiserver 请求错误率

alert.service.kube.apiserver.client.error_rate

重要程序:重要


5分钟内客户端请求apiserver的错误率较高。instance为客户端,host为目标端,job用于识别是否kubelet访问。


单位%

100*(sum(rate(rest_client_requests_total{code=~"(4|5).."}[5m])) by (khaos_product,khaos_cluster,app_name,instance,host) / sum(rate(rest_client_requests_total[5m])) by (khaos_product,khaos_cluster,app_name,instance,host))

info: 50

warn: 80

crit: 90

apiserver 服务端请求处理延迟

alert.service.kube.apiserver.latency

重要程序:重要

5分钟内p99的请求处理延迟较高。

单位ms

1000*histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{verb!~"(?:CONNECT|WATCHLIST|WATCH|PROXY)"} [5m])) without (subresource))

info: 3000

warn: 5000

crit: 10000

参考资料

主机类

需要依赖node-exporter

节点CPU使用率

NodeCpuUsageRate 

Code Block

节点CPU使用量

NodeCpuUsage 

Code Block

节点内存使用率

NodeMemoryUsageRate 

Code Block

节点内存占用量

NodeMemoryUsage 

Code Block

节点磁盘使用率

NodeStorageUsageRate 

Code Block

节点磁盘使用量

NodeStorageUsage 

Code Block

节点内网出流量

NodeBytesSent 

Code Block

节点内网入流量

NodeBytesReceived 

Code Block

节点内网出带宽

NodeBytesSentBandWidth 

Code Block

节点内网入带宽

NodeBytesReceivedBandWidth 

Code Block

节点硬盘读IOPS

NodeStorageReadIOPS 

Code Block

节点硬盘写IOPS

NodeStorageWriteIOPS 

Code Block

节点硬盘读流量

NodeStorageReadFlow 

Code Block

节点硬盘写流量

NodeStorageWriteFlow 

Code Block

节点TCP连接数

MetricNameNodeNetstatTCP 

Code Block

容器类

需要依赖cadvisorkube-stateexporter

pod

container



Panel
titleContent Menu

Table of Contents
maxLevel5