登录服务器看负载,打开 htop 那一刻数据是新的,关掉窗口就什么都没留下。昨晚 3 点内存是不是有过一个尖峰?磁盘 I/O 从上周几开始变密的?这类问题 htop 答不了,需要一套持续记录指标的监控。Netdata 是这类工具里对低配机器最友好的一种:一条命令装完,上千项指标自动开始采集,粒度到秒。常见顾虑只有一个——1 核 1G 的服务器带不带得动。答案先给:带得动,官方最低要求就是 1 核加不到 1GB 内存。真正要想清楚的是数据走本机访问还是走它的云服务。
环境说明:本文以 Ubuntu 24.04 为准,官方一键脚本当前安装的是 Netdata v2.x 系列。文中命令来自官方文档,未实测标注的部分以官方说明为准。
装之前先想清楚:数据走哪条路
Netdata 的架构是「Agent 采集 + 可选的 Cloud 汇总」。装之前必须二选一,因为网络暴露面差别很大。
- Agent 独立访问:所有指标留在本机,浏览器访问
http://服务器IP:19999看图表。数据不出服务器,但公网暴露和登录认证要自己解决。v2 起 Agent 登录走 Netdata Cloud 账号,面板没有可用的匿名模式。 - 绑定 Cloud:Agent 通过出站连接把指标推到 Netdata 云端,浏览器登
app.netdata.cloud看所有节点。服务器不开 19999 端口,多台机器一个页面看完。
| 方式 | 数据位置 | 服务器要开的端口 | 适合场景 |
|---|---|---|---|
| Agent 独立访问 | 全在本机 | 19999(建议只对内网或走 SSH 隧道) | 单机、在意数据不出门 |
| 绑定 Cloud | 本机留底 + 云端汇总 | 无需入站端口 | 多机、想随时随地看 |
个人一台 VPS,两种都行;两台以上,Cloud 的多节点视图省事得多。免费账户的节点数上限和保留策略以官方当期套餐说明为准。
安装:一键脚本与 Docker 两种姿势
一键脚本(推荐裸机使用)
wget -O /tmp/kickstart.sh https://get.netdata.cloud/kickstart.sh
sudo bash /tmp/kickstart.sh --dont-start-it
sudo systemctl enable --now netdata
脚本自动识别发行版、装依赖、拉最新稳定版。加 --dont-start-it 是先装包再手动启动,安装日志一目了然。不加也能装,脚本默认装完即启动。想顺手绑定 Cloud,把脚本换成官方页面生成的带 --claim-token 的版本,token 在 Cloud 网页自己的 Space 里点 Connect Nodes。
Docker 方式
已经有 Docker 的机器可以不碰宿主机环境:
docker run -d --name=netdata \
-p 19999:19999 \
-v netdataconfig:/etc/netdata \
-v netdatalib:/var/lib/netdata \
-v netdatacache:/var/cache/netdata \
-v /:/host/root:ro,rslave \
-v /etc/passwd:/host/etc/passwd:ro \
-v /etc/os-release:/host/etc/os-release:ro \
--cap-add SYS_PTRACE \
--restart unless-stopped \
netdata/netdata
挂载 /host/root 等只读路径,是为了让容器里的 Agent 读到宿主机的 /proc 和 /sys。少了这些挂载,容器监控的只是容器自己。SYS_PTRACE 是官方镜像文档要求的权限,用于进程级指标采集。
两条路二选一即可,同机混装会出现两个 Agent 抢端口。
装完先做这 3 件事
- 确认服务:
sudo systemctl status netdata,active (running) 才算过。Docker 部署则查容器日志。 - 看指标:
curl -s http://127.0.0.1:19999/api/v1/info | head -c 400,返回 JSON 即在采集。 - 定 19999 的暴露方式,安全问题见下节。
19999 端口别裸奔公网
Netdata 的 Web 界面能看到系统全貌,直接暴露在公网等于把服务器状态摊给扫描器。三选一:
| 方案 | 做法 | 适用 |
|---|---|---|
| SSH 隧道 | 本机 ssh -L 19999:127.0.0.1:19999 user@服务器,浏览器开 localhost | 单人使用,最简单 |
| 绑定 Cloud | Agent 只做出站连接,入站端口直接不开 | 多机管理 |
| 反向代理加认证 | Nginx 挂 basic auth 或只允许内网网段访问 | 团队共用 |
SSH 隧道最省事:不用改任何配置,连接期间本机浏览器访问 http://localhost:19999 就能看到面板。配合 Cloud 方案则干脆不需要入站端口,暴露面最小。
日常会用到的几条命令
sudo systemctl restart netdata # 改完配置重启
sudo netdatacli reload-health # 只重载告警规则,不重启主进程
配置文件在 /etc/netdata/,官方推荐用自带的编辑器改,改完会自动做语法校验:
sudo /etc/netdata/edit-config netdata.conf
告警阈值默认就有一套(CPU、内存、磁盘都在内),要调整时编辑 health.d/ 下对应的 .conf 文件,改完 netdatacli reload-health 生效。告警通知渠道支持邮件、Slack、Telegram 等几十种,在 edit-config alert-notifications.conf 里配置。具体字段以官方文档对应章节为准。
1 核 1G 到底能不能跑
按官方文档的最低配置要求:1 个核心、不足 1GB 内存即可运行 Netdata Agent(出处:Netdata 官方文档 Getting Started / Installation 章节的资源要求说明)。它对硬件的要求和常见的面板类工具不在一个量级。
实际占用有两个变量:节点上跑的服务越多,自动发现的应用集成越多,常驻内存越高。查询历史图表时会有额外开销。几个可操作的降压手段:
# 降低采集频率,减少 CPU 开销
sudo /etc/netdata/edit-config netdata.conf
# 在 [global] 段设置
# 每秒采集改为每 2 秒一次
[global] 段里把 update every = 1 改成 2,采集开销直接减半,代价是图表粒度从 1 秒变 2 秒——对个人服务器足够用了。内存方面,Netdata 的默认留存策略会自动控制历史数据占用的空间上限。磁盘紧张时在 [db] 段调小保留配额即可,具体参数名以 /etc/netdata/edit-config netdata.conf 里生成的注释文档为准。
给个明确结论:1 核 1G 的机器可以装,采集粒度放到 2 秒更稳妥;纯静态站点或流量极低的机器,装了也不会有感知。
常见问题
装完后 19999 打不开怎么办?
先查服务状态 systemctl status netdata,再查端口监听 ss -tlnp | grep 19999。服务正常但外部打不开,多半是云厂商安全组没放行。走 SSH 隧道方案的话本来就不该放行——本机 curl http://127.0.0.1:19999/api/v1/info 能返回数据就是正常。
Agent 想从 Cloud 解绑怎么操作?
编辑 /etc/netdata/netdata.conf,把 [cloud] 段的 enabled = no,重启 Netdata 后 Agent 回到纯本机模式,已有的本机指标不受影响。
卸载干净用什么命令?
一键脚本安装的用官方提供的卸载器:/usr/libexec/netdata/netdata-uninstaller.sh --force,脚本位于 /usr/libexec/netdata/ 下;Docker 方式直接 docker rm -f netdata 加删卷即可。
指标是实时刷新的,历史数据能回看多久?
Agent 本地数据库按磁盘配额留存,默认配置下能回看的时间取决于磁盘给了多少空间和指标数量,[db] 段可调。需要更长保留期时,官方建议搭配长期存储方案或 Cloud 的留存能力。
容器里的 Netdata 监控的是宿主机吗?
按本文的挂载参数启动,监控对象是宿主机本身;漏掉 /host/root 等挂载时,采集到的就只是容器内部那一层的视图。官方 Docker 文档对这一组挂载有逐项说明。
结尾回到开头的问题:低配服务器装监控,Netdata 的资源门槛已经低到不构成决策因素,真正要选的是数据路径——单机图省事走 SSH 隧道看本机面板,机器多了直接绑 Cloud。先定这条,安装本身只是复制一条命令的事。装完顺手把告警通知渠道配上——出事的时候它得能找到你,这套监控才算真正可用。