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

2025年11月27日2680 words, 14 min read
Authors
    Glances 响应式 Web 监控界面

    在监控 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%~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 独立模式

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

    相关资源