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-pippip 是 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 同一局域网内让别的机器访问到
到了这一步,其实外部访问的雏形已经有了。所谓的外部访问,对大多数家庭或公司环境来说,指的就是同一局域网内其他设备访问。步骤很简单:
- 先确认这台机器的 IP 地址。
- 在另一台设备上打开浏览器,输入
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/tcpCentOS 用的是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 status | 61208 端口处于 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 的数据源做过一版更花哨的仪表盘,效果也不错。不过那就是另一个故事了,先把这篇里的部署和访问配置搞定,你就能拥有一个贴心又实用的监控系统了。