教程 · 运维与排障
用 netdata 做实时监控,并把流量用量看住
难度
进阶
预计时长
20 分钟
步骤
7 步
最近修订
基准系统
Debian 12
要点
用 netdata 做实时监控,并把流量用量看住
netdata 装完即用,秒级采集 CPU、内存、磁盘与网络指标。默认监听 19999 端口,务必改成只绑定 127.0.0.1 并通过 SSH 端口转发访问,否则等于把主机的全部运行细节公开在互联网上。再配一个 vnstat 按月统计流量,就能在超出套餐流量额度之前发现问题。
前置条件
开始之前,先确认这些都具备
- 一台服务器与 sudo 权限
- 本地能用 SSH 端口转发
操作步骤
共 7 步
步骤 01 / 07
安装 #
发行版仓库里的 netdata 版本偏旧但来源可信,适合求稳的场景;官方安装脚本版本更新、功能更全。用官方脚本时请到官网复制当前的安装命令,并遵循「先下载、先阅读、再执行」的习惯。
Shell # 方式一:发行版仓库(版本旧,来源可信) sudo apt update && sudo apt install -y netdata # 方式二:官方脚本(安装地址以官网当前公布的为准) # curl -fsSLo /tmp/netdata-kickstart.sh https://官方地址/kickstart.sh # less /tmp/netdata-kickstart.sh # sudo sh /tmp/netdata-kickstart.sh systemctl status netdata --no-pager步骤 02 / 07
立刻改成只监听本地 #
netdata 的默认面板会暴露进程列表、已安装服务、连接情况等大量细节,对攻击者而言这是一份现成的踩点报告。改成只绑定回环地址,是安装后的第一件事。
Shell sudo /etc/netdata/edit-config netdata.conf # 在 [web] 段落里设置: # bind to = 127.0.0.1 sudo systemctl restart netdata sudo ss -tlnp | grep 19999 # 期望 127.0.0.1:19999步骤 03 / 07
通过 SSH 隧道访问面板 #
在自己的电脑上建立端口转发,然后浏览器访问本地地址。这样面板不需要在防火墙上开任何端口,也不需要额外配置认证。
Shell ssh -N -L 19999:127.0.0.1:19999 -p 22022 [email protected] # 浏览器打开 http://127.0.0.1:19999步骤 04 / 07
小内存机型要调低资源占用 #
netdata 默认采集上千个指标并在内存里保留一段历史,在 1 GB 的机器上这部分开销会很明显。把采集间隔放宽到 2–5 秒、限制内存中保留的历史数据量,够用即可。
配置文件 # netdata.conf [global] update every = 5 [db] mode = dbengine dbengine multihost disk space MB = 256步骤 05 / 07
配置告警通知 #
监控的价值在于出事时你能收到消息,而不是事后翻图表。netdata 自带一套告警,通知渠道在 health_alarm_notify.conf 里配置。配完一定要发一条测试通知,确认真的能收到 —— 没验证过的告警等于没有。
Shell sudo /etc/netdata/edit-config health_alarm_notify.conf # 配好之后发一条测试通知(role 用 sysadmin) # 插件目录随安装方式而异:apt 安装通常在 /usr/lib/netdata/plugins.d/, # 官方脚本安装通常在 /usr/libexec/netdata/plugins.d/,先确认再执行 ls /usr/lib/netdata/plugins.d/alarm-notify.sh /usr/libexec/netdata/plugins.d/alarm-notify.sh 2>/dev/null sudo -u netdata /usr/lib/netdata/plugins.d/alarm-notify.sh test sysadmin步骤 06 / 07
用 vnstat 盯住每月流量 #
这是最容易被忽略却最常引发账单意外的一项。VPS 套餐的流量额度按月计(例如 轻装 1 / QZ-1 含 1 TB,远航 2 / YH-2 含 4 TB),一次配置失误的备份任务就可能把它跑光。vnstat 常驻记录,随时能查本月已用多少。
Shell sudo apt install -y vnstat sudo systemctl enable --now vnstat vnstat -m # 按月统计 vnstat -d # 按日统计 vnstat --live -i eth0 # 实时速率(网卡名用 ip -br link 查)步骤 07 / 07
该盯哪几个指标 #
CPU 使用率是最不重要的那个。真正预示问题的是:磁盘 IO wait(业务卡顿的常见原因)、steal time(宿主机超售)、内存与 swap 的使用趋势、磁盘剩余空间(写满会引发千奇百怪的故障)、以及本月流量用量。给这五项设好告警,比盯着一屏漂亮的图表有用得多。
Shell # 命令行快速自查这五项 iostat -x 1 3 | head -n 20 # 需要 sysstat:IO 等待 vmstat 1 5 # 最后一列 st = steal time free -h # 内存与 swap df -h # 磁盘剩余 vnstat -m | tail -n 5 # 本月流量
常见错误
这一步最容易踩的坑
下面每一条都对应一个真实会发生的故障。先读完再动手,比出问题之后再回来查要省时间。
- 把 19999 端口开放到公网。默认面板不需要认证就能看到主机的详细运行状况,等于把踩点报告主动交出去。
- 在 1 GB 内存的机器上用默认配置。监控本身就成了负载来源,得不偿失。
- 配了告警却没验证通知渠道。出事那天你不会收到任何消息。
- 只看 CPU。真正让服务不可用的通常是 IO wait、内存耗尽或磁盘写满。
- 磁盘写满导致监控自己也停摆。给根分区剩余空间单独设一个告警阈值。
- 完全不看流量用量。超出套餐额度往往是月底才发现的,而那时该发生的已经发生了。
这篇教程的边界
- 命令以 Debian 12 为准。Ubuntu 与 Rocky Linux 的差异只在正文明确标注之处,未标注的部分请以你所用发行版的官方文档为准。
- 示例中的 IP 来自文档保留段 203.0.113.0/24,域名为 example.com,端口为示意值。复制后必须替换成自己的值, 原样执行不会有任何效果。
- 教程不能替代备份。任何会改动数据或线上流量的步骤,执行前先确认有一份验证过能恢复的备份。
- 本站不提供任何用于绕过网络审查的配置或说明,这篇也不例外。
发现命令过时或有误,请发邮件到 [email protected]。 指出错误的邮件比沉默的旧文档有价值得多。