Prometheus Exporter

[!INFO] Git Commit: 5ea0bc3 | Updated: 2026-10-01

Prometheus Exporter (modid prometheus_exporter) 是一个 Minecraft 1.7.10 / Forge 10.13.4.1614 的服务端监控导出器,把服务器与 JVM 的运行状态以 Prometheus 文本格式暴露给抓取工具。 本 mod 不向游戏内添加任何内容——0 方块、0 物品、0 实体,因此可以随时用新版 jar 覆盖旧版 而不影响存档。

上游作者为 cpburnz,GTNH 维护者为 Caedis。

它做什么

启动后在本机开一个 HTTP 端点(默认 0.0.0.0:19565),Prometheus 定时来抓取共 14 个 mc_ 前缀指标 + jwm_collector 开启时的标准 JVM 指标,覆盖:

  • tick 耗时 —— 服务器整体与各维度的 tick 时间直方图(7 档分桶)、主世界总时间;
  • 世界负载 —— 各维度的实体数(按类型)、正在 tick 的方块实体数、已加载区块数;
  • 玩家 —— 在线玩家列表(含 UUID、名称、所在维度)、每位玩家的原版统计值;
  • 队伍领地 —— ServerUtilities 的队伍认领区块数、其中强制加载数、队伍成员;
  • 自监控 —— 各采集器上次刷新耗时与数据陈旧度。

仅服务端:preInit 在客户端侧注册配置后即 return,不启动 HTTP 服务器、不注册指令。 客户端仍会生成配置文件。

架构特点:服务器线程采样 + 快照缓存

本 mod 最核心的设计是把指标采集与抓取彻底解耦(GTNH 移植的主要改动):

  • 读取世界状态的 6 个采集器在服务器线程上按各自间隔采样,产出不可变快照存入 AtomicReference;
  • Prometheus 的 HTTP 线程在 collect() 中只读缓存,永不触碰世界状态。

因此抓取既不会与 tick 循环竞争,也不会阻塞服务器。每个采集器的刷新间隔可在配置中单独调整 (1 tick ~ 3600 秒),默认廉价的 2 秒、昂贵的 30 秒。 若某次采样抛异常,保留旧快照且不更新时间戳,陈旧度指标会持续增长以暴露故障。

指令

/prometheus <start|stop|restart>(别名 /prom),权限等级默认 4(仅 OP), 可配置。执行 restart 可在不重启服务器的情况下让新配置生效。

注意事项

  • 默认监听 0.0.0.0(所有网卡)且无任何认证,部署时需靠防火墙或反向代理限制访问。
  • 默认端口 19565(非常见的 9100),由 25565 − 6000 推得,以免与 Minecraft 端口冲突。
  • 端口被占用时只记一条 error 日志,指令仍会显示启动成功——排查需看服务端日志。
  • 指令的 5 条提示消息是硬编码英文,本 mod 无语言文件,不会本地化。

设定列表

  • mod 元信息与打包数据 - @Mod 注解、modid 实读、access transformer、shadow 的 Prometheus 客户端、4 个生命周期事件
  • 配置 - 2 个分类 20 个选项的类型、默认值、范围与生效时机
  • 采集模型与快照缓存 - Sampler / CollectorScheduler / BaseCollector 的服务器线程采样与失败保留语义
  • 指标与采集器 - 14 个 mc_* 指标的名称、类型、标签与各自的采集规则
  • prometheus 指令 - 三个子命令、权限、幂等行为、消息本地化缺失与端口占用陷阱