1. 项目概述
Glances 是一款基于 Python 开发的跨平台系统监控工具,它通过统一的 Web 界面整合了 top、htop、iostat 等传统命令行工具的功能。作为一名运维工程师,我经常需要在多台服务器之间切换监控,而 Glances 提供的集中式监控方案完美解决了这个问题。本文将分享我在 Ubuntu 系统上部署 Glances 并通过内网穿透实现外部访问的完整实践过程。
这个方案特别适合以下场景:
- 需要远程监控家庭实验室的服务器状态
- 管理托管在 IDC 机房的设备
- 临时调试客户现场的环境
- 不想配置复杂监控系统的小型团队
2. 环境准备与基础部署
2.1 系统环境配置
推荐使用 Ubuntu 20.04 LTS 或更新版本作为基础环境。在开始安装前,建议先执行以下系统更新:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-pip python3-venv
注意:生产环境中建议在非 root 用户下操作,本文示例为简化流程使用了 sudo
2.2 虚拟环境搭建
使用 Python 虚拟环境可以避免包依赖冲突:
bash复制python3 -m venv ~/glances-env
source ~/glances-env/bin/activate
激活虚拟环境后,命令行提示符前会出现 (glances-env) 标记。如果需要在退出终端后保持环境激活状态,可以将激活命令添加到 ~/.bashrc 文件末尾:
bash复制echo "source ~/glances-env/bin/activate" >> ~/.bashrc
2.3 Glances 核心安装
安装包含 Web 功能的完整版本:
bash复制pip install glances[web]
安装完成后可以通过以下命令验证版本:
bash复制glances --version
推荐同时安装以下可选组件增强功能:
bash复制pip install psutil bottle
3. Glances 配置与优化
3.1 基础服务启动
最简单的启动方式是直接运行:
bash复制glances -w
这个命令会:
- 启动 Web 服务(默认端口 61208)
- 启用 RESTful API(端口 61208)
- 开启 XML-RPC 接口
实测建议:添加
-t 2参数可以将数据刷新间隔调整为2秒,避免浏览器频繁刷新
3.2 自定义配置
Glances 的配置文件位于 ~/.config/glances/glances.conf,首次启动后会自动生成。几个关键配置项:
ini复制[global]
refresh=2 # 数据刷新间隔(秒)
theme=white # 界面主题(white/dark/green)
如果要绑定特定IP地址(默认监听所有接口):
bash复制glances -w -B 192.168.1.100
3.3 系统服务化
为了让 Glances 作为后台服务运行,可以创建 systemd 服务文件:
bash复制sudo tee /etc/systemd/system/glances.service <<EOF
[Unit]
Description=Glances Monitoring Tool
After=network.target
[Service]
User=$USER
ExecStart=$HOME/glances-env/bin/glances -w
Restart=always
[Install]
WantedBy=multi-user.target
EOF
然后启用服务:
bash复制sudo systemctl daemon-reload
sudo systemctl enable --now glances
4. 内网穿透方案实现
4.1 穿透工具选型对比
常见的内网穿透方案比较:
| 方案 | 配置复杂度 | 稳定性 | 安全性 | 适用场景 |
|---|---|---|---|---|
| 路由侠 | 中等 | 高 | 中 | 临时调试 |
| frp | 高 | 高 | 高 | 长期使用 |
| ngrok | 低 | 中 | 高 | 快速测试 |
| SSH隧道 | 中 | 高 | 高 | 技术用户 |
个人建议:如果是生产环境长期使用,推荐 frp 方案;临时调试则路由侠更方便
4.2 路由侠详细配置
4.2.1 Docker 环境准备
确保系统已安装 Docker:
bash复制sudo apt install -y docker.io
sudo systemctl enable --now docker
4.2.2 容器部署
下载并运行路由侠容器:
bash复制docker run -d --name lyx \
--restart=always \
--net=host \
-e code=YOUR_INSTALL_CODE \
luyouxia/lyx
关键参数说明:
--net=host:使用主机网络模式,避免NAT带来的端口问题--restart=always:确保容器意外退出后自动重启
4.2.3 端口映射配置
在路由侠管理界面添加映射时需注意:
- 协议类型选择 HTTP
- 内网地址填写
127.0.0.1:61208 - 建议开启访问密码保护
5. 安全加固措施
5.1 Glances 安全配置
- 启用基础认证:
bash复制glances -w --username admin --password yourpassword
- 限制访问IP(结合防火墙):
bash复制sudo ufw allow from 192.168.1.0/24 to any port 61208
5.2 路由侠安全建议
- 定期更换安装码
- 设置复杂的管理密码
- 启用访问日志监控
- 配置自动更新策略
6. 常见问题排查
6.1 连接性问题
症状:无法访问 Web 界面
- 检查防火墙状态:
sudo ufw status - 验证服务是否运行:
ss -tulnp | grep 61208 - 测试本地访问:
curl http://localhost:61208
6.2 性能问题
症状:界面刷新卡顿
- 调整刷新间隔:
glances -w -t 5 - 禁用不需要的插件:编辑配置文件中的
disable_plugin项 - 检查系统负载:
top或htop
6.3 路由侠连接失败
排查步骤:
- 检查容器状态:
docker logs lyx - 验证网络连通性:
ping www.luyouxia.com - 检查时间同步:
timedatectl status
7. 高级应用场景
7.1 多节点集中监控
使用 Glances 的服务器模式:
bash复制glances -s -B 0.0.0.0 # 服务端
glances -c <server-ip> # 客户端
7.2 与 Prometheus 集成
通过 Glances 的 REST API 对接 Prometheus:
yaml复制# prometheus.yml 配置示例
scrape_configs:
- job_name: 'glances'
metrics_path: '/api/3/all'
static_configs:
- targets: ['glances-server:61208']
7.3 自定义插件开发
Glances 支持通过 Python 扩展监控项,示例插件模板:
python复制from glances.plugins.glances_plugin import GlancesPlugin
class MyPlugin(GlancesPlugin):
def __init__(self, args=None):
super().__init__(args=args)
def update(self):
return {"custom_metric": 42}
8. 替代方案对比
当 Glances 不能满足需求时,可以考虑:
| 工具 | 优势 | 不足 |
|---|---|---|
| Netdata | 实时性高 | 资源占用大 |
| Grafana | 可视化强大 | 配置复杂 |
| Zabbix | 功能全面 | 重量级 |
| Prometheus | 云原生友好 | 学习曲线陡 |
我在实际使用中发现,对于单机或小型集群监控,Glances 配合内网穿透是最轻量便捷的方案。特别是在资源受限的环境下,其 Python 实现的优势尤为明显。