Inhaltsverzeichnis

Minecraft Munin-Plugin

Ein Munin-Plugin das die Anzahl der Spieler und den RAM-Verbrauch eines Servers anhand des Ports ermittelt.

Wenn der Server am entsprechenden Port nicht läuft, dann wird beim RAM-Verbrauch 0 ausgegeben.

Es gibt zwar schon ein Munin-Plugin für die Anzahl der Benutzer auf einem Server, aber dieses verlangt, dass eine Datei mit den Namen aller Spieler von einem Bukkit-Plugin erstellt wird; dieses Plugin hier funktioniert allein aufgrund des verwendeten TCP-Ports und ohne Änderungen am Minecraft-Server.

Herunterladen

Den Code gibt es jetzt bei Github im Repo „munin-plugins“; es hat dort den Namen „minecraft_“; siehe unter https://github.com/Natenom/munin-plugins.

Coding-Tipps für Munin bzw. für die Shell gibt es hier: https://munin-monitoring.org/wiki/ShellPlugins.

Funktionsweise

Zuerst werden mit netstat alle TCP-Verbindungen zum TCP-Port des Minecraft-Servers gezählt.

Dann wird mit Hilfe von netstat und dem Port des Minecraft-Servers, auf dem auf Verbindungen gelauscht wird die PID des Minecraft-Servers ermittelt und davon dann mittels ps der verbrauchte RAM ermittelt.

Installation

Man kopiert die Datei z. B. nach /usr/local/bin und macht sie ausführbar:

chmod a+x /usr/local/bin/minecraft_

Da man für die Ausführung des netstat-Befehls root-Rechte benötigt, muss man die Munin-Node-Konfiguration unter „/etc/munin/plugin-conf.d/munin-node“ anpassen und folgenden Abschnitt einfügen:

[minecraft_*]
user root

Die root-Rechte sind notwendig, damit man Zugriff darauf hat, welches Programm zu welcher Verbindung gehört.
Würde man ohne Root-Rechte arbeiten, so würde das hier in der Konsole stehen:

(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)

Der Benutzer könnte dann nicht sehen, welcher Prozess hinter der Verbindung steht.

Alternativ kann man auch sudo verwenden; dies ist aber nicht so schön…
Man muss folgendes in die /etc/sudoers eintragen:

nobody ALL=(root) NOPASSWD:/bin/netstat -tlpn

Zusätzlich muss man diese Zeile ändern und sudo einfügen:

MC_PID=$(sudo netstat -tlpn | grep ${MC_PORT}  | sed -n -e '1p' | awk '{ print $7 }' | cut -d'/' -f1)

Dann wechselt man ins Verzeichnis /etc/munin/plugins und verlinkt das Script;
z. B. für einen Server der auf Port 5555 läuft:

cd /etc/munin/plugins
ln -s /usr/local/bin/minecraft_ minecraft_5555

Nach einem Restart von Munin sollte nun alles funktionieren :)

Ergebnis

Die Grafiken (nicht live) schauen dann so aus (für unseren kaguBe-Survival):

Danke

An nifares, der mich auf die Idee gebracht hat, das über die Ports mit netstat zu machen.