一个基于 FastAPI + Vue 3 的腾讯云监控看板,当前覆盖:
CVM实例运行监控COS存储监控SQLite本地时序存储5 分钟后台采集入库- 公网带宽阈值告警与邮件通知
30 分钟 / 6 小时 / 日对比 / 周对比分析视图
CVM- CPU 使用率
- 内存使用率
- 公网入带宽
- 公网出带宽
- 磁盘使用率
COS- 标准存储容量
- 标准对象数量
- 外网上行带宽
- 外网下行带宽
GET请求数PUT请求数
CVM 监控- 两台主机的实时卡片和趋势图
CVM 分析- 时间窗切换
- 当前窗口 vs 上一窗口对比图
- 最近告警
COS 存储- 两个 bucket 的实时卡片和趋势图
COS 存储分析- 时间窗切换
- 当前窗口 vs 上一窗口对比图
- 页面自动刷新:
60 秒 - 后台采集入库:
300 秒 - 带宽告警巡检:
300 秒 - 监控数据优先读本地
SQLite - 本地数据不足时再回源腾讯云补库
backend/
app/
api/ FastAPI 接口
clients/ 腾讯云 API 客户端
services/ 监控聚合、采集、告警服务
schemas/ Pydantic 模型
db.py SQLite 初始化与连接
repositories.py
frontend/
src/
api/ 前端接口封装
components/ 图表、卡片组件
views/ 看板页面
- Python
3.9+ - Node.js
18+ - 腾讯云监控 API 可用凭据
- 如果开启邮件告警,需要可用 SMTP 账户
cd /Users/kong/dev/moniServer/backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000cd /Users/kong/dev/moniServer/frontend
npm install
npm run dev -- --host 127.0.0.1 --port 5173开发地址:
基础配置:
TENCENT_SECRET_IDTENCENT_SECRET_KEYTENCENT_REGIONDEFAULT_INSTANCE_IDMONITOR_INSTANCE_IDSMONITOR_COS_BUCKET_NAMESCORS_ORIGINSSQLITE_DB_PATH
采集与告警:
METRICS_COLLECTION_POLL_SECONDSMETRICS_COLLECTION_LOOKBACK_MINUTESBANDWIDTH_ALERT_THRESHOLD_MBPSBANDWIDTH_ALERT_POLL_SECONDSBANDWIDTH_ALERT_RECIPIENTBANDWIDTH_ALERT_LOG_PATHBANDWIDTH_ALERT_STATE_PATH
邮件发送:
SMTP_HOSTSMTP_PORTSMTP_USERNAMESMTP_PASSWORDSMTP_FROM_EMAILSMTP_USE_SSL
默认示例见 backend/.env.example。
默认数据库文件:
当前主要表:
metric_points- 监控时序点
alert_events- 告警事件
poll_runs- 后台采集与巡检执行记录
GET /api/monitor/config- 返回实例列表、COS bucket 列表、默认时间范围
GET /api/monitor/dashboard- CVM 实时看板
GET /api/monitor/cos/dashboard- COS 实时看板
GET /api/monitor/history- 读取 SQLite 历史时序
GET /api/monitor/compare- 比较两个时间窗口的均值和峰值
GET /api/monitor/alerts/recent- 最近告警
GET /api/monitor/collector/status- 最近一次采集状态、下一次采集时间、写入点数
GET /health- 服务健康状态
- 监控对象:指定
CVM实例 - 监控指标:公网入带宽 / 公网出带宽
- 阈值:默认
50 Mbps - 规则:任一检查点超过阈值即记录一次
- 去重:同实例、同指标、同时间点不会重复告警
- 动作:
- 写入
SQLite - 写入
jsonl日志 - 如果 SMTP 已配置则发送邮件
- 写入
- 前端不直接访问腾讯云 API,避免密钥暴露。
- 分析页即使历史数据不满
6 小时、1 天或1 周,也会保留图表并显示已有数据。 SQLite现在是本地查询底座,适合做趋势分析和对比;后续如果要多实例部署,再考虑迁移到PostgreSQL。