背景
通过在k8s集群内搭建prometheus对k8s集群进行监控,主要包括以下模块
- node-exporter监控物理机资源
- cadavisor、kube-state-metrics监控容器资源
- kubelete
- apiserver
- etcd
- controller manager
- kube-proxy
- 应用程序容器自身暴露的metrics
但随着集群规模的增大,抓取的监控指标越来越多,prometheus容器开始经常出现oomkilled的问题,导致prometheus几乎不可用,无限增大分配给prometheus容器的内存终究不是最终的解决方案,现将自己解决这个问题的思路给大家分享一下,希望能够对你有所帮助!
解决方案
- 拆分抓取任务
最初数据抓取量不大时,单个prometheus就可以完成对背景介绍中几个模块的数据的抓取,即所有的job都在一个prometheus中进行配置,但随着集群规模的增大,个别job的数据抓取量变得非常庞大,导致oomkilled之后所有的任务都会受到影响,所以可以通过查询每个job的数据量,对抓取任务进行拆分,将他们分散到多个prometheus中去完成任务的抓取
# 查看job数据抓取量
sort_desc(sum(scrape_samples_scraped) by (job))
- 过滤抓取指标
将prometheus拆分成多个之后,监控数据分散在了多个不同的位置,如何方便的查询就又成了一个新的问题,这个就可以使用prometheus的联邦模式(FEDERATION)将多个Prometheus中的监控数据归集到一起,但是需要注意的是,归集时只去抓取需要的监控指标,尽量的精简,全量抓取同样会导致之前的问题,而且这对抓取端与被抓取端来说,都是很大的压力
<
随着k8s集群规模扩大,Prometheus面临OOM问题。本文分享了解决方案:拆分抓取任务、过滤指标、调整数据落盘时间,采用联邦模式汇总监控数据。
最低0.47元/天 解锁文章
2695

被折叠的 条评论
为什么被折叠?



