Prometheus 存储规划实践:从样本到容量的账本
先看两个真实场景某团队接了一个 Spring Boot 应用开了 Micrometer 的 percentiles-histogram 后Grafana 面板曲线全部正常但 Prometheus 的内存从 2GB 一路涨到 6GB不到一周磁盘告警。另一头某团队的监控面板上up全绿但scrape_samples_scraped单 target 已经冲到 8 万Prometheus 的内存配额明明很高查询却越来越慢。这两个问题的答案都在同一笔账里样本数 → 序列数 → 磁盘/天 → 内存水位。本篇目标把 Prometheus 存储规划的完整账本拆一遍并提供可落地的规划建议。一、先理清三个概念指标、样本、时间序列很多人把这几个词混着用但存储规划的每一步计算都要用到它们混了就一定会算错。概念定义存储中的角色示例指标 Metric“测什么”的名称一条时间序列的名字node_cpu_seconds_total标签 Label键值对多维区分序列的唯一性由“指标名 全部标签组合”决定cpu0, modeidle时间序列 Time Series指标名 一组标签唯一确定一条序列近似等于scrape_samples_scraped磁盘和内存的最小计量单位node_cpu_seconds_total{cpu0, modeidle}样本 Sample时间序列在某个时间点的值实际写入 TSDB 的最小单元时间戳 值如1710000000000 1027四者关系一个指标可以有 N 条序列一条序列每秒或每个抓取周期产生一个样本。示例node_cpu_seconds_total指标在 8 核机器上带cpu8 个值和mode约 8 个值两个标签组合出 64 条序列。每 15 秒抓一次每分钟就产生 64 × 4 256 个样本。二、抓取一次到底产生多少样本1、内置指标抓取链路的固定开销无论 target 暴露多少业务指标Prometheus 每次抓取都会额外写入 8 个内置指标内置指标序列数指标含义up1上次抓取是否成功。2xx 且响应体可解析才记 1其余一律 0。监控体系自己的第一条告警scrape_duration_seconds1上次抓取总耗时覆盖发起请求到解析完响应体的全过程scrape_samples_scraped1上次抓取解析出的样本数metric relabel 之前的近似值scrape_samples_post_metric_relabeling1relabel 之后真正入库的样本数scrape_series_added1上次抓取中首次出现的序列数scrape_body_size_bytes1响应体未压缩大小无法获知时为 -1scrape_timeout_seconds1该 target 配置的抓取超时随配置变化scrape_sample_limit1该 target 的单次样本上限0 表示不限2、常见 exporter 的指标规模一张参考表下表汇总各 exporter 在默认配置下的指标数量全部为经验值不同版本和配置会有差异Exporter默认采集指标数约单 target 序列数约主要来源备注node_exporter800 1,0001,500 2,000cpu、meminfo、diskstats、netdev、filesystem 等 50 collector机器核数、磁盘数影响序列数Spring Boot (Micrometer/Actuator)300 500500 1,000JVM、HTTP、Tomcat、Druid、logback开了 percentiles-histogram 后基数 ×20nginx-exporter (OSS)8 exporter 自带10 50stub_status 四类指标带server_zone等标签时增加blackbox_exporter10 20 每 target10 20probe_success、probe_duration 等N 个 target ×10~20sql_exporter取决于自定义 SQL每条 SQL 标签组合业务数据由 collector 定义必须受控标签基数 ≤ 10³mysqld_exporter800 1,2001,500 2,000连接数、慢查询、缓存命中、InnoDB版本差异较大redis_exporter300 500500 800内存、命中率、客户端数多实例时按addr标签区分关键结论node_exporter 和 mysqld_exporter 是最“重”的单 target 序列数轻松破千Spring Boot 应用在默认配置下可控一旦开启 percentiles-histogram20 倍基数翻倍是常态业务类 exportersql_exporter的序列数完全由SQL 决定是唯一可以“主动控制”的部分。3、用两个内置指标对账scrape_samples_scraped是解析出的样本数scrape_series_added是“第一次见到”的序列数。两者关系scrape_samples_scraped ≈ 该 target 的序列总数近似 scrape_series_added 本次抓取新增的序列数三、存储计算公式样本怎么变成字节1、TSDB 压缩后的样本大小Prometheus 本地 TSDB 采用 Gorilla 压缩压缩后每个样本约 1.5 2 字节。这是全篇唯一一个需要记住的常数。磁盘/天 序列数 × (86400 / 抓取间隔秒) × 样本字节数(2)单位换算项公式每 target 序列数scrape_samples_scraped近似每 target 样本/秒序列数 ÷ 抓取间隔秒每 target 磁盘/天样本/秒 × 86400 × 2 字节全部 target 汇总Σ每 target 磁盘/天2、一套验证环境的完整算账以下按本系列验证环境的规模算一笔账来源序列数约抓取间隔样本/秒磁盘/天5 台主机node_exporter4,000 × 5 20,00015s1,333230 MB3 个 Spring Boot 应用4,500 × 3 13,50015s900155 MB直方图开启后×20 基数90,000 × 3 270,00015s18,0003.1 GBnginx 入口3 个实例50 × 3 15015s101.7 MBblackbox10 个 target15015s101.7 MB没开直方图时全部加起来约390 MB/天15 天保留期也就 6 GB本地盘完全够直方图一开3.1 GB/天15 天就是 46 GB立刻变成了另一个量级。核心结论很多“需要长期存储”的场景先做减法比先上架构更有效。3、内存的计算比磁盘更先爆磁盘只是最直观的内存往往是更早触顶的那一个。Prometheus 的内存主要消耗在内存水位 ≈ 活跃序列数 × 每个序列的内存开销约 1 4 KB​序列数估算内存10 万100 400 MB50 万500 2 GB100 万1 4 GB300 万3 12 GB⚠️ 注意Prometheus 官方建议单节点活跃序列数不要超过 100 万超过后内存和查询延迟会迅速恶化。查询时的临时内存还要额外叠加range query 扫 30 天数据序列数过万后直接打爆内存是常事。四、单 Prometheus 能支持多少 target1、三个约束条件不是“能连上”就是“能支持”。单 Prometheus 的 target 容量受三个约束共同决定取最小值约束临界值超出后果序列数上限100 万活跃序列官方建议内存触顶、查询变慢、OOM抓取带宽所有 target 的样本/秒 Σ(序列数 ÷ 间隔)TSDB 写入跟不上背压丢样本磁盘吞吐样本/天 × 2 字节保留期缩水或直接写满2、反推 target 数上限以最常见的 node_exporter 为例单台 8 核机器约 2,000 条序列15s 抓取间隔单 target 样本/秒 2,000 ÷ 15 ≈ 133 单 target 磁盘/天 133 × 86400 × 2 ≈ 23 MB按 100 万序列上限反推target 数上限 ≈ 1,000,000 ÷ 2,000 500 台 node_exporter如果换成 Spring Boot 应用未开直方图约 1,000 条序列target 数上限 ≈ 1,000,000 ÷ 1,000 1,000 个应用但注意上述只是序列数约束磁盘是另一道坎。500 台 node_exporter 每天产生约 11.5 GB30 天保留期需要 345 GB 磁盘。3、一张规划速查表监控规模目标数约序列数约CPU内存SSD 存储说明小规模10 305 万 15 万2 核4 GB50 GB保留 30 天足够中小规模30 10015 万 50 万4 核8 GB100 200 GB数据保留 30 天大规模100 50050 万 100 万8 核16 32 GB300 500 GB保留 30 90 天需监控自身极限场景500估算 100 万8 核32 GB1 TB理论上限需分层抓取 裁剪五、规划建议先做减法再做加法1、减法一分层抓取间隔不是所有指标都需要 15s 精度。告警类指标用 15s趋势类指标用 60s样本量直接降 75%# 同一个 exporter两个 job 两档间隔-job_name:node-detail# 告警用15sscrape_interval:15sfile_sd_configs:[{files:[/etc/prometheus/targets/node.yml]}]-job_name:node-archive# 长期趋势用60sscrape_interval:60sfile_sd_configs:[{files:[/etc/prometheus/targets/node.yml]}]2、减法二丢弃确定不看的序列用metric_relabel_configs在采集末端裁剪它发生在relabel_configs之后、样本入库之前metric_relabel_configs:# node_exporter 的 Go runtime 指标对业务无用直接丢-source_labels:[__name__]regex:go_(gc|memstats|threads|info)_.*action:drop# 只保留 2xx/5xx 状态码维度的桶1xx/3xx 不看-source_labels:[status]regex:1..|3..action:drop⚠️ 注意drop 是不可逆的宁可保守。删掉一条序列历史数据一起消失。规则上线前先在验证环境跑一周确认没有面板和告警引用这些序列再全量铺开。以下是常用 exporter 的丢弃方式参考1几乎所有 exporter 都有的Go 运行时指标绝大多数官方 exporternode、mysqld、redis、blackbox 等都是 Go 写的默认会暴露go_*和promhttp_*前缀的进程自监控指标这些对监控业务毫无价值可直接丢弃。但针对 Prometheus Server不能丢弃比如process_resident_memory_bytes指标常用来监控 Server 端内存消耗情况。metric_relabel_configs:-source_labels:[__name__]regex:go_.*|promhttp_.*# go_ 运行时、promhttp_ 采集器自身action:drop2node_exporter 可丢弃序列参考node_exporter 是序列量的最大来源也是可裁剪空间最大的一个。分两层整个收集器没用和收集器里个别指标没用。层一按场景禁用的收集器很多收集器只在特定环境下才有意义非该环境可整体禁用收集器说明禁用建议mdadm软件 RAID 设备无 RAID 时禁用zfsZFS 文件系统非 ZFS 环境禁用ipvsIP 虚拟服务器非负载均衡禁用schedstat调度器统计非调试场景禁用arpARP 表多数场景无用sockstatSocket 统计多数场景无用softnet软中断统计多数场景无用netstat网络统计多数场景无用禁用方式node_exporter 启动参数node_exporter\--no-collector.arp\--no-collector.ipvs\--no-collector.sockstat\--no-collector.softnet\--no-collector.mdadm\--no-collector.zfs\--no-collector.schedstat层二虚拟文件系统序列大户中的大户即使保留filesystem收集器挂在/dev、/proc、/sys以及 Docker/Kubelet 目录下的虚拟文件系统会产生大量几乎无用的序列必须排除node_exporter\--collector.filesystem.mount-points-exclude^/(dev|proc|sys|var/lib/docker/.|var/lib/kubelet/.)($|/)\--collector.filesystem.fs-types-exclude^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$层三relabel 丢弃特定指标对于没有 exclude 参数、又确定不用的指标用metric_relabel_configs精确丢弃metric_relabel_configs:# 丢弃 IPv6 网络统计、conntrack、时间校验等低价值指标-source_labels:[__name__]regex:node_(nf_conntrack_stat|netstat_.*6|timex_pps|network_carrie|network_iface|scrape).*action:drop3nginx-prometheus-exporter 保留序列参考metric_relabel_configs:# 只保留需要的指标-source_labels:[__name__]regex:nginx_up|nginx_exporter_build_info|nginx_connections_*|nginx_http_requests_totalaction:keep4blackbox-exporter 可丢弃序列参考blackbox_exporter 在探测失败时会导出一系列值为 0 的 phase 指标probe_http_duration_seconds{phaseconnect} 0等会严重干扰聚合分析。metric_relabel_configs:# 当 probe_success 0 时丢弃所有 probe_http_duration_seconds 序列-source_labels:[__name__,probe_success]separator:regex:probe_http_duration_seconds0action:drop3、减法三管住标签基数标签基数失控是序列数爆炸的头号原因。单指标标签基数 ≤ 10³多标签乘积 ≤ 10⁴绝不把user_id、order_id、trace_id放进标签SQL 内先 GROUP BY 收敛维度再返回。用scrape_samples_post_metric_relabeling / scrape_samples_scraped看 relabel 砍掉的比例长期偏高要回头审规则用scrape_samples_scraped环比对比 1 天前识别基数漂移。4、加法远程存储留后路做完减法仍不够需要全局查询、跨多套 Prometheus 聚合、自动降采样时再考虑 remote_write 到 VictoriaMetrics / Thanos / Mimir。六、小结本篇核心要点三个概念先分清。 指标、样本、时间序列是三件事指标决定“测什么”标签组合决定“序列数”样本是磁盘和内存的最小计量单位。混着用一定算错账。固定开销要计入。 每个 target 每次抓取固定产生 8 条内置序列这是监控自己的税不随 exporter 变化。公式只有一条。 磁盘/天 ≈ 序列数 × (86400 ÷ 抓取间隔) × 2 字节内存用水位 ≈ 序列数 × 1 4 KB。按常用 exporter 的序列数对照表代入即可。先做减法再做加法。 分层抓取间隔、metric_relabel 裁剪、标签基数管控三招能救回大半块磁盘还不够再上远程存储remote_write 是成本最低的保留期延长手段。监控自身是底线。 务必监控 Prometheus 的process_resident_memory_bytes和磁盘使用率否则会在“Grafana 曲线停更”时才发现磁盘已满而那个判断本身也依赖 Grafana 可用故障是自指的。​

相关新闻

AI工具的结果怎么交付?产物版本、预览、下载与验收证据

AI工具的结果怎么交付?产物版本、预览、下载与验收证据

AI 或媒体任务显示“已完成”以后,用户真正关心的往往才刚开始:下载的是哪一版结果?文件是否真的能打开?预览和下载是否对应同一个内容?结果被覆盖后还能不能查回旧版?如果交付环节只保存一个 output.mp4 路…

2026/10/10 6:17:51 阅读更多 →
汽车空调制冷剂怎么认?R134a、R1234yf与R744

汽车空调制冷剂怎么认?R134a、R1234yf与R744

汽车玻璃左下角或者右下角的那串字符,分四类信息:认证标志、生产厂家代码、玻璃类型代号与生产日期。四类字符各有各的编码规则,读法并不相同。 标识由哪几类字符构成 不同厂家印的标识版式不一样,字符大体落在四类信息上。认证标…

2026/10/10 6:16:51 阅读更多 →
【2026最新实测】降AI率网站哪家强?学生党高性价比工具大盘点

【2026最新实测】降AI率网站哪家强?学生党高性价比工具大盘点

本文给学生党做降AI工具选型:预算紧、要过知网/维普AIGC检测、又不想改完重新调格式,直接看实测结论和分档推荐。 一、学生党选降AI工具,先看这 3 个硬指标 降AI率和降重不一样。降重看重复片段,降AI看“机器味”:句式…

2026/10/10 6:16:51 阅读更多 →

最新新闻

C#运算符重载实战指南:值类型、语法规则与常见陷阱全解析

C#运算符重载实战指南:值类型、语法规则与常见陷阱全解析

C#的运算符重载是个很容易被当成“花活”的特性。刚入行时我也觉得这玩意儿就是给自定义类型加上数学符号,写出来像在炫耀语法。直到后来做上位机数据采集、做科学计算库、做表达式树封装,才发现运算符重载真正解决的问题,是让业务代码从“一…

2026/10/10 7:00:09 阅读更多 →
储能一体机如何落地企业能源管理:从削峰填谷到生产保障

储能一体机如何落地企业能源管理:从削峰填谷到生产保障

1. 从“交电费”到“管能源”:储能一体机解决的核心痛点先聊一个我这两年反复跟企业客户说的观点:绝大多数企业不是缺电,而是缺一套能把电“算明白、管起来”的系统。过去工厂怎么用电?变压器一接,电表一转&#xff0c…

2026/10/10 7:00:09 阅读更多 →
预约挂号小程序开发实战:后端接口、数据库设计与避坑指南

预约挂号小程序开发实战:后端接口、数据库设计与避坑指南

简介:这是一份面向计算机专业毕业设计或课程设计的微信小程序预约挂号系统项目,覆盖管理员、医生、用户三类角色,包含科室与医生信息、排班、预约、取消预约、调班申请等核心模块;后台采用 Java SSM 框架,搭配 MySQL 数…

2026/10/10 7:00:09 阅读更多 →
PyTorch图像分类实战:从CNN搭建到CIFAR-10模型训练与推理

PyTorch图像分类实战:从CNN搭建到CIFAR-10模型训练与推理

图像分类是深度学习入门绕不开的第一个完整落地场景。我见过很多新手朋友从张量操作、反向传播一路学过来,但真正打开PyTorch、加载一批图片、把训练循环跑通、最后看到准确率升上去——这中间的距离比想象中要大不少。这篇内容我打算直接用一套完整的代码实战来带大…

2026/10/10 7:00:09 阅读更多 →
国产操作系统深度调研:技术路线、生态适配与实战避坑指南

国产操作系统深度调研:技术路线、生态适配与实战避坑指南

1. 国产操作系统调研的切入角度与整体思路1.1 为什么现在值得认真做一次深度调研国产操作系统这个话题,过去几年一直处在“热度高、落地难”的尴尬区间。很多人对它的印象还停留在“能用但不好用”的阶段,但如果你最近一年真正在物理机上装过、在项目里适…

2026/10/10 7:00:09 阅读更多 →
Windows登录国密UKey双因子认证改造:从证书到登录的落地实践

Windows登录国密UKey双因子认证改造:从证书到登录的落地实践

前阵子做了一套Windows登录的强身份认证改造,核心目标很明确:让内网Windows机器在登录和解除锁屏时必须插入国密UKey,同时输入PIN码,才能进入系统。整体看,这就是把“一张密码走天下”升级成“硬件密钥PIN”的双因子认…

2026/10/10 6:59:09 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →