关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

2026 服务器租用监控采集容量规划干货:Netdata 采点数与分层存储避坑全攻略

发布时间:2026-10-15

2026 服务器租用监控采集容量规划干货:Netdata 采点数与分层存储避坑全攻略

这篇文章的读者很具体:自己运维着一批云主机或者物理机的中小团队,手上大概十几台到上百台机器,没有专职的监控平台工程师,之前靠云厂商自带的几张图加几个脚本凑合看,现在想把可观测性往前推一步。这类团队最常见的切入方式是装一个边侧 agent,让它每秒把机器上的一切采下来,出问题时打开仪表盘看当时发生了什么。Netdata 就是这条路线上被广泛使用的那一个。它单机的资源占用确实不大,装起来不到十分钟就能出图,于是很自然地被推广到全量机器。问题往往发生在三个月后:有人想把历史留久一点、想把各台机器的图放到一起看,于是加了一台汇聚节点,这台节点在上线当天就被写入和内存压垮,而所有人此前都以为这套东西"很轻"。

先把全篇的结论摆在前面:边侧监控 agent 的容量不是一道"这个软件占多少内存"的常识题,而是一道乘法题——采点数乘以采集间隔的倒数,再乘以留存时长。三个因子里任何一个被低估,结果都是错一个量级。本文按这个乘法骨架往下拆:采点数从哪里来、内存怎么估、dbengine 的多层降采样到底省了什么、磁盘为什么是配额问题而不是容量问题、父节点为什么必须按子节点总和来算、无盘节点该怎么处理、告警引擎本身也是开销,最后给出一份可以直接对照的取舍清单。文中所有数字除非另有说明,都是用于建立量级判断的预估口径,实际数值请以你自己环境实测为准。

采点数由容器数量与网卡数量决定

讨论容量之前必须先统一口径。Netdata 里一条时间序列对应一个采点,通常表现为一张图上的一个维度:整机 CPU 的 user、system、iowait 是三个采点;每块磁盘的读写吞吐、IOPS、忙碌时间、队列长度各自是独立采点;每张网卡的收包、发包、错包、丢包、多播、广播也是各自独立的采点。所以"采点数"约等于这张图上所有维度加起来的条数,而不是图的数量。一个节点上跑的东西越多,条目就越长,这是全部容量计算的起点。

裸机节点的采点大致由三类硬件维度决定。第一类是 CPU:默认会按每个逻辑核出一套采点,一台 32 核的机器光 CPU 相关的 per-core 采点就能到几百条,而多数团队真正会去看的其实只有整机聚合后的那几条。第二类是网卡:每张网卡十来个维度,物理网卡加虚拟网卡加容器网桥加隧道口,一台机器上出现十几个网络接口很常见,这一项就是一两百条采点。第三类是磁盘与挂载点:每块盘一套 IO 维度,每个挂载点一套容量维度,再加上文件系统层面的 inode 占用,做存储的机器这一项会比 CPU 还多。

容器节点是采点数的第一个放大器。容器采集是按 cgroup 逐容器出图的,每个容器会贡献 CPU、内存、磁盘 IO 以及(在配置允许时)网络几个方向的采点,单个容器大致在十几到三十条这个量级(预估,取决于版本与开启的采集项)。二十个容器只是多出几百条,感觉不出来;两百个容器就是几千条,加上宿主机自身的一两千条,整机会到五千到一万条;如果是那种一台机器上跑四五百个短生命周期容器的调度节点,采点数冲到三万条以上并不罕见,是同规格裸机的几十倍。这也解释了为什么同一份配置在裸机上跑得欢,挪到容器宿主机上就把父节点压垮。

第二个放大器是被采集的应用端点。数据库、缓存、消息队列、Web 服务器的监控接口,每一个都会带来几十到几百条采点,而且这类端点的采点结构极不稳定:MySQL 一旦开启按库或按表统计,采点数会随着表数量线性增长,一张分了上百张表的业务库能把采点数一次推高一个数量级;消息队列按主题、按分区、按消费者组出图时同理。这类采点的特点是"安静地涨",业务上线新表、新主题时没人会通知运维,等到父节点报警时已经晚了。

所以第一步动作不是估,是数。装好 agent 之后,用自带的接口或者仪表盘概览把当前节点的采点总数读出来,记下容器数、网卡数、磁盘数、应用端点数,得到"每容器多少条、每张网卡多少条"这几个属于你自己的系数。有了系数,后面所有容量推算才有依据;没有系数,任何"一台机器大概两千条"的说法都只是别人的环境。

削减采点也有明确的优先级。第一刀砍 per-core 采点:核数超过三十二的机器上,逐核曲线基本没人长期看,留整机聚合加负载即可。第二刀砍按库按表类的细分:默认不开,需要定位具体慢查询时临时开,定位完关掉。第三刀砍从没被查询过的采集端点:一个装上去之后半年没人打开过的中间件图,它的成本是每天实实在在的写入与内存,而收益是零。第四刀才是 per-container,因为容器维度的采点在排障时确实有用,砍之前先确认能不能改用按服务聚合。

每秒采集的乘法题:采点数乘采集间隔乘留存

Netdata 默认按每秒一次采集,这是它与多数分钟级监控方案最本质的差别,也是它资源模型的根源。每秒一次意味着一个采点一天产生 86400 个数据点,一万条采点一天就是八亿六千四百万个点。这个数字是全部容量规划的分母,后面每一项都要除以它来检验自己是否算错。

把三个因子写成一个式子:每秒点数等于采点数除以采集间隔秒数;日点数是前者乘 86400;磁盘占用约等于日点数乘每个点的字节数乘留存天数。举例:一台两万条采点的容器宿主机,采集间隔 1 秒,每个点按 4 字节粗算,一天的 tier0 原始层就是 20000 乘 86400 乘 4,约等于 6.9 GB(预估,未计压缩与分层聚合)。留 7 天是 48 GB 左右,留 14 天接近 100 GB。这是一台机器的账。二十台这样的机器如果要在一台父节点上汇聚留存,就是二十倍。

很多人在这道题上犯的错误是只算第一项。他们看到 agent 进程本身占用的 CPU 很低——单机通常只吃掉单核的百分之几(预估,随采点数上升),于是判定"这个东西随便装"。CPU 确实不是瓶颈,采点数、写入带宽、缓存页才是。另一类错误是只算 tier0 而忽略长期层,实际上分钟级与小时级的聚合层因为采样密度低了六十倍与三千六百倍,占用通常是 tier0 的零头;反过来说,长期留存的边际成本几乎完全由 tier0 保留几天决定,想把一年的趋势留住又不肯缩短高精度窗口,是做不到的事情。

这道题还有第四个隐性因子:并发查询。有人打开仪表盘、有人在跑 API 拉取、告警引擎在周期性求值,这些动作都要从缓存页和磁盘上把数据读出来。节点少时它不重要,节点多时它和写入抢同一份缓存、同一块盘。所以完整式子应该是四项相乘再叠加一个查询开销系数,而不是三项。

常驻内存、dbengine 缓存页与查询缓冲的估算口径

内存要分三块算,混在一起算一定会低估。第一块是采点常驻:每条时间序列都有自己的元数据、当前值、以及用于存放最近若干个采样值的槽位,这部分随采点数线性增长,且不受采集间隔影响(间隔只影响刷新频率,不影响条目数量)。第二块是 dbengine 的缓存页,也就是把磁盘上的数据页缓存在内存里的那一部分,它是可配置项,直接决定查询延迟和写入放大,也是父节点上真正的大头。第三块是查询与流式缓冲:API 返回时的临时缓冲、向父节点发送时的缓冲、以及并发查询叠加起来的峰值。

工程上可以用一个粗口径先搭预算:每千条采点的常驻内存大约在 0.5 MB 到 2 MB 这个区间(预估,取决于维度结构、是否启用异常检测、采集间隔与版本)。按这个区间,两万条采点的常驻部分只有 10 MB 到 40 MB,一万条更少。这个结果正是"Netdata 很轻"这个印象的来源,它没错,但它只是三块里最小的那一块。真正把内存吃掉的通常是第二块:默认配置下的缓存页并不大,单机完全够用,一旦这台机器变成父节点承接几十路并发写入,缓存页不够就会频繁换页,表现为仪表盘打开越来越慢、磁盘 IO 持续偏高,而进程 RSS 看起来并不大。

第三个隐形消耗是异常检测类功能。如果开启了基于机器学习的异常概率计算,它会按维度维护模型状态,内存随维度数线性上涨,是那种"不知道什么时候就多吃了 1 GB"的典型(预估)。边缘节点上的合理做法通常是关闭,或者只对关键维度开启,把异常判断放到父节点上统一做。判断依据很简单:如果团队没有人会去看异常概率那张图,这项功能就只是成本。

因此内存预算的写法应该是:常驻加缓存页加查询缓冲,再加三成余量。下单前先按这个口径算,上线后拿进程实际占用与缓存页配置对照修正,而不是照抄"某某配置能跑一百台"这类说法——那句话里的一百台,很可能是一百台采点只有几百条的轻量机器。

dbengine 的分层降采样与追加写盘

dbengine 的核心设计是多层降采样。数据进入后先落在最高精度的那一层,也就是 tier0,粒度等于采集间隔(默认 1 秒);随着时间推移,被聚合成分钟级的 tier1、小时级的 tier2,更高层级依配置而定。每层的"更新间隔"与"保留时长"是分开配置的,具体默认值随版本不同而有差异,动手前请以你所用版本配置文件里的实际值为准。这个设计的意义在于:近处保留高精度用于定位故障瞬间,远处只保留低精度用于看趋势,磁盘不需要为一年前的每一秒买单。

由此得出一条很实用的判断:磁盘占用主要由 tier0 的天数决定,而不是由总留存时长决定。把 tier0 从 14 天缩到 7 天,磁盘几乎减半,而"能看一年趋势"这个能力完全不受影响。反过来,为了省盘把 tier1 的天数砍掉,省下来的空间不到十分之一,却失去了做季度容量规划的依据。这种不对称决定了调参顺序:先动 tier0 天数,再动采集间隔,最后才考虑要不要减少层级。

写盘形态也值得单独说清楚。dbengine 以数据区段为单位追加写入,配合周期性的整理与回收动作,整体是追加写为主、顺序性好的负载。这带来两个直接推论。第一,它对随机写 IOPS 的要求不高,单节点规模下用机械盘也能跑,不必一上来就追 NVMe。第二,它对持续写带宽的稳定性要求很高——写入是均匀且不停歇的,一旦下游出现断档(盘满、文件系统只读、网络存储抖动),压力会立刻回压到采集侧。所以这里最忌讳的一件事是把 dbengine 目录放在网络挂载存储上:远端一次维护窗口,就能让本地采集停摆,而且这类故障通常没有明显报错,只是图断了。

介质挑选的口径是:本地 NVMe 优于本地 SATA SSD,本地 SSD 优于本地机械盘阵列,机械盘阵列优于任何网络挂载存储。单点写入量其实不大——一万条采点、1 秒粒度,写入速率大致在每秒几 MB 量级以内(预估,取决于每点字节与压缩情况),机械盘的顺序写能力足以覆盖;但父节点上是几十路并发写入叠加查询,随机成分被放大,这时 SSD 才成为必需。判断依据不是"快不快",而是"写入模式会不会退化"。

磁盘配额不是容量问题而是回收问题

这是本篇最容易被忽略、也最容易造成事故的一条。dbengine 使用配额制而不是容量制:每个被采集的节点在存储侧有独立的一份磁盘配额,数据写到配额上限后按最旧的数据滚动回收。配额的默认值随版本变化,常见默认量级只有几百 MB,这个量对"看看最近发生了什么"够用,对"留一周"远远不够。所以第一个反直觉的结论是:盘还有几个 TB,不等于能留存很久——配额没改,数据只留那么一点;配额改太大,它会一路涨到把整盘吃满。

第二个反直觉的结论是回收的被动性。配额是软性的滚动目标,实际占用会因为整理动作的滞后而在配额上下浮动,如果整块盘只剩几 GB 可用,回收逻辑就处在很被动的位置:它既要在有限空间里完成整理,又要腾出空间给新写入,同时同盘上的其他服务也在争抢。表现通常是磁盘水位长期贴在九成以上,IO 等待升高,最后整机的其他业务一起变慢。这类故障排查起来很费时间,因为从监控上看"只是监控的盘满了"。

正确的规划顺序是反推:先写清楚 tier0 要留几天,按前面的乘法算出单节点日增量,乘天数得到单节点配额;父节点上再乘子节点数,得到留存盘的总容量;最后在这个数字上加三成余量,作为实际采购的盘容量。留存盘必须是独立分区,最好是独立物理盘,不与系统盘、业务数据盘共用。配额要写进配置并纳入版本管理,而不是"看它涨到哪算哪"。

还有两个监控项必须提前加上。一是留存盘的水位告警,阈值建议设在七成,留出处理时间;二是采集端的写入健康度——如果数据停止落盘而进程还在跑,图会显示正常但历史是空的,这种状态可能持续几周才被发现。定期做一次"回看三天前某个指标的曲线"的人工抽检,是成本最低的有效性验证。

节点类型采点数量级内存关注点磁盘与留存关注点备注
裸机单业务节点,两张网卡两块盘,无容器一千到三千条(预估)常驻仅几十 MB,缓存页按默认即可1 秒粒度留 7 天,日增量约 0.3 到 1 GB(预估),默认配额偏小需上调本地自留最划算,无需父节点
中等密度容器节点,二十到五十个容器五千到一万五千条(预估)常驻加缓存页建议一到两 GB 起步日增量约 2 到 6 GB(预估),留存盘应独立先看 cgroup 采点占比再决定砍不砍
高密度调度节点,两百个以上容器,多网卡多盘三万到十万条以上(预估)可能到 2 到 8 GB(预估),需显式限制缓存页日增量十几 GB 起,本地只宜留一到三天必须实时推父节点,本地仅作兜底
数据库与消息队列密集节点,多实例多库八千到三万条(预估),按表按主题开启后翻倍维度数是主因,细分采集开启后内存非线性上涨按表按主题类采点默认关闭,需要时临时开最容易静默失控的一类节点
父节点,承接二十到一百个子节点流式写入等于子节点采点总和,可达数十万条按总采点算,常见落在 8 到 32 GB 区间(预估)总量等于子节点数乘单节点配额,需专门规划最容易被低估的一环,建议纯汇聚模式
无盘节点与弹性实例,随实例销毁而重建一千到五千条(预估)本地只保留很短窗口,内存压力极小可设为不落盘或留一至两小时缓冲(预估)历史一律以父节点为准,本地不作为依据

父节点要按子节点总和估算

流式传输是这套架构里的关键机制:子节点把采集到的数据实时推给父节点,父节点负责长期留存、跨节点关联查询,以及可选的集中告警。父节点可以只做汇聚,也可以同时采集自己所在机器的数据;前者更干净,资源全部留给汇聚,后者会在排查父节点自身问题时带来便利,但会占用一部分配额与内存。中小团队建议采用纯汇聚模式,并把父节点单独放在一台不跑业务的机器上。

父节点的容量算法只有一条:采点数等于所有子节点采点数之和加自身。内存按这个总和乘每千条采点的常驻系数,再加上一个明显放大的缓存页;磁盘等于子节点数乘单节点配额——因为配额在父节点上是按每个接入节点分别计算的,每个子节点的历史各自成一份,五十个子节点就是五十份。这也是为什么父节点的配置不能照抄子节点:它面对的是一道乘法,而子节点面对的是一道加法。

典型的翻车情形是这样的:团队按"一台普通云主机"的规格买了父节点,四核八 GB、系统盘加一块普通数据盘,接上三十台容器宿主机。上线第一天写入就把数据盘打满,缓存页不足导致打开任意一个仪表盘要等十几秒,告警引擎因为要为三十个节点求值而把 CPU 推高。修的办法不是加 CPU,而是把内存按子节点总和重算、把留存盘换成 SSD 并按节点数乘配额重新规划容量、把本地采集关掉。

网络这一环也要算进去。子节点到父节点的流式带宽约等于每秒点数乘每点字节再算上协议开销,一万条采点每秒的量级大致在几百 KB 每秒到 1 MB 每秒之间(预估,取决于压缩与协议封装)。三十台这样的节点汇聚到一处,就是十几到三十 MB 每秒的持续上行,跨地域汇聚时要把它计进带宽规划,并要求断流期间子节点本地能保留一段窗口以便重连后回补。这一步常被忽略,表现为父节点上总有一些节点的数据缺几分钟。

判断什么时候必须单独上父节点,可以用几条硬线(预估阈值,按团队实际规模调整):子节点数量超过二十台;单节点采点稳定超过一万条;需要跨节点做关联查询或统一告警;需要超过三十天的留存;环境中存在无盘或弹性节点。命中任意一条,单独规划一台父节点都比继续在各子节点本地加盘更划算,因为本地盘成本要乘节点数,而父节点成本只出现一次。

无盘节点与弹性实例只留短窗口

容器实例、按需扩容的弹性节点、以及把数据目录放在临时盘上的节点,有一个共同特征:重启之后本地历史归零。对这类节点来说,本地留存的责任应该被主动放弃——它在磁盘寿命、IO 争抢、以及配额管理上都要付出成本,而产出的数据随时可能被抹掉,投入产出比极差。

正确做法是把留存责任整体上移到父节点。本地可以把内存模式配成不落盘,只保留极短的一段时间窗口作为断网缓冲,然后实时推给父节点。窗口留多长是一个取舍:留得太短,父节点一次网络抖动就会造成历史缺口;留得太长,又回到了给临时节点配盘的旧路上。工程上常见的折中是留一到两小时的缓冲(预估),代价是一点磁盘,换来的是父节点短暂不可用时数据不丢。

还有一类隐蔽的问题来自节点身份。如果 agent 随业务镜像打包启动,每次副本重建都会生成一个新的节点标识,父节点上会堆积大量只存在了几分钟的主机条目,配额被这些短命节点分摊,仪表盘上的主机列表会被刷屏,告警规则也会对不存在的节点求值。解决办法是把采集放到宿主机侧统一做,或者把节点标识显式固定成有意义的名称,而不是让它跟着实例 ID 走。这件事在弹性伸缩频繁的环境里不做就一定会出问题。

另外提醒一句:把本地设为不落盘之后,排障时的"现场"就完全依赖父节点了。这意味着父节点的可用性等级必须高于子节点,它的留存盘水位、写入健康度、以及备份策略都要单独设告警。团队里至少要有人清楚"父节点挂了两小时"意味着什么——不是图看不到,而是这两小时的历史永远补不回来。

健康检查的边缘计算开销与告警去重

告警不是免费的。健康检查在边缘实时计算:告警引擎按自己的节奏对每条规则求值,规则的每一次求值都要读取相应采点的一段窗口数据并做统计,成本与"规则条数乘采点数"成正比(具体求值周期以所用版本的配置为准)。节点少、规则少时它完全无感;节点多、规则多时,它是一笔稳定的 CPU 与内存开销。更需要注意的是父节点:如果选择在父节点上为所有子节点统一跑健康检查,这份开销会再乘一遍子节点数,这也是纯汇聚父节点需要中等核数的原因之一。

告警噪音的治理要提前设计,事后补救的成本很高。第一条是延迟触发:要求条件连续满足若干次才真正告警,用几个采集周期换掉大部分毛刺引起的误报,这是投入产出比最高的一条。第二条是分组聚合:同一服务的多个实例按角色聚合成一条告警,而不是每台机器各发一条;一个三十节点的集群里,一次上游抖动如果产生三十条告警,收件人学会的第一个动作就是屏蔽这个通知源。第三条是维护窗口与静默机制:发布、扩容、计划内重启前静默相关规则,否则"计划内重启"会周期性触发告警风暴,团队对告警的敏感度会在两三个月内被彻底消耗掉。

采集间隔与告警灵敏度之间存在直接冲突,这一点要在放宽间隔之前想清楚。间隔从 1 秒放宽到 2 秒,短于两秒的瞬时尖峰可能被平滑掉,那些"短事件即故障"的指标——请求延迟的尖峰、秒级超时、垃圾回收停顿、连接池瞬间打满——会变成看不见的东西。处理办法不是放宽阈值,而是改变统计口径:把瞬时值判断改成一分钟窗口内的最大值或高分位数判断,这样即使采样变粗,异常依然会被抓住,只是时间点精度降低到可接受范围。

规则数量要设上限,并且每条规则都要有认领人。允许所有人随意添加告警规则的团队,三个月后通常会积累到一半规则无人认领、告警发生时没人知道该找谁的程度。定期做一次规则体检:把过去一个季度从未触发过的规则、以及触发后从未被处理过的规则列出来,前者考虑删除,后者要么修阈值要么删。告警系统的价值与规则数量是负相关的。

采集间隔从 1 秒放宽到 2 秒的减半效果

这一条单独拿出来讲,因为它是所有优化手段里收益最直接、代价最容易评估的一项。机制很干净:tier0 每秒产生的数据点减半,于是采点槽位与缓存页压力减半、磁盘日增量减半、父节点的流式写入带宽减半、查询时要扫描的数据量减半。对前面那台两万条采点的机器来说,日增量从约 6.9 GB 降到约 3.5 GB(预估),一台机器的留存盘需求直接砍掉一半,父节点上则是 N 台机器一起砍。

代价是时间分辨率减半。这里要注意聚合方式:如果降采样用的是平均值,两秒内的尖峰会被削平;如果保留的是最大值,峰值仍在,但它的发生时刻精度下降。所以对"峰值型"指标放宽间隔的损失,比"均值型"指标小一些。判断标准是这个指标的变化速度快不快:磁盘容量、inode 使用、连接数的基线、温度这类慢变量,放到 5 秒甚至更长也毫无损失;请求速率的突发、延迟分位数、队列瞬时打满这类快变量,放宽就等于放弃观测。

更好的做法不是整机一刀切,而是分级。多数采集框架支持按采集模块单独设置更新间隔,把关键业务指标保持在 1 秒,把慢变量与容量类指标放宽到 2 到 5 秒,把那些只是"定期看一眼"的中间件指标放宽到 15 秒甚至更长。按采点占比加权之后,这种分级往往能用不到两成的观测损失换到四成以上的资源下降(预估),比整体放宽划算得多。前提是团队愿意花半天时间梳理一遍指标分级表——这份表做完之后,后面每一次扩容都不用再纠结。

反过来也要说清楚:把间隔从 1 秒压到亚秒级在绝大多数场景没有意义。成本翻倍,而真正需要亚秒分辨率的排查,一年里可能遇不到一次。只有在定位特定的亚秒级抖动、并且已经用 1 秒数据确认了问题存在但看不清形状时,才值得临时把某几个模块调到更高精度,定位完立刻调回来。把它当成常规配置是一种浪费。

减采点、放宽间隔、上父节点的取舍边界

把前面的分析收成一份可以照着执行的清单。该减少采点的信号有四个:容器数超过一百且 per-container 采点占总采点一半以上;CPU 逻辑核数超过三十二且逐核曲线长期无人查看;数据库或消息队列开了按库按表按主题的细分但没人用;采集端点里存在半年没被打开过的中间件。命中任意一个,第一动作都是砍采点,因为它是乘法的第一个因子,砍一半等于全线减半。

该放宽采集间隔的信号有三个:单个节点采点稳定过万且内存或磁盘吃紧;父节点上行带宽成为瓶颈但又不方便改造网络;团队确认某批指标只用于趋势观察而不用于定位。执行时按指标分级表做,不要整机一刀切;先放宽慢变量,再看效果,最后才动关键指标。该上父节点的信号前面已经列过,这里补一条成本判断:本地留存的成本等于单节点盘容量乘节点数,父节点的成本是一次性的,节点数超过十几台之后,继续在各子节点本地加盘几乎总是更贵的选择。

还有一种情况要明确说出来:什么条件下"每台机器装个 agent"比拉一套中心化监控更合适。团队规模在几个人、节点数在几十台以内、主要诉求是出问题的时候能立刻看到当时发生了什么、没有专人维护时序库与告警平台——这种情况下,边侧 agent 自带仪表盘与告警,落地成本远低于自建一条采集加存储加展示加告警的完整链路。硬要上一套中心化平台,常见结果是把一个人的精力长期绑在平台维护上,而业务侧只用到其中两成功能。

什么时候不该只装 agent 也很清楚:需要跨季度甚至跨年的容量趋势做预算;需要把技术指标与业务指标放在同一张图上关联;需要统一的权限、审计与多租户隔离;留存周期长到单机本地盘无法承受。这时的正确形态是分工——agent 负责边侧短周期高精度,中心化时序库或远端写后端负责长周期低精度,父节点承担两者之间的桥梁。把它们当成二选一,是这类项目里最常见的方向性错误。

最后一条是流程建议:先写留存策略文档,再定机器配置。文档里要写死四件事——留多久、留哪几类、谁来查、多久没人查就关掉。没有这份文档,加多少内存和盘都是凭感觉下注,而且半年后没有人能说清当时为什么是这么配的。

一万网络面向 Netdata 采集留存场景的服务器租用配置口径

回到"谁、在哪里、做什么、为什么、怎么选"这五个问题。谁:自己运维十几台到上百台云主机或物理机的中小技术团队,没有专职监控平台工程师。在哪里:机器的部署位置按业务用户的就近原则选择,中国香港、中国澳门、中国台湾以及内地区域各有不同的网络与合规条件,跨境访问时延与数据留存要求请按自身业务实际情况与当地规定确认。做什么:在每台业务机上运行边侧 agent 做每秒采集与本地短周期留存,再单独规划一台父节点做汇聚与长周期留存。为什么:本地高精度解决"刚才发生了什么",父节点与后端解决"这个季度怎么变的",两者成本结构完全不同,混在一台机器上必然两头不讨好。

具体口径如下(均为预估,用于建立量级,下单前请以真实节点实测结果修正)。边缘业务节点:内存通常不是瓶颈,agent 常驻与缓存页合计多在几百 MB 到 1 GB 以内,重点在磁盘——给一块独立的 SSD 留存盘,容量按采点数乘每点字节乘 tier0 天数算出后再加三成余量。父节点:内存按子节点采点总和计算,常见落在 8 GB 到 32 GB 区间;CPU 中等核数即可,因为流式写入不是重计算负载,核数主要服务于并发查询与集中告警求值;磁盘按子节点数乘单节点配额计算并留三成余量,介质优先级为本地 NVMe 优于本地 SATA SSD,本地 SSD 优于本地机械盘阵列,而网络挂载存储不建议用于 dbengine 目录。带宽:按子节点每秒点数折算持续上行量,并预留抖动余量。

一万网络深耕 19 年(成立于 2007 年),天下数据品牌长期做服务器租用与机房资源交付,在这类场景里能提供的具体帮助是把上面这份口径落成可执行的机器规格:节点数、单节点采点量、tier0 留存天数这三个数给过来,就能反推出父节点需要多少内存、多大的留存盘、什么介质,以及边缘节点是否需要独立数据盘。机器规格、带宽档位与盘型组合的具体费用属需询价,公开渠道差异较大,以实时报价为准,本文不给出任何精确金额。

一条务实的落地顺序建议:先在一台真实业务节点上跑满一周,读出采点总数与 dbengine 目录的实际日增量,用这两个真实数字替换本文所有预估,再去定父节点的规格。这一步花的时间通常不超过一周,但它能把采购决策从猜测变成算术,也避免了一开始就为不存在的采点量买单。

数据来源与核对方式:Netdata 采点数与分层留存的口径清单

第一,采点数以 agent 自身接口或仪表盘概览读出的实际数值为准,不要用"一台机器大概多少条"这类通用估计,也不要跨环境套用别人的数字;容器数、网卡数、磁盘数、应用端点数这四个变量变了,采点数就完全不同。第二,采集间隔、分层层数、各层更新间隔与保留时长,以及 dbengine 相关缓存与配额参数的默认值,随版本不同而存在差异,核对时请以你所用版本配置文件中的实际值为准,本文不引用任何具体默认数值。

第三,每点字节数与压缩比的核对办法是实测:记录 dbengine 数据目录在一段时间内的占用增量,除以同期的点数增量,得到属于你自己环境的那个比值,再拿它去替换本文粗算中使用的 4 字节口径。第四,内存以进程实际占用加缓存页配置值为准,并分别统计常驻、缓存、查询缓冲三块,不要用单一经验值下单。第五,父节点规模按子节点采点总和乘节点数计算,配额按每个接入节点单独一份计入。

第六,跨地域部署涉及的网络时延、带宽成本与数据留存合规要求,请按业务所在地与当地规定自行确认,本文不做任何跨区域合规结论。第七,本文涉及的费用一律为需询价,公开渠道差异较大,以实时报价为准。第八,除明确说明的引用外,本文所有数字均为预估口径,作用是建立量级判断与划定取舍边界,不构成交付承诺;实际选型请以一周实测数据为准。


上一篇:两条链路做冗余为什么反而更慢:SAN 多路径的路径策略该怎么选

下一篇:防火墙规则从几百条长到几万条之后:iptables 与 nftables 的匹配方式差在哪