纯 Python / 零依赖第三方 API / 直接走 Minecraft 原生协议拿数据

GitHub: https://github.com/forgetmelodyXL/mc-monitor| MIT License

如果你开过 Minecraft 服(无论是和小伙伴私服还是社区公服),大概率遇到过同一类问题:

  • "服是不是挂了?"——只能靠群里有人喊,或者你自己去敲 telnet

  • 想看"最近半小时有没有人玩、延迟怎么样",基本靠猜

  • 现成的监控方案要么偏重(Prometheus + Grafana),要么要你把服务端改成某种面板托管模式

所以我写了 MC Server Monitor(mc-monitor):一个轻量到离谱、但功能够用的 MC 服务器监控面板——单文件 SQLite、Flask 前端一体、双击就能跑起来


它是什么(一句话)

MC Server Monitor 是一个通过 Minecraft SLP / Bedrock Raknet / HTTP(S) / TCP 直连探测服务器状态的监控面板。

不需要装 Bungee/Velocity/Paper 插件,不需要第三方 API Key,不需要改服务端——只要你能连到那个端口,它就能监控。


核心功能(你实际能用上的部分)

1) 多协议探测

  • Java 版:走标准的 Server List Ping (SLP)​ 拿 MOTD / 版本 / 在线人数 / 采样玩家

  • 基岩版:Raknet 探测

  • 非 MC 端口也能管:HTTP(S) 健康检查 / 通用 TCP 连通性

    这样你可以顺手把配套服务(网站、API、数据库端口存活)也纳入同一面板。

2) 后台定时轮询 + 历史趋势

  • APScheduler​ 做后台采集(默认 60 秒一次),写进 status_logs

  • 前端用 Chart.js 双 Y 轴折线图同时看 在线人数 + 延迟(这个组合其实比单纯"在线/离线"有用得多)

3) 掉线 / 恢复告警(本地优先)

  • 自动检测状态切换 → 弹窗告警 + 历史记录

  • 后续路线里我还规划了 Telegram / 微信 / 邮件推送(Webhook 化是更稳的做法)

4) 用户 & 权限模型(但不重型)

  • 多用户:每人管自己的服务器列表

  • 公开 / 私有:你可以挑几个服放到公共主页给访客查(比如"我们生存服现在几个人")

  • 管理后台:用户管理、服务器管理、注册开关、维护模式

  • 密码用 PBKDF2-HMAC-SHA256 + 随机盐(20 万次迭代),会话 HttpOnly + SameSite=Lax(不是银弹,但在同机小工具里已经负责任)


为什么我选择这样做(设计取舍)

✅ 「零依赖第三方 API」是刻意设计

很多面板为了省事会走某个查询 API,但我更想要:

  • 你给我 IP+端口,我自己探

  • 不绑账号体系、不担心 API 挂掉、不用申请 key

    本质就是:把 Minecraft 客户端"多人列表里点一下看到的信息",做成可轮询、可存历史、可可视化的版本。

✅ SQLite + 单文件 db,方便到离谱

  • mcmonitor.db在项目根目录

  • 迁移 = 拷文件

  • 忘记密码 = 删库重跑(admin/admin)

    对于私人/小团队场景,这比"先装 PostgreSQL 再搞 migration 再调权限"现实得多

✅ 最低摩擦力启动(Windows 友好)

提供了三种路径:

方式

适合谁

launch.bat一键启动

Windows 用户不想配环境(它会自己拉便携 Python ~10MB)

pip install -r requirements.txt+ python main.py

常规 Python 开发者

PyInstaller 单文件 EXEbuild.batdist\mcmonitor.exe

你想丢到别的 Win10/11 机器直接双击跑


快速上手(5 分钟内看到效果)

git clone https://github.com/forgetmelodyXL/mc-monitor.git
cd mc-monitor
pip install -r requirements.txt
python main.py
# 浏览器打开 http://127.0.0.1:5000

默认管理员:admin / admin第一次登录后请一定去管理后台改密码

如果你想公网访问:

  • 放行 5000​ 端口

  • 强烈建议前面套一层 Nginx + HTTPS(Let's Encrypt)

  • README 里给了 systemd服务与 Nginx 反代示例


技术栈(不长,但够用)

选型

后端

Python 3.10+ · Flask 3 · SQLite (WAL)

协议

Minecraft SLP · Bedrock Raknet · HTTP(S) · TCP

调度

APScheduler(BackgroundScheduler)

前端

Jinja2 · 原生 CSS · Chart.js 4.4(CDN)

PWA

manifest.json + Service Worker

打包

PyInstaller(单文件 EXE)

架构也很直白:app.py承载路由/SLP/DB/CSRF/告警/迁移,main.py负责启动;模板在 templates/,静态资源在 static/


我下一步打算做什么

路线图上优先级最高的是这几块(也欢迎反馈/PR):

  • 告警通道外发:Telegram Bot / Webhook / 邮件(可插拔)

  • WebSocket 实时推送(减少轮询刷新带来的"看起来像静态页"的感觉)

  • Docker 官方镜像​ + docker-compose一步起

  • i18n(中文/英文至少)


最后

这个项目定位不是"企业级观测平台",而是:

给服主 / 小社区一个 5 分钟能跑起来、不用改服务端、还能看历史趋势和掉线告警 的面板。

如果你也在管 MC 服、或者你公司内网里有某些"没人盯但一旦挂就很尴尬"的服务端口,可以试试把它丢进去当轻量哨兵。

⭐ GitHub:https://github.com/forgetmelodyXL/mc-monitor

Bug / 需求 / PR 都欢迎。

没人敢说自己的人生很轻松。但可以肯定,这就是它的迷人之处。