You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Prometheus和AlertManager监控Kubernetes集群内存泄漏

监控Pod内存泄漏的Prometheus告警方案

已有通用告警规则参考

社区常见的监控套件(如kube-prometheus-stack)中,通常包含针对内存异常增长的告警规则,核心思路是结合内存增长率和使用率阈值,再通过持续时间过滤临时波动。

实现内存持续增长告警的具体方法

针对你的需求,基于container_memory_working_set_bytes指标,可通过以下方式构建告警规则:

1. 基础持续增长告警(快速泄漏场景)

通过rate()函数计算内存的小时增长率,结合使用率阈值,同时设置持续触发时间来确认泄漏趋势:

sum by(pod, namespace) (rate(container_memory_working_set_bytes[1h])) > 0
and
sum by(pod, namespace) (container_memory_working_set_bytes) / sum by(pod, namespace) (kube_pod_container_resource_limits_memory_bytes) > 0.7
and
sum by(pod, namespace) (kube_pod_container_resource_limits_memory_bytes) > 0
  • rate(container_memory_working_set_bytes[1h]) > 0:表示Pod内存每小时处于增长状态
  • 使用率>70%:过滤掉正常内存增长的场景(如刚启动的Pod)
  • 最后一行排除未设置内存limit的Pod,避免除法运算错误

对应的Prometheus告警规则配置:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: pod-memory-leak-rules
  namespace: monitoring
spec:
  groups:
  - name: pod-memory-leak
    rules:
    - alert: PodMemoryLeakDetected
      expr: |
        sum by(pod, namespace) (rate(container_memory_working_set_bytes[1h])) > 0
        and
        sum by(pod, namespace) (container_memory_working_set_bytes) / sum by(pod, namespace) (kube_pod_container_resource_limits_memory_bytes) > 0.7
        and
        sum by(pod, namespace) (kube_pod_container_resource_limits_memory_bytes) > 0
      for: 2h
      labels:
        severity: warning
      annotations:
        summary: "Pod {{ $labels.pod }} ({{ $labels.namespace }}) 疑似内存泄漏"
        description: "该Pod内存已持续增长2小时,当前使用率达{{ humanize $value }}%,请排查内存使用情况。"

2. 缓慢泄漏场景适配

针对内存缓慢增长的情况,可对比不同时间段的内存值,结合长周期增长率判断:

sum by(pod, namespace) (container_memory_working_set_bytes) > 1.5 * sum by(pod, namespace) (container_memory_working_set_bytes offset 24h)
and
sum by(pod, namespace) (rate(container_memory_working_set_bytes[6h])) > 0
and
sum by(pod, namespace) (kube_pod_container_resource_limits_memory_bytes) > 0
  • offset 24h:对比当前内存与24小时前的内存值,若高出50%则标记异常
  • rate(container_memory_working_set_bytes[6h]) > 0:确保6小时内内存处于持续增长状态

关键注意事项

  • 时间窗口调整:根据业务Pod的内存特性调整rate()的时间窗口(如1h/6h)和for的持续时间,避免误报或漏报
  • 排除新启动Pod:可添加time() - kube_pod_created{pod=~"{{ $labels.pod }}", namespace=~"{{ $labels.namespace }}"} > 86400条件,只监控运行超过24小时的Pod,避免刚启动的正常内存增长触发告警
  • 结合OOM指标:若需更精准的告警,可叠加container_memory_failures_total指标(内存分配失败次数),但该指标通常对应泄漏已较严重的阶段

内容的提问来源于stack exchange,提问作者Dsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:54:22