🍊 UglyOrange
💻 软件

Glances 体验:一个轻量级服务器监控方案 (Python/Docker)

frigidpluto Views: ...
Glances 响应式 Web 监控界面
Glances web dashboard - 响应式设计,支持移动端访问

在监控 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 实现的原因。

Glances 资源占用 - Docker 容器模式下 CPU 和内存使用情况

资源占用对比

工具CPU 占用内存占用实现语言适用场景
htop~1%~5MBC本地快速查看
Glances~10%~50MBPython功能全面监控
Prometheus~15%~200MBGo企业级分布式监控

如果只是单机上查看系统状态,那非常推荐体验一下这个加强版 htop,如上所述,它集成了非常多的功能,网络、磁盘 IO 都加进去了,甚至还有内存过高报警。但如果想基于它做分布式监控(比如做一个 VPS 探针),那可能得掂量一下对机器性能的影响。

功能覆盖

基本上常用的监控指标都涵盖了:

  • 核心硬件:CPU、内存、负载、磁盘 I/O、网络流量
  • 硬件传感器:温度、电压、风扇转速(需硬件支持)
  • 系统状态:进程列表、登录用户、文件系统空间
  • 现代架构:原生支持 DockerLXC 容器监控
  • 扩展设备:GPU 监控、RAID 阵列状态、WiFi 信号等

支持平台挺全:Linux、macOS、Windows 及 Android 都可以使用。

多种运行模式:灵活适应各种场景

Glances 的架构非常灵活,支持三种主要的使用模式,满足从个人开发机到中小规模生产集群的各种需求。

1. 单机模式 (Standalone)

这是最基础的用法,即增强版的 htop,直接在终端运行,适合快速查看本地机器状态。

# 基础启动
$ glances

# 每 2 秒刷新一次
$ glances -t 2

# 使用白色主题
$ glances --theme-white

退出按 q 或者 ESC 键,显示效果:

Glances 独立模式
Glances 独立模式

当然,也可以通过 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

其他平台

  • macOSbrew install glances
  • Android:结合 Termux 应用,旧手机也能焕发二春,变身成一台微型监控服务器。

实战场景与最佳实践

多服务器监控方案

方案一:Glances + InfluxDB + Grafana

适合需要持久化历史数据的场景:

  1. 各服务器部署 Glances,配置数据导出到 InfluxDB
  2. InfluxDB 存储时序数据
  3. 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/htopGlancesPrometheusNetdata
资源占用极低中等
学习成本
Web 界面⚠️ (需Grafana)
历史数据⚠️ (需导出)
多服务器监控
API 支持
容器监控
推荐场景临时查看轻量监控企业级全功能

选择建议

  • 临时快速查看:使用 htop
  • 单机或小规模 VPS 监控:选择 Glances
  • 需要长期历史数据分析:考虑 NetdataPrometheus + Grafana
  • 企业级大规模监控:使用 Prometheus 生态

总结

Glances 完美地平衡了 易用性专业性。对于普通用户,它是一个开箱即用的炫酷监控面板;对于系统管理员,它是一个支持远程监控和即时告警的利器;对于开发者,它则是一个灵活的数据采集库。

核心优势总结

  • ✅ 轻量级,资源占用适中(相比 Prometheus)
  • ✅ 功能全面,覆盖 CPU、内存、网络、磁盘 IO
  • ✅ 部署简单,支持 pip、Docker、apt 等多种方式
  • ✅ 跨平台,Linux/macOS/Windows/Android 全支持
  • ✅ 可编程,提供 RESTful API 和 Python 库

如果你需要一个能替代 top 且功能更强大的工具,Glances 绝对值得考虑。更多详细配置和高级用法,请参考 Glances 官方文档

相关资源