用 Netdata 搭建中心化服务器监控(Parent-Child 模式)

948 字
5 分钟
用 Netdata 搭建中心化服务器监控(Parent-Child 模式)

背景#

做深度学习科研经常需要同时用到多台 GPU 服务器跑实验。几台机器各自训练不同的模型,想快速看一眼哪台还有空闲显存、哪台负载已经满了,得分别 SSH 进去敲 nvidia-smi,效率很低。

于是想搭一个 centralized dashboard,能在一个页面看到所有服务器的:

  • 实时 GPU 利用率和显存占用(最重要)
  • CPU、内存、磁盘、网络基础指标
  • 数据保留在自己手里,不强制依赖第三方云服务
  • 免费方案,最好开箱即用

Netdata 是个不错的选择,但默认的 Netdata Cloud 方案虽然免费,GPU 监控和一些高级功能需要付费。于是转向自托管的 Parent-Child 架构:一台 Parent 节点集中存储和展示数据,多台 Child 节点只负责采集和推送。

架构#

  • Parent:接收所有 Child 的数据,提供统一面板,可配置数据保留策略
  • Child:采集本机指标,实时推送到 Parent,本地不长期存储

Parent 节点配置#

选一台服务器作为中心节点,安装 Netdata:

Terminal window
curl https://get.netdata.cloud/kickstart.sh | sh -s -- --install-type any

如果系统包管理器有问题(比如我遇到的 apt hash mismatch),--install-type any 会改用静态二进制安装。

生成 API Key 用于 Child 认证:

Terminal window
cat /proc/sys/kernel/random/uuid
# 输出示例:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

配置 Parent 接收数据:

Terminal window
cd /etc/netdata
sudo ./edit-config stream.conf

写入(把 YOUR_API_KEY 换成上一步生成的 UUID):

[stream]
# Parent 不需要向外推送
enabled = no
[YOUR_API_KEY]
type = api
enabled = yes
allow from = *
db = dbengine
health enabled = yes
enable compression = yes
enable replication = yes

重启生效:

Terminal window
sudo systemctl restart netdata

检查端口:

Terminal window
ss -tlnp | grep 19999
# 应该显示 0.0.0.0:19999 在监听

防火墙放行:

Terminal window
sudo ufw allow 19999/tcp
# 或
sudo iptables -I INPUT -p tcp --dport 19999 -j ACCEPT

Child 节点配置#

在每台需要监控的服务器上:

Terminal window
curl https://get.netdata.cloud/kickstart.sh | sh -s -- --install-type any

配置推送到 Parent:

Terminal window
cd /etc/netdata
sudo ./edit-config stream.conf

修改 [stream] 部分(PARENT_IPYOUR_API_KEY 按实际情况填写):

[stream]
enabled = yes
destination = PARENT_IP:19999
api key = YOUR_API_KEY

PARENT_IP 换成 Parent 节点的实际 IP,api key 必须与 Parent 配置的一致。

重启:

Terminal window
sudo systemctl restart netdata

检查连接:

Terminal window
tail -f /var/log/netdata/error.log | grep STREAM
# 应该看到 "established communication - sending metrics"

GPU 监控配置#

Child 节点如果有 NVIDIA GPU,需要额外启用 nvidia_smi 插件。

先确认驱动已安装:

Terminal window
nvidia-smi

创建配置:

Terminal window
cd /etc/netdata
sudo ./edit-config go.d/nvidia_smi.conf

写入:

jobs:
- name: nvidia_smi

重启 Netdata:

Terminal window
sudo systemctl restart netdata

GPU 图表在 Netdata 面板里的路径是:System → Hardware → GPUs → NVIDIA

验证#

访问 Parent 节点的面板:

http://PARENT_IP:19999

首次访问会进入欢迎页面,可以跳过登录和设置步骤(功能会受限,但基础监控不受影响)。进入主页面后,点击上方标签页的 Nodes 就能看到所有 Child 节点的主机名,点击切换查看各服务器的指标。

数据保留#

Parent 节点默认的数据保留时间可能只有几天。如需延长,修改 netdata.conf

Terminal window
cd /etc/netdata
sudo ./edit-config netdata.conf

找到 [db] 部分调整:

[db]
mode = dbengine
# 根据磁盘空间调整,单位可以是 day, week, month
retention = 30d

重启生效。

总结#

Parent-Child 模式让 Netdata 在免费的前提下实现了中心化监控,特别适合科研场景下管理多台 GPU 服务器:

  • 一眼看清所有实验机器的 GPU 占用,不用反复 SSH
  • Parent 负责存储和展示,可自定义数据保留策略
  • Child 只负责采集,配置简单,几乎零维护
  • GPU 监控无需 Cloud 付费,本地配置即可生效
  • 所有数据留在自己的服务器上

对于不想把监控数据上传到第三方、又需要集中查看多服务器指标的科研场景,这个方案足够轻量且可控。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

用 Netdata 搭建中心化服务器监控(Parent-Child 模式)
https://notes.shimmer93.com/posts/netdata-parent-child-monitoring/
作者
Shimmer93
发布于
2026-03-31
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Shimmer93
由玖露亚酱占领~
分类
标签
站点统计
文章
4
分类
2
标签
18
总字数
4,680
运行时长
0
最后活动
0 天前

目录