Skip to content

Metrics ​

Every family VaniaMetrics can publish, read from the sources of each repository. Names follow mc_<domain>_<subject>[_<unit>]: the domain says where a value comes from, base units are used (seconds, bytes), counters end in _total. A family a platform cannot provide is left out, never published as zero.

Core

Published by the core as soon as it runs, on every platform that can provide them.

mc_server_* — Game server

Ticks, players, connections, commands, blocks.

mc_server_blocks_totalcounteraction

Blocks broken and placed. action = break|place.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_chat_messages_totalcounter

Chat messages.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_commands_totalcountercommand

Commands run. The label is limited to a fixed list of commands, everything else is "other", to bound cardinality.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_connections_totalcounterresult

Joins and quits. result = join|quit.

on
mc_server_deaths_totalcountercause

Player deaths, by cause.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_items_crafted_totalcounter

Items crafted.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_mob_deaths_totalcounterentity_type

Mobs killed. Only kills BY A PLAYER count: a skeleton burning in the sun says nothing about server activity.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_player_ping_secondsgaugeplayeruuid

Ping of an online player.

on
mc_server_player_playtime_secondsgaugeplayeruuid

Total playtime of an online player.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_player_statisticgaugeplayeruuidstatistic

A vanilla statistic, per player. Published while the player is online, which is enough since nothing happens offline.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_player_statisticsgaugestatistic

Sum of a vanilla statistic over ONLINE players. Drops when they leave: a gauge, not a counter.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_players_by_brandgaugebrand

Players by advertised client brand. A mod can fake it: it describes honest players, not cheaters.

on
mc_server_players_by_localegaugelocale

Players by client locale.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_players_maxgauge

Player slots advertised by the server.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_players_onlinegauge

Online players.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_players_ping_secondshistogram

Ping distribution of online players.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_playtime_seconds_totalcounter

Cumulative playtime of all online players.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_session_secondshistogram

Session length, measured on quit.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_tick_average_secondsgauge

Average tick duration, as computed by the server.

on PaperPurpurSponge
mc_server_tick_duration_secondshistogram

Tick duration distribution. 0.05 s is the threshold: above it the server falls behind. This is THE alerting signal.

on PaperPurpur
mc_server_ticks_totalcounter

Ticks since startup.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_server_tpsgaugewindow

Ticks per second, capped at 20. window = 1m|5m|15m. Do NOT alert on it: it only moves once the server is already behind.

on PaperPurpurFoliaSpigotCraftBukkitSponge

mc_world_* — Worlds

Entities, chunks, tile entities, time and weather.

mc_world_chunks_loadedgaugeworld

Loaded chunks.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_world_entitiesgaugeworld

Loaded entities.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_world_entities_by_typegaugeworldentity_type

Entities by type. Collected in the background, and only types above the threshold are published, to keep cardinality bounded.

on PaperPurpurSpigotCraftBukkitSponge
mc_world_playersgaugeworld

Players in the world.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_world_tile_entitiesgaugeworld

Loaded tile entities: chests, furnaces, hoppers. Hoppers are the first cause of heavy ticks on a build server.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_world_time_ticksgaugeworld

World time, in ticks.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_world_weathergaugeworld

Weather. 0 = clear, 1 = rain, 2 = thunder.

on PaperPurpurFoliaSpigotCraftBukkitSponge

mc_proxy_* — Proxy

Players, backend servers, pings and switches.

mc_proxy_backend_max_playersgaugeserver

Player slots advertised by the backend in its ping response.

on VelocityBungeeCordWaterfallGeyser
mc_proxy_backend_ping_secondsgaugeserver

Backend ping response time, as seen from the proxy.

on VelocityBungeeCordWaterfallGeyser
mc_proxy_backend_playersgaugeserver

Players per backend server.

on VelocityBungeeCordWaterfallGeyser
mc_proxy_backend_upgaugeserver

1 if the backend answers the ping, 0 otherwise. The only outside view: a server that is down no longer publishes its own metrics.

on VelocityBungeeCordWaterfall
mc_proxy_connections_totalcounterresult

Connection attempts. result = pre_login|login|disconnect.

on
mc_proxy_kicks_from_server_totalcounterserver

Players kicked by a backend server.

on VelocityBungeeCordWaterfallGeyser
mc_proxy_pings_totalcounter

Server list pings: clients LOOKING at the server without joining. A measure of attention, not load.

on VelocityBungeeCordWaterfallGeyser
mc_proxy_player_ping_secondshistogram

Ping distribution between players and the proxy.

on Geyser
mc_proxy_players_by_brandgaugebrand

Players by advertised client brand.

on Geyser
mc_proxy_players_onlinegauge

Players connected to the proxy.

on VelocityBungeeCordWaterfallGeyser
mc_proxy_server_switches_totalcounterfromto

Moves from one server to another. from = "none" on first connection.

on VelocityBungeeCordWaterfallGeyser

mc_bedrock_* — Bedrock players

Published by the Geyser extension.

mc_bedrock_players_by_devicegaugedevice

Bedrock players by device (android, ios, windows, xbox, ps4, nx...).

on Geyser
mc_bedrock_players_by_inputgaugeinput

Bedrock players by input mode (keyboard_mouse, touch, controller, vr).

on Geyser
mc_bedrock_players_linkedgauge

Bedrock players whose account is linked to a Java account.

on Geyser

mc_jvm_* — JVM

Memory, garbage collection, threads.

mc_jvm_buffer_pool_bytesgaugepoolstate

Off-heap buffers. They count toward CONTAINER memory but not the heap, a classic cause of unexplained OOM kills.

on every platform
mc_jvm_classes_loadedgauge

Loaded classes.

on every platform
mc_jvm_gc_collections_totalcountergc

Collections run, per garbage collector.

on every platform
mc_jvm_gc_seconds_totalcountergc

Cumulative collection time. This is collection time, NOT stop-the-world time; for actual pauses use JFR or GC logs.

on every platform
mc_jvm_memory_bytesgaugeareastate

JVM memory. area = heap|nonheap, state = used|committed|max|init.

on every platform
mc_jvm_memory_pool_bytesgaugepoolstate

Memory per garbage collector pool (Eden, Survivor, Old, Metaspace).

on every platform
mc_jvm_threadsgaugestate

JVM threads. state = live|daemon|peak|started.

on every platform
mc_jvm_threads_deadlockedgauge

Deadlocked threads. Any non-zero value is an incident.

on every platform
mc_jvm_uptime_secondsgauge

Time since the JVM started.

on every platform

mc_host_* — Host

CPU, throttling, memory, disk and I/O of the container, read from cgroup v2.

mc_host_cpu_periods_totalcounter

Elapsed scheduling periods. The ratio with throttled_periods gives the share of throttled time.

on every platform
mc_host_cpu_quota_coresgauge

CPU quota, in cores. NaN when no limit is set, in which case throttling cannot happen.

on every platform
mc_host_cpu_system_seconds_totalcounter

CPU time in kernel space.

on every platform
mc_host_cpu_throttled_periods_totalcounter

Periods during which the kernel FROZE the container for lack of quota. A rising value explains low TPS that spark does not see.

on every platform
mc_host_cpu_throttled_seconds_totalcounter

Total time spent frozen by the kernel.

on every platform
mc_host_cpu_usage_seconds_totalcounter

CPU time used by the container.

on every platform
mc_host_cpu_user_seconds_totalcounter

CPU time in user space.

on every platform
mc_host_disk_filesgaugepath

Number of files under the path.

on every platform
mc_host_disk_free_bytesgaugepath

Free space on the mount point.

on every platform
mc_host_disk_total_bytesgaugepath

Size of the mount point.

on every platform
mc_host_disk_usage_bytesgaugepath

Size of the contents, computed by walking the tree. Measured in the background, never on scrape.

on every platform
mc_host_io_bytes_totalcounterdeviceoperation

Bytes read and written, per device.

on every platform
mc_host_io_operations_totalcounterdeviceoperation

Disk operations, per device.

on every platform
mc_host_memory_bytesgaugetype

Memory breakdown. type = anon|file|kernel|sock.

on every platform
mc_host_memory_limit_bytesgauge

Container memory limit.

on every platform
mc_host_memory_oom_events_totalcountertype

Out-of-memory events. type = oom (allocation refused) | oom_kill (process killed). The latter is always an incident.

on every platform
mc_host_memory_page_faults_totalcountertype

Page faults. type = minor|major.

on every platform
mc_host_memory_usage_bytesgauge

Memory used by the CONTAINER, JVM heap included.

on every platform

mc_exporter_* — Exporter

The health of the exporter and of every collector.

mc_exporter_background_task_age_secondsgaugecollector

Age of a background collector's last successful run. Tells "nothing changes" apart from "nothing is measuring".

on every platform
mc_exporter_collector_duration_secondshistogramcollector

Duration of one collection, per collector.

on every platform
mc_exporter_collector_infogaugecollectorsourcemode

Always 1, one per active collector. source is where its numbers come from: "core" for what the server exposes itself, otherwise the plugin name.

on every platform
mc_exporter_player_series_droppedgauge

Players whose detail is NOT published because of the collector.players.max_series cap. A non-zero value means per-player metrics are incomplete.

on PaperPurpurFoliaSpigotCraftBukkitSponge
mc_exporter_scrape_duration_secondshistogram

Time spent answering a scrape. If this grows, the exporter is the problem.

on every platform
mc_exporter_scrape_errors_totalcountercollector

Collections that threw. A failing collector does not stop the others.

on
mc_exporter_upgauge

1 once the exporter has finished starting.

on every platform

mc_build_* — Build

What is running.

mc_build_infogaugeversionplatformserver_versionserver

Always 1. The version is in the labels, the Prometheus idiom for publishing a string.

on every platform

Collectors

Published once the collector's jar is installed next to its target plugin.

BetonQuest

mc_quest_conversations_totalcounter

Conversations started with an NPC.

mc_quest_journal_entries_totalcounter

Journal entries written.

mc_quest_player_pointsgaugeplayeruuidcategory

Quest points for an online player, by category. For a skull hunt, category = skulls gives the number of skulls found.

mc_quest_player_tagsgaugeplayeruuid

Tags added to a player SINCE THEY CONNECTED. Not their lifetime total: the collector doesn't read the database, only what happened while it was watching.

mc_quest_tags_removed_totalcountertag

Tags removed. A progress reset shows up here.

mc_quest_tags_totalcountertag

Tags added since startup. For skull hunts, tag = found_<key>: this is THE metric for finds.

Chunky

mc_pregen_chunks_donegaugeworld

Chunks generated for the current task.

mc_pregen_chunks_totalgaugeworld

Chunks to generate for the current task.

mc_pregen_progress_ratiogaugeworld

Pregeneration progress, from 0 to 1. Absent when nothing is running.

mc_pregen_tasks_finished_totalcounterworld

Pregenerations completed.

EssentialsX (+ VaultUnlocked 2.20.3)

mc_economy_accountsgaugecurrency

Accounts with a balance.

mc_economy_balancegaugecurrencyquantile

Balance distribution. quantile = p50|p90|p99|max.

mc_economy_cache_age_secondsgaugecurrency

Age of EssentialsX's ranking cache. If it keeps rising, the displayed total is stale.

mc_economy_ginigaugecurrency

Wealth concentration, from 0 (equal) to 1 (one holder).

mc_economy_totalgaugecurrency

Money in circulation, across all accounts.

mc_server_players_afkgauge

Players connected but idle.

mc_server_players_afk_secondshistogram

How long they've been idle. Distinguishes "three players away for two minutes" from "three players away for six hours".

ExcellentEconomy

mc_economy_flow_totalcountercurrencydirection

Amounts moved, as absolute values. direction = in|out. The ratio of the two tells whether the economy is creating or destroying currency.

mc_economy_player_balancegaugeplayeruuidcurrency

Balance of an online player. Updated by event, so accurate to the second — no database reads.

mc_economy_transactions_totalcountercurrencytype

Account movements. type = deposit|withdraw.

GrimAC

mc_anticheat_flags_totalcountercheck

Violations flagged by GrimAC, per check. Its RATE is the signal: a few scattered flags are normal, a burst on the same check is not.

mc_anticheat_setbacks_totalcountercheck

Violations that caused a player SETBACK — GrimAC actually corrected it, not just logged it.

mc_anticheat_violation_levelhistogram

Accumulated violation level at the time of the flag. A rising level distinguishes an isolated incident from sustained behavior.

LuckPerms

mc_permission_group_weightgaugegroup

A group's weight, as LuckPerms uses it to resolve conflicts.

mc_permission_groupsgauge

Declared groups.

mc_permission_online_by_groupgaugegroup

Players ONLINE by primary group. For the offline total, see the sql module — the API can't count without loading everything.

mc_permission_tracksgauge

Declared promotion tracks.

mc_permission_usersgauge

Users known to LuckPerms. Scans the table: collected in the background.

Multiverse-Core

mc_multiverse_world_infogaugeworldaliasenvironmentdifficulty

Always 1. The world's characteristics are in the labels.

mc_multiverse_world_loadedgaugeworld

1 if the world is loaded, 0 if it is declared but absent from memory. A world thought to be loaded that isn't is a silent outage.

mc_multiverse_worldsgaugestate

Worlds declared in Multiverse. state = loaded|unloaded.

Multiverse-Inventories

mc_inventory_switches_totalcountercause

Inventory switches. cause = world|gamemode. Each one reads and writes a profile to disk: it's also a load indicator.

Multiverse-Portals

mc_portal_uses_totalcounterfrom_world

Portal traversals, by departure world.

MythicMobs

mc_mob_deaths_totalcountermob_typekiller

Custom mobs killed. "killer" distinguishes the player from everything else — a mob killed by the environment is not content being played.

mc_mob_despawns_totalcountermob_type

Custom mobs despawned WITHOUT being killed: chunk unload, entity limit, cleanup. A high ratio against spawns signals wasted work.

mc_mob_spawns_totalcountermob_type

Custom mobs spawned.

Nova

mc_nova_tile_entitiesgaugeworld

Nova machines placed, per world. These are what consume tick time — a rising number explains a rising MSPT.

PacketEvents

mc_network_packets_totalcounterdirectionpacket_type

Packets crossing the server. direction = in|out. packet_type is bounded by collector.packets.types; everything else falls into "other".

mc_network_players_by_protocolgaugeprotocolversion_name

Players by protocol version. PacketEvents is the only one that knows it: org.bukkit.entity.Player doesn't expose it.

PhoenixCrates Lite

mc_crate_deliveries_totalcountersource

Item DELIVERIES, not items delivered: eight keys given at once count as one. "source" is key_grant, crate_grant or reward_grant. Only PHYSICAL keys go through here — granting a virtual key fires no event and only shows up as a jump in mc_crate_player_keys.

mc_crate_keysgaugevirtual

Keys declared.

mc_crate_open_attempts_totalcountercrate

Opens REQUESTED, whether they completed or not. Checks the invariant attempts = opens + failures; a gap means the plugin opened a crate without going through the normal path.

mc_crate_open_cooldown_secondsgaugecrate

Delay imposed between two opens of the same crate.

mc_crate_open_costgaugecratecurrency

Price of an open. "currency" is the configured cost engine, which leaves the door open to multiple currencies, as with the economy module.

mc_crate_open_failures_totalcountercratereason

Opens refused. "reason" is INFERRED from the player's state at the time of the request, since the plugin only returns a translated message: cooldown, no_key, money, cancelled, other.

mc_crate_opens_totalcountercrate

Opens completed, across all players.

mc_crate_placements_totalcountercrateworld

Physical crates placed in the world.

mc_crate_player_cooldown_secondsgaugeplayeruuidcrate

Time REMAINING before a player can reopen a crate. Zero if they can open right away.

mc_crate_player_keysgaugeplayeruuidkey

VIRTUAL keys in stock for a connected player. Physical keys are in their inventory and are not counted here.

mc_crate_player_opensgaugeplayeruuidcrate

A player's opens EVER, by crate type. Persisted by the plugin: the only metric in this module that doesn't reset to zero on restart.

mc_crate_player_opens_totalcounterplayeruuidcrate

Opens completed, per player and per crate. Counts SINCE THE EXPORTER STARTED; for the all-time total, see mc_crate_player_opens, which the plugin persists.

mc_crate_player_reward_winsgaugeplayeruuidreward

How many times a player has won a given reward, ever. WITHOUT a "crate" label: the plugin indexes these wins by reward identifier ALONE, so two crates that both name a reward "diamond" share the counter. That's not a design choice, it's what the data allows.

mc_crate_previews_totalcountercrate

Previews opened without opening the crate: interest that doesn't convert.

mc_crate_reward_candidatesgaugecrate

Rewards actually in play at the last draw. Lower than crate_rewards_configured when win limits or permissions removed rewards: this is what explains why a player can no longer win a reward they already got.

mc_crate_reward_expected_ratiogaugecratereward

EXPECTED probability of a reward, between 0 and 1, normalized BY US (weight / sum of weights). Describes the draw's configuration, not the effective odds: guaranteed rewards, win limits and permissions are applied on top of it.

mc_crate_reward_required_keysgaugecratereward

Keys required to be eligible for a reward. This is the ONLY notion of rarity the plugin has: there is no getRarity() in its API.

mc_crate_reward_weightgaugecratereward

Raw weight of a reward in the draw. This is NOT a percentage.

mc_crate_reward_win_limitgaugecratereward

Maximum number of times a reward can be won. NEGATIVE means unlimited: -1 is what the plugin returns, observed on its sample crates, not 0 as one might assume.

mc_crate_rewards_configuredgaugecrate

Rewards declared on a crate. The Lite edition caps this at 5: this gauge says when that cap is hit.

mc_crate_rewards_totalcountercraterewardalternative

Rewards actually HANDED OUT. "alternative" distinguishes the consolation reward from the drawn one.

mc_crate_selective_confirms_totalcountercratereward

Choices confirmed in selective mode, where the player picks their reward.

mc_crate_typesgaugeenabled

Crate types declared.

PlaceholderAPI

mc_placeholder_valuegaugeplaceholder

Value of a placeholder, relayed as-is. Only what converts to a number is published — the rest is reported once then ignored.

spark

mc_spark_allocation_bytes_per_secondgaugewindowquantile

Memory allocation rate. It's not the memory that's OCCUPIED that causes stutters, it's the rate at which it's requested: every gigabyte allocated ends up collected, hence a micro-pause.

mc_spark_cpu_ratiogaugesourcewindow

CPU load, from 0 to 1. source = process|system.

mc_spark_gc_average_frequency_secondsgaugegc

Average time between two collections. Short = the heap fills up fast.

mc_spark_gc_average_secondsgaugegc

Average duration of a collection, per garbage collector.

mc_spark_player_ping_secondsgaugewindowquantile

Player ping aggregated by spark. quantile = min|mean|median|p95|max.

mc_spark_tick_duration_secondsgaugewindowquantile

Tick duration as seen by spark. quantile = min|mean|median|p95|max. Gauges frozen on spark's windows: for a real histogram, see mc_tick_duration_seconds.

mc_spark_tpsgaugewindow

TPS as seen by spark. window = 5s|10s|1m|5m|15m.

WorldGuard

mc_region_countgaugeworld

Declared protected regions, per world.

mc_region_pvp_denied_totalcounter

Player-vs-player attacks denied by a region. A FRICTION counter: if it climbs, players are fighting where they can't.

Minecraft 1.21.11 · core 0.6.0 · rebuilt after every CI run