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.
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.
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.
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 :)
Die Grafiken (nicht live) schauen dann so aus (für unseren kaguBe-Survival):
An nifares, der mich auf die Idee gebracht hat, das über die Ports mit netstat zu machen.