配置

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

配置由 GTNHLib 的配置系统管理(ExporterConfig),服务器启动时自动生成 config/prometheus_exporter.cfg。共 2 个分类、20 个选项。

注册方式

@Config(modid = PrometheusExporterMod.MODID, category = "")
public class ExporterConfig {
    public static Collector collector = new Collector();
    public static Web web = new Web();

ExporterConfig.java:9-13。在 preInit 中通过 ConfigurationManager.registerConfig(ExporterConfig.class) 注册(PrometheusExporterMod.java:202), ConfigException 被包装成 RuntimeException 抛出(:203-205)。

category = "" 使两个嵌套类成为顶层分类 collector 与 web(不是嵌套层级)。 字段为 public static 且带默认值注解,GTNHLib 通过反射写入实例字段后, 调用方一律读 ExporterConfig.collector.xxx / ExporterConfig.web.xxx。

客户端也会生成这份配置文件——onPreInitialization 在 if (event.getSide() == Side.CLIENT) return; (:207)之前就完成了配置注册。

collector 分类(18 项)

开关(9 项,全部为 boolean)

选项 类型 默认值 源码 作用
jwm_collector boolean true :17-19 采集 JVM 进程指标(DefaultExports.register)
entities boolean true :21-23 实体指标
tileentities boolean true :25-27 正在 tick 的方块实体指标
tileentities_details boolean false :29-31 按类型细分方块实体指标,替代 tileentities
ticks boolean true :33-35 tick 耗时指标
chunks boolean true :37-39 区块指标
players boolean true :41-43 玩家指标
player_statistics boolean true :45-47 玩家统计指标
teams boolean true :49-51 ServerUtilities 队伍指标
self_metrics boolean true :53-55 采集器自监控指标

tileentities_details 是唯一默认关闭的开关。它不是附加输出,而是在 TileEntities.sample() 中二选一(TileEntities.java:40、:65-74):为 true 时输出 mc_dimension_tileentities_detailed,否则输出 mc_dimension_tileentities。 注释明确写 replaces tileentities。

刷新间隔(6 项,全部为 int)

单位是服务器 tick,注释统一写明 20 = 1 second。全部带 @Config.RangeInt(min = 1, max = 72000),即允许范围 1 tick ~ 3600 秒。

选项 默认值 约合 源码
entities_interval_ticks 100 5 s :57-60
tileentities_interval_ticks 100 5 s :62-65
chunks_interval_ticks 40 2 s :67-70
players_interval_ticks 40 2 s :72-75
player_statistics_interval_ticks 600 30 s :77-80
teams_interval_ticks 600 30 s :82-85

分档是刻意的:廉价的采集器刷新频繁,昂贵的刷新稀疏。这些默认值与 README 中的 「Collection model and caching」表格完全一致(已逐项比对源码与 README、示例配置文件)。

权限与错误策略(2 项)

选项 类型 默认值 范围 源码
command_permission_level int 4 0 – 4 :87-90
collector_mc_dimension_tick_errors enum LOG IGNORE / LOG / STRICT :92-111

command_permission_level 被 ForgePrometheusCommand.getRequiredPermissionLevel() 直接返回 (ForgePrometheusCommand.java:125),默认 4 意味着默认只有 OP 能操作 /prometheus。 范围 0–4 覆盖了 Minecraft 的全部权限等级(0 = 所有人)。

collector_mc_dimension_tick_errors 是个纯枚举(TickErrorPolicy,ExporterConfig.java:131-146), 控制维度 tick 事件不配对时的处理方式,在 Ticks 的两处使用(Ticks.java:161、:200):

值 行为 后果
IGNORE 什么也不做(case IGNORE -> {}) 静默吞掉不配对事件
LOG LOG.debug(...) 一条调试日志 默认;debug 级别通常不进日志文件
STRICT 抛 IllegalStateException 会崩服

配置注释(:93-110)解释了 IGNORE 的存在理由:某些 mod 的自定义维度 tick 事件启停不可靠, 若每次都记录可能每秒产生 20 条 × 每维度 的日志,快速撑爆 logs/debug.txt。 注释也给出了 LOG 之外的第三种做法——在 log4j2.xml 中过滤掉 com.github.cpburnz.minecraft_prometheus_exporter.collectors.Ticks。

注意 STRICT 的两个分支只覆盖了「重复 start」和「无 start 的 stop」两种情况; Ticks.stopDimensionTick 中还有第三种不一致——stop 的维度与当前计时维度不同—— 那一处是无条件抛异常的(Ticks.java:212),不受本配置影响。

web 分类(2 项)

选项 类型 默认值 范围 源码
listen_address String 0.0.0.0 — :116-118
listen_port int 19565 0 – 65535 :120-124

listen_address 默认 0.0.0.0 意味着监听所有网卡(注释写 Default is everywhere)—— 指标端点无任何认证,部署时需靠防火墙或反向代理限制访问。

listen_port 默认 19565 而非常见的 9100。注释解释了取值来源:

The default TCP port ot use.
It was derived from the Minecraft port (25565) and the Prometheus exporter ports (9100+)

ExporterConfig.java:122-123(原文 ot 为 to 的拼写错误,且该错字已同步写入 examples/prometheus_exporter.cfg:82)。19565 = 25565 − 6000。

配置的生效时机

开关类选项只在 initCollectors() 时读取一次(PrometheusExporterMod.java:132-147), 即服务器启动或执行 /prometheus restart 时。改动配置文件后必须重启导出器才生效。

唯一的例外是 ticks——Ticks 的事件订阅带 @EventBusSubscriber.Condition, 在事件分发时实时求值(Ticks.java:105-108),因此改 ticks 无需重启。 collector_mc_dimension_tick_errors 同理,在错误发生时才读取 (Ticks.java:161、:200)。

间隔类选项则在下一次 startExporter() 时被读入采集器构造函数,构造后即固定—— 运行期改间隔需要重启导出器。

20 个选项全部被实际读取

已 grep 确认 20 个配置字段无一是死配置:jwm_collector(PrometheusExporterMod:132)、 tileentities_details(TileEntities:40)、command_permission_level (ForgePrometheusCommand:125)、collector_mc_dimension_tick_errors(Ticks:161、:200) 等均有读取点,其余 6 个间隔与 6 个开关在 initCollectors() 中读取。

配置文件示例

仓库中的 examples/prometheus_exporter.cfg 是完整生成的配置样例,其默认值与 ExporterConfig.java 中的注解逐项一致(已比对:9 个 boolean 开关、6 个间隔、 权限等级、错误策略、地址与端口共 20 项全部吻合)。Forge 的 Configuration 按字段名字母序 输出,所以文件中的排列顺序是 chunks → collector_mc_dimension_tick_errors → command_permission_level → entities → …,与源码声明顺序无关。