如何通过Prometheus获取Spark Executor Pod OOMKilled指标并告警
捕获Spark Executor Pod OOMKilled事件的Prometheus指标方案
以下是可行的指标查询方案及问题排查建议:
一、精准捕获OOM终止事件的指标
1. 修正kube_pod_container_status_terminated_reason的使用
该指标本身可捕获容器终止原因,但需确保标签匹配精准(如命名空间、Spark组件标识),避免因标签缺失导致无结果。
示例查询:
kube_pod_container_status_terminated_reason{reason="OOMKilled", namespace="your-namespace", app.kubernetes.io/component="executor"}
注意:该指标保留的是已终止容器的状态,若Pod已重建,可结合kube_pod_container_status_terminated_finished_at判断事件发生的时间范围。
2. 监控等待重启的OOM状态
如果Pod因OOM终止后处于重启等待阶段,可通过以下指标捕获:
kube_pod_container_status_waiting_reason{reason="OOMKilled", app.kubernetes.io/component="executor"}
二、提前预判OOM的指标
除了事后捕获事件,还可通过内存使用率监控提前预警,避免OOM发生:
(spark_executor_memory_used_bytes / spark_executor_memory_max_bytes) > 0.9
可设置条件为"持续5分钟以上"触发告警,提前干预。
三、间接关联OOM的指标
结合Pod重启次数突增,配合日志验证,可实现间接告警:
increase(kube_pod_container_restarts_total{app.kubernetes.io/component="executor"}[10m]) > 0
四、排查原有指标失效的原因
- 检查kube-state-metrics版本:旧版本(v1.x)可能未正确暴露
kube_pod_container_status_terminated_reason,建议升级至v2.0+版本。 - 验证Prometheus标签抓取:确认Spark Executor Pod的标识标签(如
app.kubernetes.io/component=executor)被Prometheus正确抓取,避免查询时标签不匹配。 container_memory_failures_total不适用:该指标针对硬件内存错误,与用户态内存耗尽导致的OOMKilled无关。
额外补充
既然Humio能正常记录OOMKilled日志,可直接在Humio中配置日志告警,与Prometheus指标告警形成互补,提升告警覆盖率。
内容的提问来源于stack exchange,提问作者user9920500
相关产品推荐
相关产品推荐

