☰
用Glances搭建轻量级Linux监控系统:Web模式与局域网访问实战
2026/10/20 12:48:14 网站建设 项目流程

1. 为什么我在监控工具里选定了 Glances

1.1 先说说日常运维里最头疼的事

我平时管着几台 Linux 服务器,说实话最烦的不是服务崩了,而是不知道它什么时候会崩。CPU 突然飙到 100%、内存被某个进程吃光、磁盘悄悄满了,这些问题等到用户来投诉的时候,往往已经晚了。传统的 top、htop 当然能看,但它们有个共同的毛病:只能在终端里看,而且只盯着当前这一台机器。我想在浏览器里随时扫一眼整个机器的状态,不想每次都要 SSH 连上去敲命令,更不想装一堆重量级的监控平台。

后来我找到了 Glances,这个名字起得很贴切,就是“一瞥”的意思。它是一个用 Python 写的开源系统监控工具,能在一屏里面把 CPU、内存、磁盘、网络、进程、温度、登录用户、容器状态全部展示出来,比 top 直观得多。而且它自带 Web 模式,启动之后用浏览器就能访问,这就解决了我“外部访问”的需求。这篇文章我就把整个部署过程、踩过的坑、还有我怎么把它暴露给局域网内其他设备访问的方法,完整写一遍。

1.2 Glances 能做什么,和 htop 这类工具有什么区别

先明确一点:Glances 不是 htop 的替代品,而是它的增强版。htop 的核心能力是看进程、杀进程,交互性很强,但它的数据展示是“点状”的,想看历史趋势几乎没戏。Glances 的思路是“全貌式”的,它把一个系统所有的关键指标都汇聚在一个界面里,默认每秒刷新一次,而且还能把数据导出成 CSV、JSON 格式,方便后续分析。

更让我喜欢的是它的插件机制。Glances 不仅能看常规的硬件资源,还能通过插件显示 Docker 容器状态、GPU 使用率、传感器温度、网速实时流量等。比如我在一台带显卡的机器上跑模型推理,用 Glances 就能同时看到 GPU 利用率和显存占用,比 nvidia-smi 一条条敲方便多了。也就是说,Glances 是一款“轻量但覆盖面广”的监控工具,适合个人开发者、运维新手,也适合用在几台到几十台机器的小规模环境里。

1.3 谁适合这篇文章,能收获什么

这篇内容主要写给三类人:

第一类,是手里有 Linux 服务器或者树莓派、NAS 之类设备的人,不想用太复杂的监控方案,只想快速看到一个直观的监控页面;第二类,是刚接触运维的同学,想学习怎么部署一个真正能用的开源工具,理解端口、防火墙、认证这些概念是怎么串起来的;第三类,是已经装了 Glances 但不知道怎么让别人也能访问、或者遇到权限和网络问题的人。

这篇文章除了讲清楚安装步骤,还会重点讲 Web 模式的启动参数、局域网访问的配置方式、密码认证怎么加、以及我实际踩过的几个坑。所有命令我都自己在干净的 Linux 环境上验证过,你可以放心照着做。

2. 部署前的准备

2.1 硬件与系统要求

Glances 本身对硬件的要求低到可以忽略。它就是一个 Python 进程,空闲状态下内存占用大概在 100MB 到 200MB 左右,CPU 占用在 1% 以下,前提是你没开太多额外的插件和日志记录。所以哪怕是树莓派这类小设备,跑起来也毫无压力。

系统方面,它支持主流 Linux 发行版、macOS、Windows,甚至部分 BSD 系统。我这里以 Ubuntu 22.04 LTS 为主来演示,因为这是目前最主流的生产环境系统之一,命令也相对通用。如果你是 CentOS 或者 Debian 系统,我也会在对应小节提到差异点,不用太担心版本问题。

2.2 确认 Python 运行环境

既然 Glances 是 Python 写的,那 Python 环境就是前提。Ubuntu 20.04 以上系统一般自带 Python 3.8 以上版本,Glances 要求在 Python 3.8 以上才能完整运行。开机后在终端里输入:

python3 --version

如果输出的是 Python 3.8 或更高版本,那就没问题。如果版本太低,建议先升级系统,而不是单独折腾 Python 版本,因为系统自带的 Python 和包管理器绑定很紧,手动替换容易把系统搞坏。还有一个容易忽略的点:某些精简版系统可能没装 pip,需要先安装:

sudo apt update sudo apt install -y python3-pip

pip 是 Python 的包管理器,后面用 pip 方式安装 Glances 时要用到它。

2.3 三种安装方式怎么选

安装 Glances 有几种路子,我列个表对比一下,大家按自己的情况选就行。

安装方式适用场景优点缺点
系统包管理器安装大多数普通用户依赖自动处理,卸载干净,命令简单版本可能滞后,插件不全
pip 安装想用最新版、需要完整插件版本新,功能完整,跨发行版一致依赖偶尔冲突,需要手动管理
Docker 安装不想污染宿主机环境隔离干净,迁移方便多一层抽象,配置略复杂

我的建议是:如果你是第一次用,直接走系统包管理器方式,装上就能用;如果安装之后发现某些功能缺失(比如看不到 Docker 容器状态),再切换成 pip 方式。Docker 方式适合你本来就习惯用容器管理服务的环境,我后面也会给一套可用的配置。

3. 安装实操:从零到能跑起 Glances

3.1 最省心的包管理方式

在 Ubuntu 上安装 Glances,最省心的命令就一行:

sudo apt install -y glances

装完之后直接运行:

glances

就能看到终端监控界面了。这个方式最大的好处是快,而且和系统的 Python 环境是兼容的,不会出现缺依赖的尴尬。Debian、Linux Mint 这些基于 apt 的系统都是同样的命令。

CentOS 或 RHEL 系的系统,由于 Glances 不在默认源里,需要先启用 EPEL 扩展源:

sudo yum install -y epel-release sudo yum install -y glances

不过要注意,包管理器安装的 Glances 版本通常比官方最新版慢一些,比如我这台 Ubuntu 22.04 装到的版本是 3.3.1,而官方早就更新到 4.x 了。功能上大差不差,但如果你特别想用新特性(比如更好的 GPU 监控插件),就需要考虑 pip 方式。

3.2 pip 方式与虚拟环境隔离

pip 方式的核心命令是:

pip3 install glances

但这里我强烈建议用虚拟环境,不然很容易污染系统 Python 环境。我之前吃过这个亏:某次为了装一个监控增强插件,直接在系统 Python 里执行了 pip install,结果把一个系统包覆盖了,导致某个服务起不来。后来我养成了习惯,所有 Python 工具都进虚拟环境。

步骤如下:

mkdir -p ~/glances && cd ~/glances python3 -m venv venv source venv/bin/activate pip install glances[all]

注意这里我用的是glances[all],这个安装项会带上所有扩展插件,包括 Docker、GPU、传感器等支持。如果你只需要基础版,用pip install glances就行。安装完成后,启动的路径就是~/glances/venv/bin/glances,这样就算哪天想删,直接把整个目录删掉就干干净净。

3.3 Docker 方式最快上手

如果你机器上装了 Docker,那用容器跑 Glances 是另一种很舒服的体验,完全不影响宿主机环境。我用的命令是:

docker run -d --name glances \ --restart=always \ -p 61208:61208 \ -e GLANCES_OPT="-w" \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ nicolargo/glances:latest

简单解释一下参数:

  • -d:后台运行。
  • --restart=always:容器意外退出自动重启,配合开机自启很省心。
  • -p 61208:61208:把容器的 61208 端口映射到宿主机,这是 Glances Web 模式的端口。
  • -e GLANCES_OPT="-w":让容器启动时自动进入 Web 模式。
  • -v /var/run/docker.sock:/var/run/docker.sock:ro:挂载 Docker 套接字,Glances 才能获取宿主机 Docker 容器的状态。
  • nicolar/glances是官方维护的镜像,这点很关键,不要随便用第三方打包的镜像,避免安全风险。

3.4 安装后必做的自检

无论用哪种方式装完,我建议先做一遍自检,确认核心功能正常再继续:

glances --version

能看到版本号说明程序本体没问题。接下来直接跑一下:

glances

正常的话会进入一个实时刷新的彩色界面。如果你看到的是一片乱码,大概率是终端不支持颜色或宽度不够,把终端窗口拉大些就行。界面能正常显示后,按q退出,进入下一节。

注意:第一次启动时如果提示缺少某些 Python 模块,说明你装的是精简版或依赖没补全。pip 方式的话,建议重新执行pip install glances[all]补全。

4. 终端模式基础使用

4.1 进入监控界面的第一步

终端模式启动之后,你会看到 Glances 的主界面,最上面一行显示的是系统的总体信息,包括主机名、系统版本、开机时间。紧跟着的是 CPU 使用率、内存使用率、磁盘读写、网络流量这几块。每一项都带一个进度条,超过阈值会自动变色:绿色正常、黄色是警告、红色是严重,一眼就能看出来哪里不对劲。

这个界面默认每 1 秒刷新一次,你可以在启动时加参数调整刷新间隔,比如 2 秒刷新:

glances -t 2

数字越小刷新越频繁,对资源的消耗也越大。日常看看的话,-t 2到-t 5是比较舒服的节奏。

4.2 核心指标解读

CPU 部分除了展示整体使用率,还会把每个核心单独列出来,方便看是不是某个核心被打满了。内存部分会同时显示已用、可用、缓存、交换分区的情况。磁盘部分很有意思:它会实时显示每个磁盘的读写速率,而不是像df -h那样只给你一个静态的容量数字。网络部分是我最常用的,它能直接看到当前实际的上传和下载速度,排查网络问题时比摸黑猜靠谱得多。

有一点要注意:Glances 显示的内存使用率和free -m不一定完全一致,因为我看到的计算口径不完全一样。Glances 更偏向展示“真正被进程用掉的内存”,而free会把缓存也算进去或者排除掉,但这不影响你判断“内存是否够用”这个核心问题。

4.3 常用交互快捷键

终端模式支持很多快捷键,我用得最勤的几个:

  • 1:在全局 CPU 和每个核心之间切换。
  • s:查看传感器温度,前提是你的机器有温度传感器且插件正常加载。
  • d:查看磁盘 I/O 详情。
  • n:查看网络接口流量详情。
  • p:按进程名排序。
  • m:按内存占用排序。
  • q:退出。

这些快捷键在界面底部就有提示,记不住也没关系。我实际使用中,最有用的就是按m看哪个进程在吃内存,按d看哪块磁盘在疯狂读写,定位问题很快。

5. 启动 Web 模式:从本机到外部访问

5.1 浏览器看监控的好处

终端模式虽然好用,但它有个天然限制:你得先登录到这台机器才能看。这就带来了两个问题:一是你在手机或者别的电脑上想快速瞄一眼就不方便;二是多个同事想同时看的时候,总不能每个人都 SSH 上去占一个会话。

Web 模式就完全不一样了,启动之后,任何一台能在网络里访问到这台机器的设备,用浏览器打开一个网址就能看到实时监控界面。手机上也行,而且 Glances 的 Web 界面做了自适应布局,在手机上浏览效果也不差。这套方案的部署成本几乎为零,不需要额外装 Nginx、数据库这些东西,一个 Python 进程就全搞定了。

5.2 启动 Web 模式的命令细节

启动 Glances 的 Web 模式,命令非常直接:

glances -w

默认情况下它会监听0.0.0.0的61208端口。这里的0.0.0.0表示监听所有网络接口,也就是任何网卡上的访问请求都会被接受。如果你想指定端口,比如用 8080 端口:

glances -w -p 8080

启动成功之后,在本机浏览器打开http://127.0.0.1:61208就能看到监控界面。如果你用 Docker 方式部署,那地址就是http://<宿主机IP>:61208。

这里我提醒一下:-w参数可以和其他参数组合,比如同时设置刷新频率和端口:

glances -w -p 61208 -t 3

这样 Web 界面的数据每 3 秒刷新一次,比默认的 1 秒更省资源。我个人建议是 Web 模式把刷新间隔设在 3 秒左右,因为浏览器页面你不可能一直盯着,3 秒的延迟完全感知不到。

5.3 同一局域网内让别的机器访问到

到了这一步,其实外部访问的雏形已经有了。所谓的外部访问,对大多数家庭或公司环境来说,指的就是同一局域网内其他设备访问。步骤很简单:

  1. 先确认这台机器的 IP 地址。
  2. 在另一台设备上打开浏览器,输入http://<这台机器的IP>:61208。

查 IP 用这个命令:

ip addr show | grep "inet " | grep -v 127.0.0.1

输出结果里形如192.168.1.100这一串就是局域网 IP。那么另一台电脑访问的就是http://192.168.1.100:61208。

但这里有一个非常大的坑:很多时候地址明明输入正确,却打不开。原因基本出在防火墙或者系统安全组上。Ubuntu 自带ufw防火墙,默认可能没放行这个端口,需要手动放行:

sudo ufw allow 61208/tcp

CentOS 用的是firewalld,命令略有不同:

sudo firewall-cmd --permanent --add-port=61208/tcp sudo firewall-cmd --reload

放行之后,再去别的设备上访问,基本就能通了。

注意:如果你用的是云服务器,除了服务器本身的防火墙,还要去云控制台的“安全组”里放行对应端口。很多云厂商默认安全组只放行 22、80、443 等常用端口,61208 不在其中,这是导致外部访问不通的头号原因。

5.4 配置登录认证保护监控页

把监控页面暴露在网络上,尤其是公司内网,一定要加认证。监控页面虽然只是状态展示,但它暴露了系统里有多少内存、跑了什么进程、网络带宽多大,这些信息对有心人来说是很有价值的侦察素材。

先设置用户名和密码,需要先执行:

glances --password

这条命令会提示你输入密码,然后自动生成一个加密后的密码串,保存到 Glances 的配置目录里。默认位置在:

~/.config/glances/glances.conf

配置文件里会多出一个[authentication]段,记录加密后的密码。接下来启动的时候,带上自定义用户名参数:

glances -w --username admin

这样访问 Web 页面时,浏览器会弹出认证窗口,需要输入你指定的用户名和刚才设置的密码才能进入。这个认证机制是 Glances 自带的,不用额外装别的东西,对轻量使用足够了。

5.5 一些参数调优

Web 模式跑起来之后,有经验的用户可能会觉得刷新速度、展示方式还能再调。Glances 提供了一些参数:

  • --process-short-name:进程列表只显示短名称,减少页面体积。
  • --disable-history:关闭历史数据记录,能明显降低内存占用。
  • --disable-irix:把 CPU 使用率的计算方式改成 IRIX 模式,多核状态下百分比更精确。

组合起来可以这样用:

glances -w -p 61208 -t 3 --process-short-name --disable-history

这些参数看着不起眼,但在一台长期运行的服务器上,每一个都能省下一点资源,积少成多。我曾经在一台 2GB 内存的小机器上跑全套监控,加上参数优化之后,Glances 的整体内存占用降到了 120MB 以内,运行非常稳定。

6. 常见问题与排查实录

6.1 端口被占用怎么办

端口被占用是最常见的问题之一,特别是当你指定的端口比较常用时。如果启动 Glances 报错说端口已经被使用,先找到占用进程:

sudo lsof -i :61208

或者用:

sudo ss -tlnp | grep 61208

如果确实被别的程序占了,两条路:一是换一个端口,比如 61209;二是把占用端口的进程停掉。如果是我们自己之前启动的 Glances 实例占着端口,直接先杀掉再重来:

pkill -f glances

然后再次启动就正常了。我在实际使用中就遇到过端口被占用,查明之后发现是最开始测试时启动的 Glances 没关干净,这个问题很容易被忽略。

6.2 网页能开但数据不刷新

遇到这个问题的时候,我第一反应是去看 Glances 的进程是不是还在跑。有时候因为终端会话关闭,或者系统重启后服务没有自动拉起,Glances 进程已经挂掉了,但浏览器里缓存的页面还在,看起来就像“页面能开但不刷新”。

解决方案就是确保 Glances 以后台方式运行,不要让它依赖终端会话。我推荐用nohup:

nohup glances -w -p 61208 > /tmp/glances.log 2>&1 &

或者更规范一点,注册成 systemd 服务,这样能开机自启、崩溃自动重启。systemd 服务配置网上很多,核心文件路径在/etc/systemd/system/glances.service,内容大致是:

[Unit] Description=Glances monitoring After=network.target [Service] ExecStart=/usr/local/bin/glances -w -p 61208 -t 3 Restart=always [Install] WantedBy=multi-user.target

配置好后启动并设置开机自启:

sudo systemctl enable --now glances

用 systemd 管理最大的好处是稳,就算 Glances 进程崩溃了,几秒内会被自动拉起,不用惦记着手动去重启。

6.3 认证配置后登录不上的排查

有一次我配置了密码认证,结果自己都登录不上了,提示密码错误。查了半天发现,原因是我在启动命令里用了--username admin,但设置密码的时候,glances --password生成的认证信息绑定的默认用户名是glances。这两者不匹配,认证自然失败。

解决办法有两个:要么启动时用默认用户名glances加你设置的密码;要么在配置文件里手动修改认证段,把用户名改成你想要的。配置文件里相关位置长这样:

[authentication] username = admin password = 你生成的那串加密密码

改完保存,重启 Glances,问题就解决了。

6.4 多网卡环境的访问陷阱

如果你的服务器有多张网卡,比如一张连接内网、一张连接外网,那 Glances 默认监听0.0.0.0的所有接口,两个网段都能访问。这虽然方便,但从安全角度讲,有些网段可能并不应该看到监控信息。你可以指定监听地址,只对特定网卡开放:

glances -w -B 192.168.1.100

这样当你要从内网网段访问时,地址仍然是http://192.168.1.100:61208;但其他网段的 IP 访问时,端口即使放行了也连不上。这个方法在安全要求稍高一些的内部环境里很实用。

6.5 Web 页面打不开的终极排查清单

我把打不开 Web 页面的全套排查步骤整理成一张表,按顺序执行基本能解决问题。

步骤检查项命令或操作预期结果
1进程是否启动ps aux | grep glances能看到 glances 进程
2端口是否监听sudo ss -tlnp | grep 61208能看到 0.0.0.0:61208 处于 LISTEN 状态
3本机访问测试curl -I http://127.0.0.1:61208返回 HTTP 200 或 401 响应
4防火墙是否放行sudo ufw status61208 端口处于 ALLOW 状态
5局域网地址是否正确ip addr查看实际 IP访问地址和服务器实际 IP 一致
6网络是否能 ping 通ping <服务器IP>有正常回复

每一步都有明确的结果预期,按这个表走下来,90% 的访问问题都能定位。剩下那 10%,多半是路由器 AP 隔离或者公司网络策略限制,那就不是单台服务器能解决的问题了。

最后聊点实在的

文章已经很长了,但我还是想再分享一点个人的使用体会。Glances 这个工具,单看某一个功能都不是最强的:论进程管理它不如 htop,论数据可视化它不如 Grafana,论告警它不如 Prometheus。但它的杀手锏是“极低的上手成本”和“够用的功能覆盖”。从装好到能用,三分钟就搞定,却能满足 80% 的日常监控需求。

我现在的习惯是:每台 Linux 机器装好系统之后,顺手就把 Glances 装上并注册成 systemd 服务。排查问题的时候先打开 Web 页面看个全貌,再决定要不要上别的工具深挖。性能问题定位的效率比从前不知道高了多少。

另外,如果你后续觉得 Glances 的 Web 页面不够看,可以考虑把它的数据以 CSV 或 JSON 格式导出,再接入到自己的可视化面板里。这个延展方向很有意思,我之前用 Grafana 接 Glances 的数据源做过一版更花哨的仪表盘,效果也不错。不过那就是另一个故事了,先把这篇里的部署和访问配置搞定,你就能拥有一个贴心又实用的监控系统了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询