Glances 体验:一个轻量级服务器监控方案 (Python/Docker)
在监控 VPS 资源使用时,如果你觉得 top/htop 太简陋,只能看 CPU 和内存,无法监控网络流量和磁盘 IO,而 Prometheus + Grafana 太重,配置复杂,小型服务器资源吃紧,那么 Glances 这款基于 Python 的开源系统监控工具就是专门为你准备的中间选项。
Glances 整体界面跟 htop 比较类似,但监控功能上相当于集成了 htop + bmon + iostat,即把 CPU、内存、网络 IO、磁盘 IO 监控与展示都一锅端。除了这些基本功能,还有很多不错的功能点,比如支持 Web 界面查看、C/S 架构、API 数据导出等。
如果只关注 CPU、内存使用情况,top 已经够用了,htop 更美观。但如果有数据导出或者多服务器监控需求,不妨看一看 Glances。
核心特性与性能表现
Glances 前端是 JS + Vue.js 实现,后端是 Python 实现。跑起来资源占用(CPU、内存)稍微有点高,我实际体验了一下,在我的 Intel(R) Xeon(R) Platinum (1c/2t) 512MB 阿里云机器上,通过 docker 部署的 glances,CPU 占用平均多了 10% 左右。当然这个锅跟 Python 脱不开关系,这也是为什么很多 CLI 工具都选择用 Go 或者 Rust 实现的原因。
资源占用对比
| 工具 | CPU 占用 | 内存占用 | 实现语言 | 适用场景 |
|---|---|---|---|---|
| htop | ~1% | ~5MB | C | 本地快速查看 |
| Glances | ~10% | ~50MB | Python | 功能全面监控 |
| Prometheus | ~15% | ~200MB | Go | 企业级分布式监控 |
如果只是单机上查看系统状态,那非常推荐体验一下这个加强版 htop,如上所述,它集成了非常多的功能,网络、磁盘 IO 都加进去了,甚至还有内存过高报警。但如果想基于它做分布式监控(比如做一个 VPS 探针),那可能得掂量一下对机器性能的影响。
功能覆盖
基本上常用的监控指标都涵盖了:
- 核心硬件:CPU、内存、负载、磁盘 I/O、网络流量
- 硬件传感器:温度、电压、风扇转速(需硬件支持)
- 系统状态:进程列表、登录用户、文件系统空间
- 现代架构:原生支持 Docker 和 LXC 容器监控
- 扩展设备:GPU 监控、RAID 阵列状态、WiFi 信号等
支持平台挺全:Linux、macOS、Windows 及 Android 都可以使用。
多种运行模式:灵活适应各种场景
Glances 的架构非常灵活,支持三种主要的使用模式,满足从个人开发机到中小规模生产集群的各种需求。
1. 单机模式 (Standalone)
这是最基础的用法,即增强版的 htop,直接在终端运行,适合快速查看本地机器状态。
# 基础启动
$ glances
# 每 2 秒刷新一次
$ glances -t 2
# 使用白色主题
$ glances --theme-white
退出按 q 或者 ESC 键,显示效果:
当然,也可以通过 stdout 参数输出原始数据。
glances --stdout cpu.user,mem.used,load,network.en0.bytes_all
cpu.user: 16.9
mem.used: 2163499008
load: {'min1': 0.1279296875, 'min5': 0.09228515625, 'min15': 0.02587890625, 'cpucore': 4}
cpu.user: 1.2
network.en0.bytes_all: 129479
如果有格式化需求,可以使用 --stdout-format 参数,支持 csv, json格式。
$ glances --stdout-csv cpu.user,mem.used,load,network.en0.bytes_all
now,cpu.user,mem.used,load.cpucore,load.min1,load.min5,load.min15
2018-12-08 22:04:20 CEST,7.3,5948149760,4,1.04,0.99,1.04
2018-12-08 22:04:23 CEST,5.4,5949136896,4,1.04,0.99,1.04
$ glances --stdout-json cpu,mem
cpu: {"total": 29.0, "user": 24.7, "nice": 0.0, "system": 3.8, "idle": 71.4, "iowait": 0.0, "irq": 0.0, "softirq": 0.0, "steal": 0.0, "guest": 0.0, "guest_nice": 0.0, "time_since_update": 1, "cpucore": 4, "ctx_switches": 0, "interrupts": 0, "soft_interrupts": 0, "syscalls": 0}
mem: {"total": 7837949952, "available": 2919079936, "percent": 62.8, "used": 4918870016, "free": 2919079936, "active": 2841214976, "inactive": 3340550144, "buffers": 546799616, "cached": 3068141568, "shared": 788156416}
...
2. Web 服务器模式 (Web Server)
通过浏览器以图形化界面查看监控,可以启动 Web 模式。Glances 内置了一个轻量级的 Web 服务器,默认监听 61208 端口。
$ glances -w
启动后,只需在浏览器访问 http://<IP>:61208 即可看到响应式的监控仪表盘。在这种模式下,Glances 还会暴露一套 HTTP/RESTful API,方便第三方应用抓取数据。
⚠️ 安全提示:
- 生产环境务必启用
--password认证- 建议使用 Nginx 反向代理并添加 HTTPS
- 通过防火墙限制访问 IP 范围
- 避免直接暴露到公网,可使用 VPN 或 SSH 隧道
3. 客户端/服务器模式 (Client/Server)
运维场景下杀手级功能,你可以将 Glances 作为守护进程运行在服务器上,然后在本地通过客户端进行远程连接,不需要 SSH 登录即可监控远程服务器系统状态。
服务端启动:
server$ glances -s
客户端连接:
client$ glances -c <server_ip>
此外,Glances 还提供了 --browser 模式,可以自动发现并列出网络中所有运行 Glances 的服务器,方便集中管理。
添加账户密码
如果对安全性有要求,也可以在服务启动时设置账户密码。首次启动会提示输入用户名及密码,后续会自动保存到 ~/.config/glances/glances.pwd 文件中。
$ glances -w --password --username
glances -w --password --username:会提示设置用户名,如果之前已经用过此用户名,则直接复用原有密码。glances -w --username:同上。glances -w --password:会提示设置密码并使用默认用户名glances,如果已经设置过用户名,则直接复用原有密码。
开发者视角:API 与数据集成
Glances 不仅仅是一个工具,它还是一个可编程的 Python 库。对于 DevOps 工程师来说,你可以轻松地将监控数据集成到自己的自动化脚本中。
作为 Python 库使用
无需解析复杂的 Shell 命令输出,直接 import 即可获取结构化数据:
from glances import api
# 初始化接口
gl = api.GlancesAPI()
# 获取 CPU 信息
cpu_stats = gl.cpu
print(f"CPU Total Usage: {cpu_stats['total']}%")
# 获取特定网络接口数据
net_data = gl.network.get("eth0")
if net_data:
print(f"Received: {net_data['bytes_recv']}")
数据导出 (Export)
Glances 解决了监控数据 “孤岛” 的问题。它支持将采集到的实时数据导出到各种主流的存储和分析系统中,充当监控数据的 “采集器” (Agent)。
支持的导出目标包括:
- 时序数据库:InfluxDB、Prometheus、Graphite、OpenTSDB
- 大数据与搜索:ElasticSearch
- 消息队列:Kafka、RabbitMQ、ZeroMQ
- 传统数据库:PostgreSQL、MongoDB
- 文件格式:CSV、JSON
这意味着你可以用 Glances 采集数据,然后用 Grafana 进行持久化的历史数据展示。
安装与部署
Glances 支持几乎所有主流操作系统,包括 Linux、macOS、Windows 甚至 Android。
推荐:使用 pip 安装
由于 Glances 是 Python 项目,使用 pip 安装通常能获得最新版本。为了获得完整功能(包括 Web 界面、传感器支持等),建议安装 all 扩展包:
# 推荐安装完整版以支持 Web UI 和各种插件
pip install --user 'glances[all]'
# 或者使用 pipx 进行隔离安装(推荐)
pipx install 'glances[all]'
Docker 容器化部署
在容器化环境中,使用 Docker 镜像部署最为便捷。注意使用 host 网络模式以确保能准确监控宿主机网络。
# 拉取完整版镜像
docker pull nicolargo/glances:latest-full
# 控制台模式(临时运行)
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro \
--pid host \
--network host \
-it nicolargo/glances:latest-full
# 生产环境推荐配置(Web 模式 + 后台运行)
docker run -d \
--name glances \
--restart unless-stopped \
-p 61208:61208 \
-e GLANCES_OPT="-w --username" \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v $HOME/.config/glances:/glances/conf:ro \
--pid host \
--network host \
nicolargo/glances:latest-full
Docker Compose 配置
services:
glances:
image: nicolargo/glances:latest-full
container_name: glances
restart: unless-stopped
pid: host
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./glances.conf:/glances/conf/glances.conf:ro
environment:
- GLANCES_OPT=-w --username
其他平台
- macOS:
brew install glances - Android:结合 Termux 应用,旧手机也能焕发二春,变身成一台微型监控服务器。
实战场景与最佳实践
多服务器监控方案
方案一:Glances + InfluxDB + Grafana
适合需要持久化历史数据的场景:
- 各服务器部署 Glances,配置数据导出到 InfluxDB
- InfluxDB 存储时序数据
- Grafana 可视化展示,支持告警配置
# 启动 Glances 并导出到 InfluxDB
glances --export influxdb --influxdb-host localhost --influxdb-port 8086
方案二:Glances 集群模式
使用 --browser 模式发现多台服务器:
# 各服务器启动 Glances 服务
server1$ glances -s
# 本地启动浏览器模式,自动发现所有服务器
client$ glances --browser
常见问题与解决方案
Q: Docker 容器内看不到宿主机完整信息?
A: 需要挂载必要的系统路径并使用正确的命名空间:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc:/host/proc:ro \
--pid host \
--network host \
nicolargo/glances:latest-full
Q: Web 界面访问慢或卡顿?
A: 检查是否启用了所有插件。可通过配置文件禁用不需要的模块:
# ~/.config/glances/glances.conf
[gpu]
disable=True
[wifi]
disable=True
Q: 如何设置内存/CPU 告警阈值?
A: 在配置文件中设置:
[cpu]
critical=90
warning=70
[mem]
critical=90
warning=70
监控工具对比
选择合适的工具取决于你的具体需求:
| 特性 | top/htop | Glances | Prometheus | Netdata |
|---|---|---|---|---|
| 资源占用 | 极低 | 中等 | 高 | 中 |
| 学习成本 | 低 | 低 | 高 | 中 |
| Web 界面 | ❌ | ✅ | ⚠️ (需Grafana) | ✅ |
| 历史数据 | ❌ | ⚠️ (需导出) | ✅ | ✅ |
| 多服务器监控 | ❌ | ✅ | ✅ | ✅ |
| API 支持 | ❌ | ✅ | ✅ | ✅ |
| 容器监控 | ❌ | ✅ | ✅ | ✅ |
| 推荐场景 | 临时查看 | 轻量监控 | 企业级 | 全功能 |
选择建议:
- 临时快速查看:使用
htop - 单机或小规模 VPS 监控:选择
Glances - 需要长期历史数据分析:考虑
Netdata或Prometheus + Grafana - 企业级大规模监控:使用
Prometheus生态
总结
Glances 完美地平衡了 易用性 和 专业性。对于普通用户,它是一个开箱即用的炫酷监控面板;对于系统管理员,它是一个支持远程监控和即时告警的利器;对于开发者,它则是一个灵活的数据采集库。
核心优势总结:
- ✅ 轻量级,资源占用适中(相比 Prometheus)
- ✅ 功能全面,覆盖 CPU、内存、网络、磁盘 IO
- ✅ 部署简单,支持 pip、Docker、apt 等多种方式
- ✅ 跨平台,Linux/macOS/Windows/Android 全支持
- ✅ 可编程,提供 RESTful API 和 Python 库
如果你需要一个能替代 top 且功能更强大的工具,Glances 绝对值得考虑。更多详细配置和高级用法,请参考 Glances 官方文档。


