用 Netdata 实时监控服务器,比 Prometheus + Grafana 轻量得多
服务器监控是运维的基本盘,但 Prometheus + Grafana 这套经典组合部署下来资源消耗不小,配置也复杂。Netdata 是一个开源的实时监控工具,安装完几乎不需要配置,几秒钟后就能看到 CPU、内存、磁盘 I/O、网络、Docker 容器、进程等数百个指标,图表刷新频率是每秒一次,比大多数监控系统精细得多。
适用场景
- 个人服务器日常健康监控
- 排查 CPU/内存/磁盘 突发问题
- 多台服务器统一监控
- Docker 容器资源追踪
服务器配置
Netdata 本身轻量,但采集的数据留在内存里:
- CPU:1 核(通常占用 1--2% CPU)
- 内存:50--200MB(取决于采集的指标数量)
- 硬盘:几乎不占(默认不持久化历史数据)
我在 雨云 rainyun-com 的服务器上每台都装了 Netdata,监控开销几乎可以忽略不计。注册 5 折优惠码: 2026off
安装 Netdata
官方提供一键安装脚本:
bash
curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh
sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
安装完成后服务自动启动,Web 界面在 http://你的IP:19999。
在云控制台放行 TCP 19999(只用于测试,正式使用建议配反代 + 认证)。
配置访问控制
默认情况下任何人都能访问 19999 端口,需要加访问控制:
bash
sudo nano /etc/netdata/netdata.conf
ini
[web]
bind to = 127.0.0.1:19999 # 只监听本地,通过反代访问
用 Caddy 加 Basic Auth 反代:
bash
sudo apt install -y caddy
sudo tee /etc/caddy/Caddyfile << 'EOF'
monitor.你的域名.com {
basicauth {
# 用 caddy hash-password 生成密码哈希
admin $2a$14$...你的密码哈希...
}
reverse_proxy localhost:19999
}
EOF
sudo systemctl restart caddy
sudo systemctl restart netdata
生成 Caddy 密码哈希:
bash
caddy hash-password --plaintext 你的密码
主要监控面板
系统概览
- CPU 使用率(总计 + 各核心)
- 内存:使用 / 缓存 / 交换
- 磁盘 I/O:读写速率
- 网络:发送 / 接收流量
进程
- 每个进程的 CPU / 内存 / I/O 消耗
- 自动识别常见软件(nginx、mysql、redis 等)
Docker 容器
- 每个容器的 CPU、内存、网络、磁盘
- 容器启停状态
应用插件(自动检测)
- Nginx / Apache 访问日志和连接数
- MySQL / PostgreSQL 查询统计
- Redis 命中率
- PHP-FPM 请求队列
自定义告警
Netdata 内置了数百条默认告警规则,比如 CPU 超过 90% 连续 2 分钟、磁盘使用率超过 85% 等。可以自定义:
bash
sudo tee /etc/netdata/health.d/custom.conf << 'EOF'
# 自定义告警:磁盘使用率超过 80%
alarm: disk_usage_high
on: disk.space
lookup: average -10m unaligned of used
units: %
every: 1m
warn: $this > 80
crit: $this > 90
info: 磁盘使用率过高
EOF
sudo systemctl restart netdata
配置告警通知
告警触发时发送通知,支持 Email、Slack、Telegram、ntfy 等:
bash
sudo nano /etc/netdata/health_alarm_notify.conf
Telegram 通知配置:
ini
SEND_TELEGRAM="YES"
TELEGRAM_BOT_TOKEN="你的Bot Token"
TELEGRAM_CHAT_ID="你的Chat ID"
邮件通知:
ini
SEND_EMAIL="YES"
EMAIL_SENDER="netdata@你的域名.com"
DEFAULT_RECIPIENT_EMAIL="你的邮箱@gmail.com"
多节点监控(Netdata Parents)
多台服务器的监控数据可以聚合到一台"父节点":
在子节点 /etc/netdata/stream.conf 配置:
ini
[stream]
enabled = yes
destination = 父节点IP:19999
api key = 一个随机UUID
在父节点 /etc/netdata/stream.conf 配置:
ini
[API_KEY] # 替换为上面的 UUID
enabled = yes
history = 3600
default memory mode = ram
这样在父节点的 Web 界面就能看到所有子节点的数据,一处查看全部服务器状态。
与 Prometheus + Grafana 的对比
| 功能 | Netdata | Prometheus + Grafana |
|---|---|---|
| 安装复杂度 | 一条命令 | 需要配置 exporter + 数据源 + 仪表板 |
| 开箱即用 | 是(自动检测应用) | 需要手动配置仪表板 |
| 刷新频率 | 每秒 | 通常 15--60 秒 |
| 历史数据 | 有限(内存) | 可无限存储 |
| 自定义查询 | 有限 | PromQL 极其灵活 |
| 资源消耗 | 低 | 中等偏高 |
对于个人服务器和小团队,Netdata 开箱即用的体验更好;需要长期数据分析或复杂业务指标的场景,Prometheus + Grafana 更合适。两者也可以共存------Netdata 负责实时监控,Prometheus 负责长期存储。
装上 Netdata 之后,服务器上发生什么一眼就能看出来:CPU 为什么突然升高、内存是哪个进程吃掉的、哪个时间段磁盘 I/O 很高------不需要手动敲命令 grep 日志,图表直接告诉你答案。