A NeoForge mod that instruments a Minecraft server with OpenTelemetry, exporting metrics via OTLP to any compatible collector (Prometheus, Grafana Alloy, OpenTelemetry Collector, Dynatrace, etc.).
| Metric | Description |
|---|---|
| TPS & tick time | Server ticks per second and mean tick duration |
| Player count & latency | Online player count and per-player network latency |
| Chunk counts | Loaded chunk counts per dimension |
| Entity counts | Entity counts per dimension |
| Block entity counts | Block entity counts per dimension |
| Item entity counts | Item entity (dropped item) counts per dimension |
| World save duration | Histogram of world save time per dimension |
| Scheduled tick queue | Block and fluid scheduled tick queue sizes per dimension |
| Chunk generation | Counter of newly generated chunks |
| JVM metrics | Heap/non-heap memory, GC, threads, classes |
- Minecraft 26.1.2 with NeoForge 26.1.2.71+
- Java 21
- A running OTLP-compatible metrics endpoint
Primarily tested with the OpenTelemetry Collector (contrib) + Prometheus + Grafana stack. Other OTLP receivers (Grafana Alloy, Dynatrace, etc.) should work but are less tested.
- Download the latest JAR from Releases and drop it in your server's
mods/folder. - Start the server once to generate the config file at
config/tracebullet-server.toml. - Set
otel.urlto your collector's OTLP endpoint and restart.
The config file is generated at config/tracebullet-server.toml on first launch.
| Key | Default | Description |
|---|---|---|
otel.url |
"" |
OTLP endpoint URL (required to export anything) |
otel.auth |
"" |
Authorization header value — must start with Bearer or Basic |
otel.service_name_override |
"" |
Override service.name; defaults to the current world name |
otel.custom_attributes |
[] |
Extra resource attributes in key=value format |
| Key | Default | Description |
|---|---|---|
threading.schedule_thread_pool_size |
availableProcessors × 0.25 |
Background thread pool size (1–32) |
Each metric group can be individually enabled or disabled. All default to true.
| Key | Controls |
|---|---|
metrics.tps |
TPS and tick time |
metrics.player |
Player count and latency |
metrics.world_chunk |
Chunk counts per dimension |
metrics.entity |
Entity counts per dimension |
metrics.block_entity |
Block entity counts per dimension |
metrics.item_entity |
Item entity counts per dimension |
metrics.world_save |
World save duration histogram |
metrics.scheduled_tick |
Scheduled tick queue sizes |
metrics.chunk_generation |
Chunk generation counter |
metrics.jvm |
JVM memory, GC, threads |
./gradlew buildThe output JAR is placed in build/libs/.
MIT — see LICENSE.
