监控 500 节点后 Prometheus 内存去哪了:沿数据链路拆解调优路径
【免费下载链接】prometheusThe Prometheus monitoring system and time series database.项目地址: https://gitcode.com/GitHub_Trending/pr/prometheus
监控节点数突破 500 台后,你会发现 Prometheus 的内存不再随目标数线性增长,而是跳着涨:多接几十个服务,RSS 翻倍,磁盘也填得越来越快。这类问题很少是单一原因,而是采集、存储、查询到自观测这条完整链路上,某个"小规模没问题、大规模就崩"的配置在拖后腿。
让采集频率跟着业务走
抓取间隔怎么配才不浪费 CPU
默认 scrape_interval 是 15s,对通用场景是均衡值,但不是每个 job 的正确答案。采样率与抓取频率成正比,1000 个目标全用 5s 抓取,samples/s 可能是必要值的数倍。实际跑起来你会发现,多数非核心服务 15s 都嫌快,更不用提 5s。
改前:所有目标用全局 15s;改后:
global: scrape_interval: 30s # 默认值放宽,采样量直接减半 scrape_configs: - job_name: core-payments scrape_interval: 10s # 只有真正关键的 job 保留短间隔这里有个坑:scrape_timeout 必须小于间隔,否则同一目标上两次抓取会重叠。改完不用重启进程,发 reload 信号即可,重载后看 ingested samples/s 的下降幅度和抓取耗时 P99,确认生效。
把高基数标签砍掉
head 序列为什么降不下来
Prometheus 把活跃序列存在内存(head)里,每种唯一标签组合就是一条时间序列,还没写入数据时元数据就占内存了。user_id、request_id 这类"身份型"标签一旦进了指标,序列数能从几万飙到几百万,内存自然不降反升。
先用 promtool tsdb analyze <数据目录> 看 top 标签取值分布,定位是哪些标签在膨胀,再在采集侧处理:把服务导出的所有标签原样保留,改为用 relabel_configs 的 drop 动作滤掉不用于告警的高基数标签,或干脆用 metric_relabel_configs 过滤掉整个序列族。
确认方式:prometheus_tsdb_head_series 曲线走平,内存不再跳涨。如果滤完标签还在涨,就该认真审视指标定义本身是不是有病。
把磁盘上的数据关进笼子 💾
时间保留和大小保留选哪个
默认保留 15 天且不限大小,采样率高时,磁盘在 15 天到来前就满了。官方给过粗算公式:所需空间 ≈ 保留秒数 × 每秒采样数 × 每样本 1-2 字节,先按这个算理论值,再设上限。
storage: tsdb: retention: 15d # 时间策略 retention_size: 500GB # 大小上限,两者谁先到谁触发用大小保留时注意:官方建议 retention_size 设为分配磁盘的 80-85%,给压缩(compaction)留缓冲——压缩期间新旧 block 同时占盘,磁盘占用会短暂超过上限。生效后看磁盘曲线是否变成"锯齿形":涨到某处回落,而不是持续爬升。
让远程写入接管长期数据
本地只留几天行不行
需要回看三个月前的数据时,不如把长期存储交给 remote write 通道,数据转发到 Thanos、Cortex 这类远端,本地只保留最近几天。边缘节点或资源受限环境可以更极端:用 Agent 模式(--enable-feature=agent)只采集、只远程写入,不本地存储不查询,内存占用直接降一档。
remote_write: - url: "https://remote-storage.example.com/api/v1/write" remote_timeout: 30s retry_on_rate_limit: true # 被限流时重试而不是丢弃确认指标:prometheus_remote_storage_samples_pending 应稳定在 0 附近,持续堆积说明远端接收能力跟不上,得扩远端或降采样。
把自观测指标摆上面板
优化别靠体感,盯住三个指标:prometheus_tsdb_head_series(序列数,对应 head 内存)、prometheus_tsdb_compaction_duration_seconds(压缩是否耗时过长)、prometheus_target_interval_length_seconds(实际抓取间隔是否偏离配置)。挂到 dashboard 上看一周趋势,突刺就是信号。
优化不是一次性配置,而是"观察→调整→再观察"的持续过程。具体配置项参考官方文档 docs/storage.md 和 docs/configuration/configuration.md。
【免费下载链接】prometheusThe Prometheus monitoring system and time series database.项目地址: https://gitcode.com/GitHub_Trending/pr/prometheus
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考