1. 项目概述
Glances是一款跨平台的实时系统监控工具,采用Python编写,能够通过命令行界面直观展示CPU、内存、磁盘、网络等关键系统指标。相比传统任务管理器,它提供了更丰富的监控维度和更友好的可视化界面。在Windows环境下部署Glances并实现外部访问,可以让我们随时掌握系统运行状态,特别适合需要长期监控服务器性能的运维场景。
我最近在本地Windows Server上部署了这套监控方案,整个过程涉及到Python环境配置、防火墙设置、反向代理等多个技术环节。下面将详细分享从零开始部署到实现外网访问的全套解决方案,包含我在实际部署过程中踩过的坑和优化技巧。
2. 环境准备与安装
2.1 系统要求检查
首先确保你的Windows系统满足以下要求:
- Windows 10/11或Windows Server 2016及以上版本
- PowerShell 5.1或更新版本
- 至少2GB可用内存
- 管理员权限账户
提示:在Server Core版本上部署时,需要额外安装图形化组件才能使用Web界面。
2.2 Python环境配置
Glances基于Python开发,推荐使用Python 3.7+版本:
# 检查Python版本 python --version # 如果没有安装Python,从官网下载安装包时务必勾选"Add Python to PATH"我建议使用虚拟环境来隔离依赖:
# 创建虚拟环境 python -m venv glances_env # 激活环境 .\glances_env\Scripts\activate2.3 安装Glances核心组件
在激活的虚拟环境中执行:
pip install glances[all][all]参数会安装所有可选依赖,包括Web界面支持。安装完成后验证:
glances --version常见安装问题解决:
- 如果遇到"Unable to find vcvarsall.bat"错误,需要安装Visual C++ Build Tools
- 权限问题可以尝试
--user参数或使用管理员权限的PowerShell
3. 基础配置与优化
3.1 配置文件生成与修改
首次运行会自动生成配置文件:
glances --generate-config配置文件通常位于%USERPROFILE%\.config\glances\glances.conf。关键配置项:
[global] # 设置监听所有网络接口 bind=0.0.0.0 # Web服务器端口 web_server_port=61208 # 允许远程连接 allow_remote_access=true3.2 防火墙设置
在Windows防火墙中开放端口:
New-NetFirewallRule -DisplayName "Glances Web" -Direction Inbound -LocalPort 61208 -Protocol TCP -Action Allow3.3 服务化部署(可选)
创建后台运行服务:
# 创建启动脚本start_glances.ps1 $script = @" cd $PSScriptRoot .\glances_env\Scripts\python.exe -m glances -w "@ $script | Out-File -FilePath start_glances.ps1 # 创建Windows服务 New-Service -Name "Glances" -BinaryPathName "powershell.exe -File $PSScriptRoot\start_glances.ps1" -DisplayName "Glances Monitor" -StartupType Automatic4. 实现外部访问方案
4.1 直接暴露的风险与问题
虽然可以通过端口转发直接暴露Glances服务,但存在以下风险:
- 默认没有身份验证
- 使用明文HTTP协议
- 可能暴露系统敏感信息
4.2 推荐方案:Nginx反向代理
我推荐使用Nginx作为反向代理,配置SSL和基础认证:
- 安装Nginx for Windows
- 修改nginx.conf添加配置:
server { listen 443 ssl; server_name monitor.yourdomain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://localhost:61208; proxy_set_header Host $host; auth_basic "Restricted Access"; auth_basic_user_file /path/to/htpasswd; } }- 创建密码文件:
htpasswd -c /path/to/htpasswd username4.3 备选方案:SSH隧道
对于临时访问需求,可以使用SSH隧道:
ssh -L 61208:localhost:61208 user@windows_host然后在本地浏览器访问http://localhost:61208
5. 高级功能扩展
5.1 数据持久化与可视化
配置Glances将数据输出到InfluxDB:
[export] enable_influxdb=true influxdb_host=localhost influxdb_port=8086 influxdb_user=glances influxdb_password=secret influxdb_db=glances配合Grafana可以创建漂亮的监控看板。
5.2 告警设置
在配置文件中添加告警规则:
[alerts] # CPU使用率超过90%持续30秒告警 cpu=90,30 # 内存使用超过80%告警 mem=805.3 插件开发
Glances支持自定义插件开发。示例插件模板:
from glances.plugins.glances_plugin import GlancesPlugin class MyPlugin(GlancesPlugin): def __init__(self, args=None): super(MyPlugin, self).__init__(args=args) def update(self): return {"custom_metric": 42}6. 常见问题排查
6.1 Web界面无法访问
检查步骤:
- 确认服务正在运行:
Get-Process python - 检查端口监听:
netstat -ano | findstr 61208 - 验证防火墙规则:
Get-NetFirewallRule -DisplayName "Glances*"
6.2 性能数据不准确
可能原因:
- 系统兼容性问题,尝试更新psutil库:
pip install -U psutil - 某些指标在Windows上需要额外权限
6.3 高CPU占用问题
优化建议:
- 增加刷新间隔:
glances -t 5(5秒刷新) - 禁用不需要的插件
- 使用
--disable-plugin参数关闭特定监控项
7. 安全最佳实践
- 必须修改默认端口
- 必须启用HTTPS加密
- 建议配置IP白名单限制:
location / { allow 192.168.1.0/24; deny all; # ...其他代理配置 }- 定期更新Glances版本:
pip install -U glances - 监控日志文件:
%USERPROFILE%\.config\glances\glances.log
8. 实际使用体验
经过一个月的生产环境使用,我发现这套方案有以下优势:
- 资源占用极低(<50MB内存)
- 数据刷新实时性好(1秒级延迟)
- 插件系统扩展性强
需要改进的方面:
- Windows下的磁盘IO统计不如Linux准确
- 历史数据回溯功能较弱
我的优化配置方案是配合Telegraf+InfluxDB实现长期数据存储,用Grafana做可视化展示,这样既保留了Glances的轻量级特性,又弥补了它在历史数据分析方面的不足。