| name | kaiwu-monitor |
| description | Use when working with the Kaiwu platform monitoring system — fetching training metrics, plotting charts, running anomaly checks, or updating monitor config. Covers the monitoring/ directory: fetch.py, check.py, plot.py, config.yaml. |
| version | 1.0.0 |
| author | Qoobee |
| platforms | ["linux"] |
| metadata | {"hermes":{"tags":["kaiwu","monitoring","rl","training"],"related_skills":["rl-advisor","repo-scanner"]}} |
Kaiwu Monitor
开悟平台训练监控系统。自动抓取训练指标、绘图、异常检测。
When to Use
- 用户问"看看训练状态"、"reward 怎么样"
- 需要抓取训练监控数据
- 需要生成训练图表
- 需要检查训练异常
- 需要更新监控配置(token、task_id 等)
Don't use for: 代码修改(用 git 工作流)、RL 理论问题(用 rl-advisor)
文件结构
monitoring/
├── config.yaml # 模板配置(提交 git)
├── config.local.yaml # 真实配置(不提交,.gitignore)
├── fetch.py # 数据抓取(DJB2 auth + API 调用)
├── check.py # 异常检测(cron 调用)
├── plot.py # 绘图(matplotlib Agg backend)
└── data/
├── latest.json # 最新快照
└── YYYY-MM-DD.json # 每天归档
快速命令
cd /root/Kaiwu_2026
python3 monitoring/fetch.py --validate
python3 monitoring/fetch.py --hours 6
python3 monitoring/fetch.py --hours 1 --groups quick_check
python3 monitoring/check.py
python3 monitoring/plot.py
python3 monitoring/plot.py --hours 12
python3 monitoring/fetch.py --update-config --token NEW_TOKEN
python3 monitoring/fetch.py --update-config --url "https://tencentarena.com/...task_id=183628&..."
认证机制
Kaiwu 平台 API 使用自定义认证:
Authorization: Bearer <token>
Cookie: select_lang=zh; kaiwu-token=<token>
x-kaiwu-ts: <当前Unix时间戳(秒)>
x-kaiwu-auth: <DJB2_HASH(ts + token[-32:] + endpoint)>
DJB2 算法(从 JS 源码逆向):
def kaiwu_auth(timestamp: int, token: str, endpoint: str) -> int:
s = f"{timestamp}{token[-32:]}{endpoint}"
r = 5381
for c in s:
r = r + (r << 5) + ord(c)
return r & 0x7FFFFFFF
完整逆向过程记录:docs/sop/开悟平台监控API接入SOP.md
API 端点
| 端点 | 用途 |
|---|
GetTrainMetricRange | 时间范围内的指标时序数据(推荐) |
GetTrainMetric | 最新快照(可能返回空) |
GetTrainLog | 训练日志 |
GetTrainTask | 任务详情 |
配置管理
config.local.yaml 覆盖 config.yaml 的字段。load_config() 函数合并两个文件:
- base (
config.yaml) 提供 metric_groups 等默认值
- local (
config.local.yaml) 提供 token、task_id 等敏感字段
⚠️ 坑点:三个脚本的 load_config 必须都实现合并逻辑,否则会丢失 metric_groups。
用户修改分支
token 更新
用户: "token 过期了,新的 token 是 xxx"
→ python3 monitoring/fetch.py --update-config --token xxx
→ python3 monitoring/fetch.py --validate
→ "已更新 ✓"
新训练启动
用户: "新训练 URL 是 https://tencentarena.com/...task_id=183628&..."
→ 从 URL 解析参数
→ python3 monitoring/fetch.py --update-config --url URL
→ "已切换 ✓"
赛段切换
用户: "现在打全国决赛了"
→ python3 monitoring/fetch.py --update-config --stage 全国决赛
→ "已切换,请提供新 URL"
常见问题
1. 返回空数据
- 检查时间范围是否正确
- 用
GetTrainMetricRange 而不是 GetTrainMetric
2. 中文字体显示为方块
dnf install -y google-noto-sans-cjk-sc-fonts
apt install -y fonts-noto-cjk
rm -rf ~/.cache/matplotlib
plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "SimHei", "DejaVu Sans"]
plt.rcParams["axes.unicode_minus"] = False
3. config.local.yaml 不生效
检查 load_config() 是否实现了 base + local 合并逻辑。
指标分组(按分析场景)
metric_groups:
quick_check: [win_rate, reward, total_loss, train_step]
reward_analysis: [reward_sum, reward_hp, reward_tower, reward_econ, reward_combat]
loss_analysis: [value_loss_hp, value_loss_tower, value_loss_econ, value_loss_combat, policy_loss, entropy_loss]
convergence: [episode_win_value, grad_norm, entropy_beta]
environment: [self_tower_hp, enemy_tower_hp, kill, death, frame]