ACK集群默认提供阿里云Prometheus监控和开源Prometheus监控。本文介绍在使用Prometheus监控ACK集群时,如何配置报警规则,以及报警规则说明。
索引
配置Prometheus报警规则
在阿里云Prometheus监控自定义PromQL配置报警规则
在阿里云Prometheus监控自定义PromQL配置报警规则的具体操作,请参见Prometheus告警规则。
在开源Prometheus监控自定义PromQL配置报警规则
- 配置告警通知策略。开源Prometheus监控支持Webhook地址、钉钉机器人、Email等告警通知方式。您可以通过配置ack-prometheus-operator应用中receiver参数来设置Prometheus报警通知方式。具体操作,请参见告警配置。
- 创建报警规则。在集群中部署PrometheusRule CRD,定义报警规则。更多信息,请参见Deploying Prometheus Rules。
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: # labels与Prometheus CRD中match ruleSelector -> matchLabels保持一致。 prometheus: example role: alert-rules name: prometheus-example-rules spec: groups: - name: example.rules rules: - alert: ExampleAlert # expr为PromQL对数据的查询和触发条件,此处可参考本文报警规则说明列表中PromQL配置列。 expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 90
- 查看报警规则是否生效。
报警规则说明
ACK从集群稳定性、集群节点异常、集群节点水位、应用容器副本异常、工作负载异常、存储异常、网络异常等多个方面,通过集群、应用的运维经验沉淀,总结梳理出以下Prometheus重要报警规则配置。
报警规则包含容器副本异常、工作负载异常等内容,分为以下级别。
- Critical:造成集群、应用、甚至业务影响,需要立即处理。
- Warning:造成集群、应用、甚至业务影响,需要尽快排查。
- Normal:涉及重要功能变更。
下方列表中PromQL配置列均以适配阿里云Prometheus(ARMS-Prometheus)撰写,开源Prometheus请去掉job="_kube-state-metrics"
等Label条件。
异常类别 | 详细描述 | 重要级别 | PromQL配置 | 规则说明 | 常见处理SOP流程 |
---|---|---|---|---|---|
容器副本异常 | Pod状态异常 | Critical | min_over_time(sum by (namespace, pod, phase) (kube_pod_status_phase{phase=~"Pending|Unknown|Failed"})[5m:1m]) > 0 | 最近5分钟Pod的状态异常触发报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群容器副本异常报警规则集,设置Pod状态异常报警规则。更多信息,请参见容器服务报警管理。 | 关于Pod状态异常的处理方法,请参见Pod异常问题排查。 |
Pod启动失败 | Critical | sum_over_time(increase(kube_pod_container_status_restarts_total{}[1m])[5m:1m]) > 3 | 最近5分钟Pod启动异常累计3次以上触发报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群容器副本异常报警规则集,设置Pod启动失败报警规则。更多信息,请参见容器服务报警管理。 | 关于Pod启动失败的处理方法,请参见Pod异常问题排查。 | |
超1000个Pod调度失败异常 | Critical | sum(sum(max_over_time(kube_pod_status_phase{ phase=~"Pending"}[5m])) by (pod)) > 1000 | 最近5分钟累计有1000个Pod处于调度失败Pending状态。 | 此问题有可能是由于大规模集群调度,任务压力过大引起的。ACK Pro版集群增强集群调度等核心能力,并提供SLA保障。推荐升级为ACK Pro版集群。更多信息,请参见ACK Pro版集群概述。 | |
容器CPU限流频繁 | Warning | rate(container_cpu_cfs_throttled_seconds_total[3m]) * 100 > 25 | 容器CPU被频繁限流。最近3分钟被限流CPU时间片>25% | CPU时间片限流(CPU Throttling)会减少容器内进程获得的CPU时间片,影响容器内进程运行时长,有可能导致容器进程的业务行为变慢。 针对这种情况,您需要确定Pod的CPU | |
工作负载异常 | Deployment可用副本状态异常 | Critical | kube_deployment_spec_replicas{} != kube_deployment_status_replicas_available{} | Daemonset可用副本数未达到预期触发报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群应用工作负载报警规则集,设置Deployment可用副本状态异常报警规则。更多信息,请参见容器服务报警管理。 | 确定是否有Deployment的Pod启动失败。 |
Daemonset副本状态异常 | Critical | ((100 - kube_daemonset_status_number_ready{} / kube_daemonset_status_desired_number_scheduled{} * 100) or (kube_daemonset_status_desired_number_scheduled{} - kube_daemonset_status_current_number_scheduled{})) > 0 | Daemonset可用副本数未达到预期触发报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群应用工作负载报警规则集,设置Deployment可用副本状态异常报警规则。更多信息,请参见容器服务报警管理。 | 确定是否有Deployment的Pod启动失败。 | |
Daemonset副本调度异常 | Critical | kube_daemonset_status_number_misscheduled{job} > 0 | Daemonset副本调度异常报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群应用工作负载报警规则集,设置Daemonset副本调度异常报警规则。更多信息,请参见容器服务报警管理。 | 确定是否有Deployment的Pod启动失败。 | |
Job运行失败 | Critical | kube_job_status_failed{} > 0 | Job执行失败异常触发报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群应用工作负载报警规则集,设置Job运行失败报警规则。更多信息,请参见容器服务报警管理。 | 在对应Job下的Pod的日志中查看详细失败信息。 | |
存储异常 | PersistentVolume状态异常 | Critical | kube_persistentvolume_status_phase{phase=~"Failed|Pending"} > 0 | 存储卷PV状态异常触发报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群存储异常事件报警规则集,设置PersistentVolume状态异常报警规则,更多信息。请参见容器服务报警管理。 | 关于PersistentVolume状态异常的处理方法,请参见云盘存储卷FAQ的云盘挂载内容。 |
节点磁盘空间不足10% | Critical | ((node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes) < 10 | 节点某磁盘块设备可用空间不足10%触发报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群资源异常报警规则集,设置集群节点 - 磁盘使用率 >=85%报警规则。更多信息,请参见容器服务报警管理。 | 建议扩容节点和节点磁盘。更多信息,请参见云盘存储卷FAQ的云盘挂载内容。 | |
节点状态异常 | 节点NotReady状态持续3分钟 | Critical | (sum(max_over_time(kube_node_status_condition{condition="Ready",status="true"}[3m]) <= 0) by (node)) or (absent(kube_node_status_condition{condition="Ready",status="true"})) > 0 | 集群节点NotReady状态持续3分钟触发报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群节点异常报警规则集,设置集群节点下线报警规则。更多信息,请参见容器服务报警管理。 |
|
宿主机水位异常 | 节点内存水位高于80% | Warning | node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 20 | 节点内存水位高于80%触发报警。 在容器服务控制台报警配置页面报警规则管理页签下,单击集群资源异常报警规则集,设置集群节点 - 内存使用率 >=85%报警规则。更多信息,请参见容器服务报警管理。 |
|
节点内存水位高于90% | Critical | node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10 | 节点内存水位高于90%。 |
| |
容器节点水位异常 | 节点CPU水位高于80% | Warning | 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 80 | 节点CPU水位高于80%触发报警 在容器服务控制台报警配置页面报警规则管理页签下,单击集群资源异常报警规则集,设置集群节点 - CPU使用率 >=85%报警规则。更多信息,请参见容器服务报警管理。 |
|
节点CPU水位高于90% | Critical | 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 90 | 节点CPU水位高于90%。 |
| |
网络异常 | 集群CoreDNS可用性异常-请求跌零 | Critical | (sum(rate(coredns_dns_request_count_total{}[1m]))by(server,zone)<=0) or (sum(rate(coredns_dns_requests_total{}[1m]))by(server,zone)<=0) | 仅ACK Pro版、标准托管版集群支持检测该异常。 | 检查集群中CoreDNS Pod是否正常。 |
集群CoreDNS可用性异常-panic异常 | Critical | sum(rate(coredns_panic_count_total{}[3m])) > 0 | 仅ACK Pro版、标准托管版集群支持检测该异常。 | 检查集群中CoreDNS Pod是否正常。若CoreDNS行为不符合预期,您需要提交工单咨询。 | |
集群IngressController证书即将过期 | Warning | ((nginx_ingress_controller_ssl_expire_time_seconds - time()) / 24 / 3600) < 14 | 您需要安装部署ACK Ingress Controller,并开启Ingress功能。 | 重新签发Ingress Controller证书。 | |
弹性伸缩 | HPA当前副本数已达最大副本设置数 | Warning | max(kube_horizontalpodautoscaler_spec_max_replicas) by (namespace, horizontalpodautoscaler) - max(kube_horizontalpodautoscaler_status_current_replicas) by (namespace, horizontalpodautoscaler) <= 0 | 您需要在ARMS-Prometheus启用horizontalpodautoscaler相关指标(默认关闭)。此指标为免费指标。![]() | 请检查HPA策略是否符合预期。 |