AWS EKS环境下基于CloudWatch统计指定Deployment失败Pod并告警
解决CloudWatch中统计指定Deployment下Failed状态Pod的方案
一、先给指标补上Deployment标签(关键前提)
kube_pod_status_phase默认不带Deployment标签,是因为采集阶段未关联Pod所属的Deployment元数据。你需要调整CW Agent的Prometheus采集配置,从Pod的ownerReferences中提取Deployment信息并添加为标签:
- 修改CW Agent的ConfigMap配置文件(通常位于
amazon-cloudwatch-agent命名空间),在Prometheus采集规则中添加标签重写逻辑:
prometheus: config: scrape_configs: - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: # 仅保留归属Deployment的Pod - source_labels: [__meta_kubernetes_pod_owner_kind] action: keep regex: Deployment # 将Deployment名称转为指标标签 - source_labels: [__meta_kubernetes_pod_owner_name] target_label: deployment # 保留原有核心标签 - source_labels: [__meta_kubernetes_namespace] target_label: namespace - source_labels: [__meta_kubernetes_pod_name] target_label: pod
- 重启CW Agent的DaemonSet使配置生效:
kubectl rollout restart daemonset amazon-cloudwatch-agent -n amazon-cloudwatch
二、在CloudWatch中统计Failed Pod数量
待指标带上deployment标签后,即可在CloudWatch中完成统计:
- 进入CloudWatch控制台的指标页面,找到CW Agent采集的Prometheus指标命名空间(通常为
CWAgent/Prometheus)。 - 选择
kube_pod_status_phase指标,按以下标签过滤:- 筛选
phase值为Failed的时间序列 - 指定目标
deployment名称和namespace
- 筛选
- 选择
Sum统计函数,即可得到该Deployment下处于Failed状态的Pod总数。
三、创建CloudWatch告警
基于上述统计结果配置告警:
- 设置告警触发条件:当统计的Sum值超过你设定的阈值(例如2)时触发
- 配置SNS主题作为通知渠道,接收告警消息
替代方案:无法修改采集配置时的临时处理
如果暂时无法调整CW Agent采集规则,可借助CloudWatch的Metric Math实现指标关联:
- 确保Prometheus已采集
kube_pod_owner指标(该指标包含Pod与所属Deployment的映射关系)。 - 在CloudWatch中使用
JOIN函数,将kube_pod_status_phase(phase=Failed)与kube_pod_owner(owner_kind=Deployment)按pod和namespace标签关联,提取对应的Deployment名称后统计数量。
此方法依赖额外指标支持,不如直接在采集阶段补全标签可靠。
内容的提问来源于stack exchange,提问作者Djoby
相关产品推荐
相关产品推荐

