在Ubuntu服务器上跑业务,最怕的就是资源耗尽、服务悄悄挂掉或者磁盘写满之后才发现问题。与其反复登录服务器敲top、df、free这些命令,不如花十几分钟搭一个轻量级的网页监控面板,打开浏览器就能看到CPU、内存、磁盘、网络和关键服务的状态。这里不推荐安装Zabbix、Prometheus加Grafana那一整套,对单机或两三台服务器的场景来说太重了。更实际的做法是用Netdata或者Glances配合Web模式,前者功能全、界面现代,后者极简、部署快,两个方案都能在Ubuntu上稳定运行。
方案一:Netdata——开箱即用的高分辨率监控面板Netdata的优势在于零配置,安装完成后自动采集几百项指标,包括CPU每个核心的使用率、内存分页、磁盘I/O、网络吞吐、系统负载、进程状态,甚至还能监控Nginx、MySQL、Redis等常见服务的运行情况。Ubuntu 22.04和24.04都可以用官方脚本一键安装。执行下面的命令:
curl https://get.netdata.cloud/kickstart.sh | sh
安装过程会自动检测系统环境,安装依赖并配置systemd服务。完成后Netdata默认监听本机的19999端口。如果服务器有公网IP,直接访问http://服务器IP:19999就能看到面板。如果只想本机访问,可以修改配置文件/etc/netdata/netdata.conf,把bind to改为127.0.0.1,再通过SSH隧道访问。Netdata的仪表盘是自动刷新的,默认每秒更新一次,历史数据保存在内存中,重启后会丢失,但可以配置数据库后端把数据存到磁盘,保留更长时间。
Netdata的告警功能也很实用。默认自带几十条健康规则,比如CPU使用率超过90%持续10分钟、磁盘剩余空间低于10%、内存可用低于200MB,都会在面板顶部显示警告,还能配置发送邮件或者执行自定义脚本。告警配置文件在/etc/netdata/health.d/目录下,每条规则都是一个yaml文件,修改后执行netdatacli reload-health即可生效。对于不想装额外监控系统的用户来说,Netdata基本覆盖了日常运维需要的全部信息。
方案二:Glances——极简主义的系统监控工具如果觉得Netdata功能太多、界面太花哨,Glances是另一个方向。Glances本身是一个终端里的系统监控工具,类似加强版的top,但加上Web模式后,就能通过浏览器查看。安装很简单:
sudo apt update sudo apt install glances
Ubuntu官方仓库里的Glances版本可能偏旧,建议用pip安装最新版:
sudo apt install python3-pip pip install glances[web]
启动Web模式:
glances -w --bind 0.0.0.0 --port 61208
浏览器访问http://服务器IP:61208就能看到监控页面。Glances的界面非常简洁,一行行列出CPU、内存、交换分区、负载、磁盘I/O、网络流量、传感器温度和进程列表。数据刷新频率默认3秒,页面很轻,手机浏览器打开也不卡。Glances还支持导出数据到InfluxDB、Prometheus等时序数据库,如果以后想接Grafana做长期趋势分析,也能平滑过渡。
Glances的缺点是告警能力弱,基本只靠颜色变化提示,没有Netdata那种完整的告警规则引擎。所以Glances更适合作为快速查看工具,而不是长期无人值守的告警平台。但如果服务器资源非常紧张,比如1核1G的小机器,Glances占用的内存和CPU比Netdata小得多,这点需要根据实际情况权衡。
用systemd把监控面板做成常驻服务无论是Netdata还是Glances,都建议配置成systemd服务,保证开机自启、异常退出后自动拉起。Netdata安装脚本已经自动创建了服务,执行systemctl status netdata可以确认。Glances需要手动创建一个服务文件:
sudo nano /etc/systemd/system/glances.service
写入以下内容:
[Unit] Description=Glances Web Monitor After=network.target [Service] ExecStart=/usr/local/bin/glances -w --bind 0.0.0.0 --port 61208 Restart=always User=root [Install] WantedBy=multi-user.target
保存后执行:
sudo systemctl daemon-reload sudo systemctl enable glances sudo systemctl start glances
这样Glances就会在后台持续运行。如果服务挂了,systemd会自动重启。查看日志用journalctl -u glances -f。
安全加固:不要裸奔在公网上监控面板本身会暴露服务器的运行状态,如果直接暴露在公网且没有访问控制,等于把服务器信息免费送给扫描器。Netdata默认没有认证,Glances也一样。最稳妥的做法是绑定到127.0.0.1,然后通过SSH隧道访问:
ssh -L 19999:127.0.0.1:19999 用户名@服务器IP
本地浏览器打开http://127.0.0.1:19999即可。如果确实需要公网访问,至少加一层基础认证。Netdata可以配置反向代理加认证,Glances启动时支持--username和--password参数,但密码是明文传输的,最好再套一层Nginx加HTTPS。Nginx配置示例:
server {
listen 80;
server_name monitor.example.com;
location / {
proxy_pass http://127.0.0.1:19999;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
auth_basic "Monitor";
auth_basic_user_file /etc/nginx/.htpasswd;
}
用htpasswd生成密码文件,再配合certbot申请免费证书,就能安全地通过域名访问监控面板。对于生产环境,这一步不能省。
监控面板之外:关键指标和日志同样重要监控面板解决的是实时状态可见性的问题,但运维不能只盯着实时数据。磁盘使用率这种指标需要长期趋势,比如每天增长多少、什么时候会写满,这些靠面板很难判断。建议配合一个简单的定时脚本,每天把关键指标追加到日志文件里:
#!/bin/bash
DATE=$(date '+%Y-%m-%d %H:%M:%S')
LOAD=$(uptime | awk -F'load average:' '{print $2}')
MEM=$(free -m | awk 'NR==2{printf "%s/%sMB", $3,$2}')
DISK=$(df -h / | awk 'NR==2{print $5}')
echo "$DATE | Load:$LOAD | Mem:$MEM | Disk:$DISK" >> /var/log/sysmon.log
加入crontab每小时执行一次,积累几周后就能看出资源消耗的规律。再配合logrotate定期切割日志,避免文件无限增长。这些基础操作加上监控面板,单机运维的基本盘就稳了。
另外,如果服务器上跑的是Nginx、MySQL这类服务,Netdata能自动发现并监控它们的请求数、连接数、慢查询等指标,但前提是服务开启了对应的状态接口。比如Nginx需要配置stub_status模块,MySQL需要给监控用户授权。这些配置在Netdata的官方文档里都有详细说明,按步骤操作即可。Glances则没有这么深入的应用层监控,它更偏向系统层面。
总结下来,Ubuntu服务器搭建简易监控面板,首选Netdata,功能全、界面好、告警完善;资源紧张或者喜欢极简风格就用Glances。两者都能在十分钟内部署完成,配合systemd常驻和SSH隧道或Nginx认证,就能安全地随时掌握服务器状态。不要等到服务挂了才想起来看监控,提前把面板搭好,出问题时打开浏览器就能定位方向,比临时敲命令高效得多。
