HomeJavaModsAdminWatch
AdminWatch
ModsJava

AdminWatch

Performance. Diagnostics. Moderation. All in One.

⬇ Download on Spigot
[​IMG]

Text Version:

Spoiler: TEXT VERSION
AdminWatch, the most advanced free admin suite for Minecraft servers

Free forever. One jar. Paper 1.21 through 26.1.x, Folia ready, Java 21 or newer.
Works alongside DupeWatch.


WHAT IT IS

Every monitoring plugin tells you what broke. AdminWatch tells you why.

A profiler hands you a flamegraph and wishes you luck. AdminWatch watches every signal your
Minecraft server produces, works out which ones moved together, names the cause in plain
language, and tells you what to do about it. Then it remembers what you changed, so the next
time something degrades you already know what you touched.

It is a complete server administration suite: performance monitoring, an incident engine,
health scoring, diagnostics, plugin health, crash forensics, staff tools, analytics, alerts,
network monitoring and a live in game dashboard. Thirteen modules, one jar, no cost.


THE INCIDENT ENGINE

TPS drops. Four different numbers move at once. Most tools raise four alerts and leave you to
work out they were the same event. AdminWatch opens one incident, ranks every plausible cause
against the evidence, and shows you its reasoning.

/aw incidents INC1754321.3

State ongoing
Severity major
Started 14:32:06
Duration 4m 12s

Assessed cause
Cause Garbage collection is stalling the server
Confidence Likely

Evidence
+ JVM paused for 340 ms of every second collecting garbage
+ Heap is 96% full, so collections cannot free much
x Entity count is normal

Timeline
14:32:06 TPS moved to 12.40 (normally 19.98)
14:32:11 Entity count rose to 18,400 (normally 4,100)
14:32:14 Cause assessed. Garbage collection is stalling the server

What to try
* Raise the heap ceiling if the host has memory to spare
* Switch to G1GC or ZGC with tuned pause targets
* Look for a plugin retaining objects

Detection is relative, never threshold based. "Alert below 18 TPS" is the obvious design and it
is wrong: a busy network living at 18.5 TPS would alert forever, while a small survival server
dropping to 18.6 would say nothing, and for that server it is serious. Every server is measured
against its own baseline using median and absolute deviation, so one bad afternoon does not
blind it to the next one.

Confidence is four words rather than a percentage. A number like 89% claims a calibration that
does not exist, and the first time it is wrong every other figure loses its authority. The
evidence is always shown so you can judge it yourself.


IT REMEMBERS WHAT YOU CHANGED

Almost every slowdown on a Minecraft server is caused by somebody changing something. Nothing
else free keeps a record. AdminWatch logs every plugin update, config edit, server version and
startup flag change, then correlates incidents against that history automatically.

Instead of "your server got slower this week" you get "this began eight minutes after
ShopPlugin was updated to 2.2.0". Roll it back and see whether the problem follows.


FLIGHT RECORDER AND CRASH POST MORTEM

When a server dies you get latest.log and nothing else. spark cannot help, because spark died
with it. AdminWatch keeps the last two minutes of vital signs in a memory mapped file that
outlives the process, and writes a post mortem on the next startup showing exactly how the
server was behaving as it went down.

A separate watchdog runs on its own thread, so when the server freezes it can still dump every
thread stack and name the exact method that wedged. Two failure modes, two mechanisms, because
a crash and a freeze leave completely different evidence.

The recorder costs about four megabytes of disk writes a day and the file never grows.


HEALTH SCORES

Nobody reads MSPT distributions. They read "94 out of 100, and the thing costing you six points
is garbage collection", and then they go and look at garbage collection.

Every score breaks down into the factors that produced it and the values those factors read.
Performance, memory, worlds and AdminWatch itself each score separately, and a fresh server
reports "collecting" rather than pretending to know.


DIAGNOSTICS AND SECURITY AUDIT

One command runs every check and reports findings with a fix written next to each one:

/aw diagnose

Tick performance, memory and garbage collection, world entity and chunk load, plugin behaviour,
server settings, and a security posture audit that most server owners have never had run
against them: offline mode with no proxy forwarding configured, RCON open with a weak or
default password, query exposing your plugin list, operator accounts that have not logged in
for ninety days.


WHICH PLUGIN IS DOING THIS

When a tick runs long, AdminWatch samples the server thread from a worker thread. If the server
is sitting inside a database driver or a socket read, that is a plugin blocking your tick, and
the frame underneath names it. Exceptions are attributed the same way.

A healthy server is never sampled at all, so this costs nothing when nothing is wrong.

No bytecode rewriting and no Java agent. Hosting panels block agents, they collide with
obfuscators, and a monitoring plugin that rewrites other people's code eventually gets blamed
for breaking one.


NETWORK VIEW FOR BUNGEECORD AND VELOCITY

On a proxy network the question is never "how is this server". It is "which of my twelve
servers is the problem".

Every server publishes its condition over Redis and listens for the others, so any node can
show you all of them. No central collector, and nothing to install on the proxy itself.

In game, every server is a grass block in one panel. Identical on purpose, so your eye is not
decoding shapes and colour is free to carry health. Sorted worst first, so on a bad night the
server that needs you is in the top left corner. Hover any block for TPS, MSPT, heap, players,
entities, health score and active incidents. A server that goes quiet turns red rather than
sitting there showing its last healthy numbers.


PERFORMANCE

A monitoring plugin that becomes the thing worth monitoring is worse than no monitoring plugin.

AdminWatch budgets itself 0.35 ms of every 50 ms tick and measures whether it is keeping to it.
On the reference server it uses 0.03 ms, about a twelfth of its own allowance, and it shows you
that number in game. If it ever exceeds the budget it reduces its own sampling detail
automatically and reports that it did.

It will also name itself as the cause of an incident. A tool that cannot accuse itself has no
business accusing anything else.

Sampling is adaptive: quiet while the server is healthy, full detail during an incident, and
back down on recovery, with a hard ceiling so it can never feed on its own load.


STORAGE AND RETENTION

SQLite with nothing to set up, or MySQL, MariaDB and PostgreSQL. Switching is a config change
and nothing else. Schema migrations are versioned and applied automatically.

Retention is tiered because flat retention is the wrong shape. Nobody needs per second detail
from three weeks ago and everybody wants month old trends:

Ten second resolution kept 24 hours
One minute resolution kept 7 days
Five minute resolution kept 30 days
Incidents and changes kept indefinitely

Per chunk and per player metrics keep only the worst offenders each window, which is what stops
thirty days of history turning into a database nobody can back up.


COMMANDS

/aw dashboard Live in game panel that repaints while open
/aw status What AdminWatch is doing and exactly what it costs
/aw health Server health score and what is driving it
/aw incidents Detected problems, assessed causes and fixes
/aw diagnose Every check in one pass, with recommendations
/aw trends Recurring patterns, growth trends, capacity forecast
/aw changes Plugin, config and server changes over time
/aw plugins Per plugin exceptions and main thread blocking
/aw blackbox Flight recorder and last crash post mortem
/aw network Condition of every server on the network
/aw alerts What was raised and what was held back
/aw integrations Optional plugins and what each one adds
/aw modules Module states and self checks
/aw reload Validate the config file and show pending changes
/aw sc Staff chat, message or toggle
/aw freeze Hold a player in place while you talk to them
/aw vanish Hide yourself from non staff players
/aw note Read or write staff notes about a player
/aw inspect Everything known about a player
/aw audit Recent staff actions

Add the word file to any command to save the output as a report, for example /aw diagnose file.
Every command also works fully from the console, which matters, because at half a tick per
second you cannot open an inventory and that is exactly when you need this most.

Permissions:
adminwatch.use Read only views, staff chat, notes, inspection
adminwatch.admin Freeze, vanish, audit log, config checks, player addresses

Player addresses are shown only to full administrators. Most moderation never needs one, so the
default is not to reveal it.


WORKS WITH DUPEWATCH

AdminWatch and DupeWatch come from the same author and run on the same test server on every
single release. Same storage backends, same platform layer, same command conventions. Install
both and neither fights the other for the tick, the database or your console.

With DupeWatch present, AdminWatch lists it as a connected integration and duplication cases
sit beside performance incidents on the same timeline. You get one place to ask what happened
at 14:32, whether the answer is a lag spike or somebody duplicating netherite.

AdminWatch watches the server. DupeWatch watches the players. Together they cover both.


OTHER INTEGRATIONS

spark, CoreProtect, LuckPerms, PlaceholderAPI, DiscordSRV, ViaVersion, Geyser and PacketEvents.

Every one of them is optional and none is ever required. Without spark you get sampling based
attribution; with it you get full profiling data in incident evidence. Without CoreProtect an
incident names a location; with it, it names who placed what and when. Run /aw integrations to
see what is connected and what each missing one would add.


DEVELOPER API

var api = AdminWatchProvider.get().orElse(null);

if (api != null) {
api.recordMetric("myplugin.queue_depth", queue.size());
api.watchMetric("myplugin.queue_depth", "Queue depth", true, 3.5, 50);
}

Register a metric and AdminWatch treats it exactly like its own. Deviations open incidents with
a timeline, raise alerts under the same suppression policy, and get correlated against
everything else happening at the time.

The API package is never obfuscated and follows semantic versioning. AdminWatch is a soft
dependency for everyone, so the provider returns an empty optional when it is absent rather
than throwing.


ALERTS THAT STAY WORTH READING

A forty minute incident that produced four hundred messages has taught your staff to ignore the
channel, and every alert after that is wasted no matter how good the detection behind it was.

AdminWatch applies a minimum severity, a cooldown per problem, an hourly ceiling across all
alerts, and quiet hours during which only critical alerts get through. Everything held back is
counted and shown, so you can always find out what you were not told.


QUESTIONS

Is it really free?
Yes, and it stays free. No paid tier, no locked modules, no trial. Being free is not an excuse
for lower quality.

Does it replace spark?
No. spark is excellent at profiling and ships with Paper. AdminWatch reads spark when present
and adds the layer above it: correlation, causes, history and what to do next.

Will it slow my server down?
It uses 0.03 ms of a 50 ms tick on the reference server and shows you that figure in game. If
it ever exceeds its own budget it reduces its detail automatically and reports that it did.

Do I need a database?
No. SQLite works out of the box with nothing to configure. If the database cannot be opened at
all, live monitoring still runs and only history is lost.

Does it work with DupeWatch?
It is the pairing AdminWatch is tested against on every release. Both come from the same
author, share the same storage backends and platform layer, and are designed to run side by
side.

Do I need Redis?
Only for the network view. It is off by default and a single server gains nothing from it.
Everything else works identically without it.

Does a broken module break the plugin?
No. Every module is isolated. One that fails to start is reported in /aw modules and everything
else carries on.


INSTALL

Drop the jar in your plugins folder, restart, and type /aw. There is nothing to configure and
nothing to pay. SQLite and every JDBC driver are fetched automatically on first start.

AdminWatch by GraveMC. Free forever.

AdminWatch is a free Minecraft Java mod. Compatible with Minecraft 1.21, 26.1, 26.2. Downloaded 6 times (via Spigot). Download it and open it directly in the game.

Explore more