A Rust-based tool that periodically probes Minecraft servers, logging detailed data for performance monitoring, analytics, and visualization.
Find a file
2025-07-24 20:58:53 +02:00
data_visualisation Add gantt visualisation template 2025-07-22 17:54:55 +02:00
src Add dockerisation. Update docs 2025-07-24 20:58:53 +02:00
.env.example Add dockerisation. Update docs 2025-07-24 20:58:53 +02:00
.gitignore Add dockerisation. Update docs 2025-07-24 20:58:53 +02:00
Cargo.lock initial code 2025-07-10 20:25:46 +02:00
Cargo.toml initial code 2025-07-10 20:25:46 +02:00
docker-compose.yml Add dockerisation. Update docs 2025-07-24 20:58:53 +02:00
Dockerfile Add dockerisation. Update docs 2025-07-24 20:58:53 +02:00
LICENSE Initial commit 2025-07-10 01:34:22 +02:00
README.md Add dockerisation. Update docs 2025-07-24 20:58:53 +02:00

MCWatcher

Probes a Minecraft server at regular intervals to collect comprehensive data for later analysis and visualization.

Quickstart

  1. Set the MC_ADDR environment variable in a .env file at the root of the project as follows:

Tip

Copy-paste the .env.example file into a .env file and modify the content of the latter.

MC_ADDR=mc.hypixel.net
  1. Compile and run the program with:
cargo run

Allow the program to probe the server. Once sufficient data has been collected, stop the program and interpret the results in the generated data.csv file.

Docker Compose

  1. Populate the .env file just as described in the Quickstart heading

  2. Launch the program

docker compose up -d
  1. All done. A ./data/ directory will be made with the data.csv inside. To interactively inspect the logs of the container, do:
docker compose logs -f

Data format

The data.csv file is appended every 30 seconds and structured as follows:

MC Address Timestamp Probed Latency Version Max Players Online Players Sample Players

The Sample Players column is formatted by separating the player's name and UUID with an @ symbol, and individual players with a ! symbol, like so:

<player_name>@<player_uuid>!<player_name>@<player_uuid>!

Example:

Technoblade@b876ec32-e396-476b-a115-8438d83c67d4!popbob@0f75a81d-70e5-43c5-b892-f33c524284f2!Notch@069a79f4-44e9-4726-a5be-fca90e38aaf5

TODO / Ideas

  • Support for probing multiple servers.
  • API endpoint for dynamically adding servers.
  • Simple frontend for managing servers, downloading data, and generating graphs.
  • Use Parquet or an SQL database for data storage.
  • Configurable probe interval via .env file.