告别Zabbix?我用Netdata只花10分钟就搞定了50台服务器的秒级监控(保姆级实战)

开篇闲聊

大半夜的,刚处理完一个MySQL的慢查询,手里这杯速溶咖啡都凉透了。

我就在想,咱们做运维的,最怕的是什么?不是服务器宕机,宕机了反而干脆,直接重启或者切备机。最怕的是那种"慢"。业务说卡,老板说卡,你上去一看,CPU利用率像过山车一样,一会儿100%一会儿5%,内存波澜不惊,日志里也是静悄悄的。

这时候你用的如果是Zabbix,默认30秒或者1分钟抓一次数据,大概率你看到的都是"正常"。为啥?因为故障往往就发生在那个间隙里,那几秒钟的IO风暴,Zabbix这种"老实人"根本抓不住。

这时候你就需要Netdata了。这玩意儿默认1秒抓一次数据,就算是一闪而过的毛刺,在它眼里也跟慢动作回放似的。

但是!Netdata有个最大的毛病:单机版太爽,多机版头疼。

你装一台爽一台,装十台,你就得开十个浏览器标签页。要是五十台呢?你是不是得买个那啥,股票交易员用的六联屏显示器?

所以这篇咱们就聊透一件事:怎么把这一堆Netdata汇聚到一个界面上看,也就是所谓的Streaming(流式传输)模式。 别跟我提Netdata Cloud,那是SaaS服务,虽然好用,但咱们很多时候机器在内网,或者因为安全合规(其实就是抠门不想买商业版或者不想数据出境),还得是自己搭建中心节点最靠谱。

搞清楚谁是老大,谁是小弟

逻辑其实特别简单,别被官方文档里那一堆术语吓到了。

你就把这套架构想象成"包工头"和"搬砖工"。

  • 搬砖工(Slave/Child):就是你那些干活的业务服务器。它们上面装Netdata,只负责玩命采集数据,采集完了自己不存(或者少存),直接打包扔给包工头。
  • 包工头(Master/Parent):这是一台专门的监控服务器。它负责接收所有搬砖工扔过来的数据,存盘,展示,报警。

这样搞有个巨大的好处:业务服务器上不用消耗内存去存历史数据了,特别省资源。

第一步:先把地基打好(安装)

现在安装Netdata简直太无脑了。不管你是Master还是Slave,起手式都一样。我不建议你们去搞什么Docker安装,真的,物理机直接装最省事,能读到更多底层硬件信息。

随便找台CentOS或者Ubuntu,一行命令甩进去:

Bash

复制代码
bash <(curl -Ss https://my-netdata.io/kickstart.sh)

这脚本虽然有点"暴力",但它会自动识别你的系统,把缺的依赖包给你补齐。等个几分钟,看到那个炫酷的ASCII艺术字出来,就是装好了。

记得把防火墙端口放开,默认是19999。要是这都忘了,后面你也别看了,洗洗睡吧。

第二步:搞定"包工头"(Master配置)

重点来了。这块经常有人掉坑里。

我们要生成一个API Key(其实就是个UUID),这玩意儿就像是接头暗号。小弟要给大哥交数据,得先对暗号。

在Master服务器上,用uuidgen命令生成一个:

Bash

复制代码
uuidgen
e1540a6c-f179-476f-813d-d0c46000eb15

假设你生成的是 e1540a6c-f179-476f-813d-d0c46000eb15(我也就随手一打,你自己生成个真的)。

然后去改配置文件。Netdata的配置文件逻辑稍微有点绕,它为了防止你改乱,搞了个edit-config脚本。

Bash

复制代码
cd /etc/netdata
./edit-config stream.conf

进去之后,把那些注释都还得差不多了,我们要加上这一段:

Ini, TOML

复制代码
[e1540a6c-f179-476f-813d-d0c46000eb15]
    enabled = yes
    default history = 3600
    default memory mode = dbengine
    health enabled by default = auto
    allow from = *

解释两句:

  • [UUID]:就是刚才生成的那个。
  • default memory mode = dbengine:这个很关键!以前Netdata存数据吃内存吃到你怀疑人生,现在用了dbengine,它是把数据压缩存硬盘里,内存只留索引,几百台机器的监控数据,几个G内存就能扛得住。
  • allow from = *:允许所有IP推数据过来。如果你为了安全,可以写具体的IP段,比如 192.168.1.*

改完保存。顺手重启一下:systemctl restart netdata

第三步:调教"搬砖工"(Slave配置)

现在回到你的业务服务器(Slave)上。

同样的,去改stream.conf

Bash

复制代码
cd /etc/netdata
./edit-config stream.conf

这次我们要改的是 [stream] 部分:

Ini, TOML

复制代码
[stream]
    enabled = yes
    destination = 192.168.198.133:19999
    api key = e1540a6c-f179-476f-813d-d0c46000eb15
    timeout seconds = 60
    default port = 19999
    send charts matching = *
    buffer size bytes = 1048576
    reconnect delay seconds = 5
    initial clock resync iterations = 60

这里有个坑要注意!

一定要把Slave本机的存储关掉,不然你这所谓的"流式传输"就没意义了,两头存数据不是浪费吗?

打开 netdata.conf

Bash

复制代码
./edit-config netdata.conf

找到 [global] 区块,把 memory mode 改成 none

Ini, TOML

复制代码
[global]
    memory mode = none
    # 既然不存数据,web模式也可以根据情况关掉,或者留着看实时也行

重启Slave上的Netdata。

见证奇迹的时刻

这时候,你打开浏览器,访问Master那台机器的IP http://192.168.198.133:19999/

左上角,看到那个菜单了吗?点开它。

如果不出意外,你应该能看到一个下拉列表,里面除了Master自己,还多出来了你的Slave机器的主机名!

点哪台,界面就切到哪台。所有的数据都在这一个页面里,不用切浏览器标签了。

你要是配置了50台,这里就列50个。

而且,因为我们Master端用了 dbengine,你可以轻松回溯过去一周甚至一个月的数据(取决于你Master硬盘有多大),再也不是那个"重启之后啥都没了"的Netdata了。

登录后信息更全

进阶玩法:报警怎么搞?

光看着爽没用,咱们也不能24小时盯着屏幕看心电图啊。

Netdata的报警其实非常强大,自带了成吨的模板。什么MySQL连接数爆了,磁盘IO卡死了,它都知道。

但是默认它是发邮件,这年头谁还天天盯着邮件看报警啊?必须得对接钉钉、飞书或者企业微信。

这块得改 health_alarm_notify.conf

Netdata自带了脚本支持很多国外工具(Slack, Discord),国内的稍微麻烦点,我一般的做法是写个简单的Python脚本或者Shell脚本,在这个配置文件里指定 custom_sender

比如在 health_alarm_notify.conf 里:

Bash

复制代码
SEND_DISCORD="NO"
SEND_SLACK="NO"
# ... 把没用的都关了

# 开启自定义
SEND_CUSTOM="YES"

然后去修改 /usr/libexec/netdata/plugins.d/alarm-notify.sh 里面的 custom_sender() 函数。

这块稍微需要点代码底子。但我告诉你个偷懒的方法:直接把Master的数据推给Prometheus,用Alertmanager去报警。

哎?怎么又绕回Prometheus了?

别急,这是两码事。

Netdata做采集(秒级,精度高,无死角),Prometheus做存储和报警(生态好,现有工具链成熟)。

Netdata原生支持把数据 export 到Prometheus。这样你既有了Netdata那个无敌的实时Dashboard用来排查突发故障,又有了Prometheus的长久存储和成熟的报警机制。这就是所谓的"成年人我全都要"。

遇到过的那些坑

这几年用下来,也不是没栽过跟头。

  1. 时间不同步:

    Slave和Master的时间如果差太多,数据会推不过去,或者看着像断了一样。一定要搞NTP同步,这是运维的基本修养,别问我怎么知道的,问就是都是泪。

  2. UUID冲突:

    别以为没人这么干。直接克隆虚拟机,把Netdata装好的镜像到处拷。结果几台机器公用一个Machine ID,Master端直接懵圈,数据在那左右互搏。克隆完了记得重置一下Netdata的ID。

  3. 资源消耗:

    虽说Netdata轻量,但如果你开了几百个插件(什么Apache, Nginx, PHP-FPM, MySQL, Redis, MongoDB全开),在那种1核1G的"乞丐版"云主机上,还是稍微有点吃力的。

    你可以去 edit-config 里把没用的插件给禁了。比如这台机器根本没装Postgres,你就把Postgres的采集插件关了,省点是点。

写在最后

其实没有什么工具是万能的。

Zabbix胜在稳定,老牌,适合看宏观的、天级别的趋势,适合做资产管理。

Prometheus胜在灵活性,云原生标配,K8s里离了它不行。

而Netdata,它就是那个拿着显微镜的特种兵。

当线上出现诡异的卡顿,所有常规监控都显示"正常"的时候,Netdata往往能救你一命。它能告诉你,刚才那1秒钟,硬盘的写入队列长度是不是突然飙到了1000,或者是不是有个进程偷偷吃光了SWAP。

把多台服务器聚合起来,只是第一步。当你真正看懂了Netdata图表里那些花花绿绿的线条代表的底层含义------比如软中断(softirq)突然变高意味着什么,Context Switches(上下文切换)暴涨又是谁的锅------那时候,你才算真正摸到了Linux内核的门槛。

监控这东西,配置好了只是开始,看懂数据才是核心竞争力。

行了,这杯咖啡彻底喝不出味了。

我也得去检查一下我那个Master节点的磁盘空间了,别回头日志存满了把监控服务器给搞挂了,那就真是"监控挂了没人报警,因为报警的那个也挂了",这就成笑话了。


如果觉得这篇实战对你有那么一点点启发,或者帮你省了几个切屏的时间,别忘了点赞、转发。我们一起在运维这条路上互相学习,共同进步!

公众号:运维躬行录

个人博客:躬行笔记

相关推荐
05大叔34 分钟前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密37 分钟前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi201538 分钟前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑
卷福同学1 小时前
【养虾日记】QClaw操作浏览器自动化发文
运维·人工智能·程序人生·自动化
woho7788992 小时前
不同网段IP的网络打印机,打印、扫描设置
运维·服务器·网络
耗子会飞2 小时前
小白学习固定VM虚拟机的centos服务器的IP
运维·服务器·centos
门豪杰3 小时前
Ubuntu下安装Claude Code
linux·运维·ubuntu·claude·claude code
新新学长搞科研3 小时前
第五届电子、集成电路与通信技术国际学术会议(EICCT 2026)
运维·人工智能·自动化·集成测试·信号处理·集成学习·电气自动化
桌面运维家3 小时前
Windows/Linux双启动:BIOS/UEFI多配置桌面创建指南
linux·运维·windows
無法複制4 小时前
debian安装Postgresql-14.x
运维·postgresql·debian