作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


直接上代码:

holt_winters(
  (
	container_memory_rss{env=~"asia", cluster=~"hk",namespace=~"backend",image!~"^(?:.*(proxy|pause).*)?$"}
	and on (pod)
	(time()-process_start_time_seconds{env=~"asia", cluster=~"hk",namespace=~"backend"})>86400
  )[7d],
  0.05, 0.1
)
  >
  on(pod)
  (
    container_spec_memory_limit_bytes{env=~"asia", cluster=~"hk",namespace=~"backend",image!~"^(?:.*(proxy|pause).*)?$"}
  )
  • container_memory_rss 得到了容器的当前物理内存
  • time()-process_start_time_seconds 得到了容器的启动时间
    • (time()-process_start_time_seconds)>86400 过滤出启动时间超过 1 天的容器,否则太短期的数据会导致预测不准
  • container_spec_memory_limit_bytes 得到容器的最大内存

最终,平滑后得到的内存值,如果大于容器的最大内存,则很可能在近期发生 OOM.
Have fun. 😃