Skip to content

Configuration ​

The core writes metrics.properties into its folder on first start (plugins/VaniaMetrics/ on the Bukkit family), and never touches it again: the file is yours.

Environment variables ​

Every key can be set by an environment variable instead: upper-case the key, turn dots into underscores, prefix it with VANIA_METRICS_. The variable wins over the file.

KeyEnvironment variable
http.portVANIA_METRICS_HTTP_PORT
collector.world.intervalVANIA_METRICS_COLLECTOR_WORLD_INTERVAL

That is what a Helm chart or a compose file needs to configure everything without shipping a file — the same way Plan and LuckPerms do.

Scrape endpoint ​

KeyDefault
http.bind0.0.0.0Prometheus usually scrapes from another host or pod: restrict access with a firewall or a NetworkPolicy, not with the bind address.
http.port9940
http.path/metrics
http.tokenemptyWhen set, a bearer token is required. On a closed network, one more secret to rotate adds nothing.

Core collectors ​

All enabled by default. collector.<name> = false disables one; collector.<name>.interval sets how often a background collector refreshes, in seconds.

KeyDefault
collector.jvmtrueMemory and memory pools, garbage collection, threads, classes, buffers.
collector.cgrouptrueCPU, throttling, memory, OOM events and I/O of the container, from cgroup v2.
collector.disktrueFree, used and total space, and file counts, per path.
collector.disk.interval300
collector.disk.paths/data,/backups,/server
collector.ticktrueTPS, tick durations, tick count, player slots.
collector.worldtruePer world: entities (and per type), chunks, tile entities, players, time, weather.
collector.world.interval10Not lower: the per-type breakdown is the one O(n) part.
collector.world.entity_type_threshold5Entity types below this count are not published; -1 publishes none per type.
collector.playerstrueOnline players, ping, locales, client brands, playtime and statistics.
collector.eventstrueConnections and sessions, deaths, mob deaths, commands, chat, blocks, crafted items.
collector.proxytrueOn a proxy: players, backends (up, players, ping), connections, kicks, switches.
collector.proxy.ping_timeout5Seconds before a backend counts as down.

Per-player detail ​

A player label creates one series per player. "Never do it" is right at a thousand players and wrong for a server of a few dozen: fifty slots make a few hundred series, next to the ~300 the server already publishes. Two guarantees keep it bounded:

  • only online players are published — nothing is lost, since what a player does happens while online, and Prometheus keeps the history after they leave;
  • a hard cap — beyond it, detail stops and mc_exporter_player_series_dropped says so.
KeyDefault
collector.players.per_playertrue
collector.players.max_series200

Still off-limits: per-player labels on high-frequency metrics, such as packets or broken blocks. VaniaMetrics publishes states, not flows.

Collectors ​

Each collector is its own jar: removing it from the plugins folder is the real switch, since nothing loads, runs or fails. What remains configurable goes through the same keys as the core's, under the name the collector registers — collector.luckperms.interval for LuckPerms, collector.packets.types for PacketEvents. Every collector's page lists its keys.

Minecraft 1.21.11 · core 0.6.0 · rebuilt after every CI run