通过告警中心一键配置告警
告警中心基于AOM告警功能,提供集群内置告警一键开启能力,在集群发生故障时能够及时发现并预警,协助您维护业务稳定性。智能告警中心可有效节省您在AOM侧手动配置告警规则的工作量,并且内置的告警规则基于华为云容器团队大规模集群运维经验,能够满足您的日常运维所需,覆盖容器服务异常事件告警、集群相关基础资源的关键指标告警及集群中应用的指标告警。
约束与限制
- 集群版本仅支持v1.17及以上。
- 仅华为云/华为账号,或者拥有CCE Administrator权限或CCE FullAccess权限的IAM用户可进行告警中心所有操作。CCE ReadOnlyAccess权限的IAM用户可以查看所有资源信息,但是无法进行任何操作。
开启告警中心
CCE Standard集群和CCE Turbo集群均支持开启告警中心。
- 在目标集群左侧导航栏选择“告警中心”。
- 选择“告警规则”页签,单击“开启告警中心”,在弹出的页面中选择一个或多个联系组,以便分组管理订阅终端并接收告警消息。如果当前还没有联系组,请参考配置告警通知人进行创建。
- 单击“确认”完成功能开启。
告警中心中的指标类告警规则依赖云原生监控插件上报指标数据到AOM Prometheus实例,需要开通监控中心。当您的集群未安装插件或者在安装插件时未对接AOM Prometheus实例,告警中心将不会创建指标类告警规则。开通监控中心请参考开通监控中心。
表1中使用problem_gauge指标的指标类告警规则依赖CCE节点故障检测插件(NPD)。如需要使用相关的告警规则,请确保节点故障检测插件(NPD)已安装且正常运行。
表1中的事件类告警依赖日志中心开启收集Kubernetes事件的能力,详情请参见采集Kubernetes事件。
配置告警规则
CCE Standard集群、CCE Turbo集群开启智能告警中心后,可以进行告警规则的配置和管理。
- 登录CCE控制台。
- 在集群列表页面,单击目标集群名称进入详情页。
- 在左侧导航栏选择“告警中心”,选择“告警规则”页签,在此处进行告警规则的配置和管理。
智能告警中心功能会默认生成容器场景下的告警规则模板(包含异常事件告警、异常指标告警)。告警规则被分类为若干个告警规则集,您可以为告警规则集关联多个联系组,并开启或关闭告警项。告警规则集中包含多个告警规则,一个告警规则对应单个异常的检查项。关于默认告警规则模板,请参见表1。
告警规则类型 |
告警项 |
告警说明 |
告警类型 |
依赖项 |
PromQL/事件名称 |
---|---|---|---|---|---|
负载规则集 |
Pod状态异常 |
检查Pod状态是否异常 |
指标类 |
云原生监控插件 |
sum(min_over_time(kube_pod_status_phase{phase=~"Pending|Unknown|Failed"}[10m]) and count_over_time(kube_pod_status_phase{phase=~"Pending|Unknown|Failed"}[10m]) > 18 )by (namespace,pod, phase, cluster_name, cluster) > 0 |
Pod频繁重启 |
检查Pod是否频繁重启 |
指标类 |
云原生监控插件 |
increase(kube_pod_container_status_restarts_total[5m]) > 3 |
|
Deployment副本数不匹配 |
检查无状态负载的副本数是否匹配 |
指标类 |
云原生监控插件 |
(kube_deployment_spec_replicas != kube_deployment_status_replicas_available ) and ( changes(kube_deployment_status_replicas_updated[5m]) == 0) |
|
Statefulset副本数不匹配 |
检查有状态负载的副本数是否匹配 |
指标类 |
云原生监控插件 |
(kube_statefulset_status_replicas_ready != kube_statefulset_status_replicas) and (changes(kube_statefulset_status_replicas_updated[5m]) == 0) |
|
容器CPU使用率大于百分之八十 |
检查容器CPU使用率是否大于80% |
指标类 |
云原生监控插件 |
100 * (sum(rate(container_cpu_usage_seconds_total{image!="", container!="POD"}[1m])) by (cluster_name,pod,node,namespace,container, cluster) / sum(kube_pod_container_resource_limits{resource="cpu"}) by (cluster_name,pod,node,namespace,container, cluster)) > 80 |
|
容器内存使用率大于百分之八十 |
检查容器内存使用率是否大于80% |
指标类 |
云原生监控插件 |
(sum(container_memory_working_set_bytes{image!="", container!="POD"}) BY (cluster_name, node,container, pod , namespace, cluster) / sum(container_spec_memory_limit_bytes > 0) BY (cluster_name, node, container, pod , namespace, cluster) * 100) > 80 |
|
容器状态异常 |
检查容器状态是否异常 |
指标类 |
云原生监控插件 |
sum by (namespace, pod, container, cluster_name, cluster) (kube_pod_container_status_waiting_reason) > 0 |
|
更新负载均衡失败 |
检查更新负载均衡是否成功 |
事件类 |
云原生日志采集插件 |
不涉及 |
|
Pod内存不足OOM |
检查Pod是否OOM |
事件类 |
节点故障检测插件(1.18.41及以上版本) 云原生日志采集插件(1.3.2及以上版本) |
PodOOMKilling |
|
节点资源规则集 |
Kube持久卷使用率高 |
检查节点上持久卷使用率是否过高 |
指标类 |
云原生监控插件 |
(kubelet_volume_stats_available_bytes{job="kubelet"} / kubelet_volume_stats_capacity_bytes{job="kubelet"}) < 0.03 and kubelet_volume_stats_used_bytes{job="kubelet"} > 0 |
Kube持久卷声明状态异常 |
检查持久卷声明状态是否异常 |
指标类 |
云原生监控插件 |
kube_persistentvolumeclaim_status_phase{phase=~"Failed|Pending|Lost"} > 0 |
|
Kube持久卷状态异常 |
检查持久卷状态是否异常 |
指标类 |
云原生监控插件 |
kube_persistentvolume_status_phase{phase=~"Failed|Pending"} > 0 |
|
节点CPU使用率超过百分之八十 |
检查节点CPU使用率是否大于80% |
指标类 |
云原生监控插件 |
100 - (avg by(node, cluster_name, cluster) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 80 |
|
节点内存可用率不足百分之十 |
检查节点可用内存是否不足10% |
指标类 |
云原生监控插件 |
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10 |
|
节点磁盘可用率不足百分之十 |
检查节点可用磁盘是否不足10% |
指标类 |
云原生监控插件 |
avg((node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes) by (device, node, cluster_name, cluster) < 10 |
|
节点磁盘空间不足 |
检查节点磁盘空间是否充足 |
事件类 |
云原生日志采集插件 |
不涉及 |
|
节点EmptyDir存储池异常 |
检查节点临时卷存储池是否异常 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="EmptyDirVolumeGroupStatusError"} >= 1 |
|
节点内存资源不足 |
检查节点整体内存是否充足 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="MemoryProblem"} >= 1 |
|
节点持久卷存储池异常 |
检查节点上持久卷存储池是否异常 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="LocalPvVolumeGroupStatusError"} >= 1 |
|
节点挂载点异常 |
检查节点上的挂载点是否异常 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="MountPointProblem"} >= 1 |
|
节点文件句柄数不足 |
检查系统关键资源FD文件句柄数是否充足 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="FDProblem"} >= 1 |
|
节点磁盘卡IO |
检查节点磁盘是否存在卡IO故障 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="DiskHung"} >= 1 |
|
节点磁盘只读 |
检查节点磁盘是否只读 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="DiskReadonly"} >= 1 |
|
节点磁盘异常 |
检查节点系统盘、CCE数据盘(包含Docker逻辑盘与Kubelet逻辑盘)的磁盘使用情况 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="DiskProblem"} >= 1 |
|
节点磁盘慢IO |
检测节点磁盘是否存在慢IO故障 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="DiskSlow"} >= 1 |
|
节点进程资源不足 |
检查系统关键资源PID进程资源是否充足 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="PIDProblem"} >= 1 |
|
节点链接跟踪表不足 |
检查节点链接跟踪表是否充足 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="ConntrackFullProblem"} >= 1 |
|
节点状态规则集 |
ResolvConf配置文件异常 |
检查ResolvConf配置文件是否异常 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="ResolvConfFileProblem"} >= 1 |
节点CNI组件异常 |
检查节点CNI(容器网络)组件是否正常运行 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="CNIProblem"} >= 1 |
|
节点CRI组件异常 |
检查关键组件CRI(容器运行时组件)Docker或Containerd的运行状态 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="CRIProblem"} >= 1 |
|
节点Kube-proxy故障 |
检查Kube-proxy是否正常运行 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="KUBEPROXYProblem"} >= 1 |
|
节点Kubelet异常 |
检查Kubelet状态是否异常 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="KUBELETProblem"} >= 1 |
|
节点存在计划事件 |
检查节点是否存在主机计划事件 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="ScheduledEvent"} >= 1 |
|
Node状态抖动 |
检查节点状态是否在正常和异常之间抖动 |
指标类 |
云原生监控插件 节点故障检测插件 |
sum(changes(kube_node_status_condition{status="true",condition="Ready"}[15m])) by (cluster_name, node, cluster) > 2 |
|
节点Containerd频繁重启 |
检查Containerd是否频繁重启 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="FrequentContainerdRestart"} >= 1 |
|
节点任务夯住 |
检查节点是否存在任务夯住 |
事件类 |
云原生日志采集插件 |
TaskHung |
|
节点存储池配置有误 |
检查节点临时卷及持久卷存储池配置是否异常 |
事件类 |
云原生日志采集插件 |
InvalidStoragePool |
|
节点状态异常 |
检查节点状态是否异常 |
事件类 |
云原生日志采集插件 |
NodeNotReady |
|
节点进程D异常 |
检查节点是否存在D进程 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="ProcessD"} >= 1 |
|
节点进程Z异常 |
检查节点是否存在Z进程 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="ProcessZ"} >= 1 |
|
节点CRI频繁重启 |
检查CRI是否频繁重启 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="FrequentCRIRestart"} >= 1 |
|
节点Docker频繁重启 |
检查Docker是否频繁重启 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="FrequentDockerRestart"} >= 1 |
|
节点Kubelet频繁重启 |
检查Kubelet是否频繁重启 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="FrequentKubeletRestart"} >= 1 |
|
节点NTP服务故障 |
检查关键系统服务节点时钟同步服务ntpd或chronyd是否正常运行 |
指标类 |
云原生监控插件 节点故障检测插件 |
problem_gauge{type="NTPProblem"} >= 1 |
|
节点内存不足强杀进程 |
检查节点是否存在OOM事件 |
事件类 |
节点故障检测插件 |
OOMKilling |
|
节点扩缩容规则集 |
节点池资源售罄 |
检查节点池资源是否充足 |
事件类 |
云原生日志采集插件 |
NodePoolSoldOut |
扩容节点超时 |
检查节点池扩容节点是否超时 |
事件类 |
云原生日志采集插件 |
ScaleUpTimedOut |
|
节点池扩容节点失败 |
检查节点池扩容节点是否异常 |
事件类 |
云原生日志采集插件 |
FailedToScaleUpGroup |
|
节点池缩容节点失败 |
检查节点池缩容节点是否异常 |
事件类 |
云原生日志采集插件 |
ScaleDownFailed |
|
集群状态规则集 |
集群状态不可用 |
检查集群状态是否可用 |
事件类 |
云原生日志采集插件 |
不涉及 |
配置告警通知人
联系组是基于消息通知服务 SMN的主题功能实现的,目的是为消息发布者和订阅者提供一个可以相互交流的通道。联系组包含一个或多个订阅终端,您可以通过配置告警联系组,分组管理订阅终端,接收告警信息。联系组创建完成后,需要绑定至告警规则集,这样,当有告警触发时,联系组中的订阅终端就可以收到告警消息了。
- 登录CCE控制台。
- 在集群列表页面,单击目标集群名称进入详情页。
- 在左侧导航栏选择“告警中心”,选择“默认联系组”页签。
- 单击“新建联系组”,在弹出的页面中输入联系组参数。
- 联系组名称:输入联系组名称,创建后不可修改。名称只能包含大写字母、小写字母、数字、-和_,且必须由大写字母、小写字母或数字开头,名称长度为1~255字符。
- 告警消息显示名:即订阅终端接收消息的标题名称。假设订阅终端为邮件,推送邮件消息时,若已设置告警消息显示名,发件人则呈现为“显示名”,若未设置告警消息显示名,发件人呈现为“username@example.com”。支持在联系组创建完成后修改告警消息显示名。
- 添加订阅终端:您需要添加一个或多个订阅终端来接收告警消息。终端类型包括短信和邮件,选择“短信”时,请输入有效的手机号码;选择“邮件”时,请输入有效的电子邮件地址。
- 单击“确定”完成联系组的创建。
返回联系组列表,订阅终端状态为“未确认”,您需要继续执行后续操作,向该终端发送订阅请求,以验证终端有效性。
- 单击操作列“请求订阅”,向该终端发送订阅请求。若终端收到请求,请按照提示进行确认,确认完成后订阅终端状态将变为“已确认”。
- 联系组创建并确认后,单击图标启用联系组,实现联系组和告警规则集的绑定。
告警规则集最多支持绑定5个联系组。
查看告警列表
您可以在“告警列表”页面查看最近发送的历史记录。
- 登录CCE控制台。
- 在集群列表页面,单击目标集群名称进入详情页。
- 在左侧导航栏选择“告警中心”,选择“告警列表”页签。
列表中默认展示全部待解决告警,支持按照告警关键字、告警等级,以及告警发生的时间范围筛选。同时支持查看指定筛选条件的告警在不同时间段的分布情况。
待解决告警若十分钟内不再触发,则会默认已解决并转换为历史告警。如果提前确认某条告警已解决,也可以单击操作列的“清除”,清除后的告警可在历史告警中查询。
图1 告警列表