DANGER

本页由 AI 工具参考代码编写,尚未经过人工审核,内容仅供参考。如果无法解决问题或需要协助部署,可邮箱联系:kuohu233@qq.com

监控与告警

日常监控是保证 AstraSchedule 稳定运行的关键。本章介绍如何检查系统健康状态、识别常见问题并及时处理。

后端健康检查

基础健康检查

最简单直接的检查方式:访问后端 API 端点。

# 检查后端是否正常响应
curl http://192.168.1.100:9000/web/menu
# 或 HTTPS
curl https://api.你的域名.com/web/menu

正常返回:JSON 格式的菜单数据,包含 statusdata 字段。

异常情况

返回结果可能原因处理方式
连接被拒绝后端进程未运行重启后端服务
超时网络不通或防火墙拦截检查网络连接和防火墙规则
返回 500 错误数据库损坏或配置错误查看后端日志定位
返回空响应函数计算冷启动中等待几秒后重试
DNS 解析失败域名配置问题检查 DNS 记录

自动健康检查脚本(内网方案)

创建一个简单的健康检查脚本,定期检测后端状态:

#!/bin/bash
# /opt/astra/scripts/healthcheck.sh

API_URL="http://localhost:9000/web/menu"
LOG_FILE="/var/log/astra-healthcheck.log"

response=$(curl -s -o /dev/null -w "%{http_code}" "$API_URL")

if [ "$response" != "200" ]; then
    echo "[$(date)] Health check FAILED: HTTP $response" >> "$LOG_FILE"
    # 可选:自动重启后端
    # systemctl restart astrago
else
    echo "[$(date)] Health check OK" >> "$LOG_FILE"
fi

配合 systemd timer 或 crontab 实现定期执行:

# crontab: 每 5 分钟检查一次
*/5 * * * * /bin/bash /opt/astra/scripts/healthcheck.sh

函数计算监控(极低成本 & 高并发方案)

阿里云函数计算控制台

登录阿里云函数计算控制台,选择你的函数,可查看以下关键指标:

指标说明正常范围
调用次数所有请求的总数随班级数量和刷新频率变化
错误率返回非 200 的请求占比应接近 0%
平均耗时请求平均处理时间通常 < 200ms
最大耗时请求最大处理时间冷启动可能 > 1s
并发执行数同时处理的请求数通常为个位数
冷启动次数实例从零启动的次数非预留实例模式较常见

冷启动监控

函数计算在无请求时会回收实例,下次请求触发冷启动。冷启动通常持续 2-5 秒,期间请求有延迟。

如何判断是否发生冷启动:

  1. 在函数计算控制台查看「实例指标」,如果实例数从 0 变为 1,说明发生了冷启动
  2. 在后端日志中查看启动日志([GIN-debug] Listening and serving HTTP on :9000),每次出现代表一次冷启动

如何减少冷启动:

  • 在函数计算控制台配置「预留实例」,保持至少 1 个实例常驻(会产生少量费用)
  • 使用定时触发器(如每 5 分钟访问一次 /web/menu)保持实例活跃

错误率告警

在函数计算控制台可以配置告警规则:

  1. 进入 监控 → 告警管理
  2. 创建告警规则:
    • 指标:函数错误率
    • 条件:错误率 > 5%,持续 5 分钟
    • 通知方式:短信或邮件
  3. 同理可配置调用次数突增告警(可能是被攻击)和耗时突增告警

管理端首页仪表盘

管理端首页提供了直观的运行状态概览。

客户端连接状态

进入管理端后,首页仪表盘显示:

  • 所有已配置班级的客户端连接状态:绿色 = 在线,灰色 = 离线
  • 今日异常断连次数:客户端非正常断开 WebSocket 连接的次数

正常情况:所有班级状态为绿色,断连次数为 0。

需要关注:多个班级同时离线(可能是后端或网络故障)、单个班级频繁断连(可能是客户端或网络问题)。

客户端离线排查

如果仪表盘显示客户端离线:

  1. 确认教室电脑是否开机且程序正在运行
  2. 检查教室网络是否正常(能否 ping 通后端地址)
  3. 确认客户端填写的后端地址是否正确
  4. 如果使用 WebSocket 连接,检查防火墙是否放行了相应端口
  5. 查看客户端日志(托盘菜单 → 右键 → 查看日志)

常见告警信号及处理

管理端异常

现象可能原因处理步骤
管理端白屏或一直加载后端挂了,或 global.js 中地址配错1. 检查后端是否运行 2. 打开浏览器开发者工具查看网络请求 3. 确认 APISRV 配置正确
保存配置失败(返回 403)BasicAuth 密码错误或未配置检查管理端登录密码,确认 config.tomltoken 配置
保存配置失败(返回 500)后端内部错误查看后端日志,检查数据库是否可写
登录后反复跳回登录页Cookie/Token 过期清除浏览器缓存后重试

客户端异常

现象可能原因处理步骤
客户端显示离线配置客户端连不上后端1. 检查后端是否运行 2. 检查客户端地址配置 3. 检查网络是否可达
课表不更新WebSocket 连接断开1. 托盘菜单手动点击「更新课表」 2. 检查网络和防火墙
天气不显示API Key 无效或配额用完1. 检查 config.toml 中天气 API 配置 2. 注册和风天气 API Key(JWT 方式不限次数)
倒数日不显示配置问题1. 检查倒数日配置是否过期 2. 检查生效域是否覆盖当前班级

服务端异常

现象可能原因处理步骤
后端频繁重启配置错误或 OOM1. 查看系统日志 (journalctl -u astrago -f) 2. 检查内存使用 (htopfree -h)
磁盘空间不足日志文件堆积或其他服务占用1. 检查磁盘使用 (df -h) 2. 清理旧日志和临时文件
数据库文件损坏异常断电或磁盘故障1. 停止后端 2. 使用备份恢复数据库 3. 重启后端
Nginx 502/504后端未响应1. 检查后端进程状态 2. 查看 Nginx 错误日志 3. 重启后端服务

网络异常

现象可能原因处理步骤
内网访问不通防火墙规则、IP 变更、网络故障1. ping 测试连通性 2. 检查防火墙规则 3. 确认服务器 IP 未变
外网访问 403Cloudflare WAF 误拦截1. 查看 Cloudflare Security Events 2. 将误判规则设为跳过
外网访问很慢CDN 缓存失效或源站响应慢1. 测试直连源站速度 2. 检查函数计算是否有冷启动

日志查看

内网方案(systemd)

# 查看实时日志
journalctl -u astrago -f

# 查看最近 100 行日志
journalctl -u astrago -n 100

# 查看今日日志
journalctl -u astrago --since today

# 查看 Nginx 访问日志
tail -f /var/log/nginx/access.log

# 查看 Nginx 错误日志
tail -f /var/log/nginx/error.log

函数计算方案

  1. 登录阿里云函数计算控制台
  2. 选择你的函数 → 调用日志
  3. 可按时间范围和关键词筛选
  4. 支持实时日志(Live Tail)

学期初检查清单

每学期开学前,建议执行以下检查确保一切就绪:

  • 后端正常运行,curl /web/menu 返回正常
  • 管理端可正常登录和保存配置
  • 新课表、新作息已录入并验证
  • 每个班级的配置完整(课表、作息、科目、倒数日)
  • 自动任务(调休等)已按新学期日期更新
  • 执行一次完整备份
  • 抽查一个教室客户端能正常拉取课表
  • 天气 API Key 有效且配额充足
  • 磁盘空间充足(至少 1GB 可用)