请求指导:在Dynatrace中创建特定Namespace下Workload Pod数为0的告警
Dynatrace告警规则:指定Namespace下Workload Pod数为0的指标查询指导
需求说明
需要创建告警规则,当指定Kubernetes命名空间内,任意非Job/CronJob类型的Workload(比如Deployment、StatefulSet等)的活跃状态Pod数量为0时触发告警。活跃状态指Pod阶段既非Failed(失败)也非Succeeded(成功)。
参考查询语句解析(中文翻译)
你提供的参考查询语句用于计算指定维度下的Ready状态Pod数量,拆解后逻辑如下:
# 第一部分:统计活跃状态(非失败/成功)、非Job/CronJob类型的Pod总数 内置Kubernetes Pod指标:过滤(与(不等于(Pod阶段,失败),不等于(Pod阶段,成功),不等于(Workload类型,Job),不等于(Workload类型,CronJob))):按(命名空间名称,Workload类型,Workload名称)拆分:求和 - # 第二部分:统计活跃状态、非Job/CronJob类型且非Ready状态的Pod总数 内置Kubernetes Pod指标:过滤(与(不等于(Pod阶段,失败),不等于(Pod阶段,成功),不等于(Workload类型,Job),不等于(Workload类型,CronJob),不等于(Pod状态,就绪))):按(命名空间名称,Workload类型,Workload名称)拆分:求和:默认值(0.0)
整体计算逻辑:用活跃Pod总数减去非Ready的活跃Pod数,最终得到各Workload的Ready状态Pod数量。
适配需求的简化查询语句
如果你的核心需求是监控“活跃Pod数量为0”(即Workload下没有任何运行中/待调度的Pod),可以直接使用以下查询,无需做减法:
builtin:kubernetes.pods:filter(and(ne(pod_phase,Failed),ne(pod_phase,Succeeded),ne(k8s.workload.kind,job),ne(k8s.workload.kind,cronjob),eq(k8s.namespace.name,"你的目标命名空间"))):splitBy(k8s.workload.kind,k8s.workload.name):sum:default(0.0)
语句说明
- 新增
eq(k8s.namespace.name,"你的目标命名空间")直接过滤指定命名空间 - 最终统计的是该命名空间下,非Job/CronJob类型Workload的活跃Pod总数,无数据时默认返回0
告警配置要点
- 设置阈值:在告警规则的“静态阈值”中,将条件设为等于0,并根据业务需求设置持续触发时间(比如5分钟,避免临时重启导致误告警)
- 维度拆分:保留
k8s.workload.kind和k8s.workload.name的拆分维度,这样告警能精准定位到具体Workload - 排除例外:如果有特定Workload不需要监控,可在filter中添加
ne(k8s.workload.name,"例外Workload名称")
内容的提问来源于stack exchange,提问作者nayak_babu
相关产品推荐
相关产品推荐

