PHP-CLI Scripte überwachen mit Websockets

Websocket Logger

Jeder der schon einmal PHP-Scripte mit sehr langer Laufzeit verwendet hat, weiss dass es nicht ganz einfach ist solche Scripte zu überwachen. Natürlich kann man in der Prozessliste des Servers schauen ob die Scripte noch laufen, es ist jedoch schwierig zu bestimmen was ein Script gerade tut.

Eine Möglichkeit dies herauszufinden ist das Logging in eine Datei oder Datenbank. Das kann sinnvoll sein wenn man später nachvollziehen möchte was ein Script zu welchem Zeitpunkt getan hat. Wenn man jedoch überwachen möchte was ein Script gerade im Moment tut ist diese Variante relativ unpraktisch. Man müsste dazu die Log-Datei bzw. die Ausgabe aus der Datenbank permanent neu laden.

Wunderbar geeignet für ein „Live-Monitoring“ von Scripten mit langer Laufzeit ist ein „Websocket-Konsole“. Hierzu binde ich einen Websocket-Client in meine Scripte ein und halte ständig die Verbindung zu einem Websocket-Server. Die Scripte senden nun in regelmäßigen Abständen eine Statusmeldung an den Websocket-Server. Wichtige Ereignisse oder Fehlermeldungen werden ebenfalls an den Websocket-Server gesendet.
Wenn ich nun den Status der Scripte einsehen möchte rufe ich einfach im Browser die entsprechende Applikation des Websocket-Servers auf und die Statusmeldungen werden live angezeigt. Wenn kein Browser mit dem Server verbunden ist verpuffen die Meldungen im digitalen Nirvana. Natürlich wäre auch ein zusätzliches Logging dieser Meldungen denkbar.

Einige „Stolpersteine“ sollte man jedoch bei der Umsetzung eines solchen „Websocket-Loggings“ beachten:

  1. Sollte der Websocket-Server abstürzen oder aus einem anderen Grund nicht erreichbar sein, so sollte diese keine weiteren Auswirkungen auf die überwachten Scripte haben. Sprich: Sollte eine Nachricht nicht an den Server gesendet werden können, so sollte Script nicht mit einem Fatal-Errror etc. abbrechen.
  2. Sollte die Verbindung zum Websocket-Server unterbrochen werden so sollte in regelmäßigen Abständen versucht werden diese wieder aufzubauen. Passiert dies nicht so müssten die Scripte nach jedem Verbindungsabbruch neue gestartet werden.

Zum Schluss noch eine Idee die ich bisher selbst noch nicht getestet habe: Mit den neuen Audio-Features von HTML5 könnte man bei bestimmen Ereignissen in den Scripts sogar akustische Signale im Browser auslösen. So könnte man z.b. auf schwerwiegende Fehler hinweisen die ein sofortiges Eingreifen erfordern.

Für alle die Interesse haben selbst an einer solchen Websocket-Console zu basteln, habe ich hier die wichtigsten Dateien meiner Applikation hinterlegt: https://gist.github.com/2950185

One thought on “PHP-CLI Scripte überwachen mit Websockets

  1. Hermann

    Hallo, vielen Dank für den Beitrag, der war sehr nützlich als Ideengeber. Ich habe das jetzt mit Python/Autobahn implementiert, jedoch lasse ich das Programm noch in screen laufen, sodass ich auch per Putty noch Zugriff habe. Ich gebe jedem Prozess seinen eigenen Port, dann muss man auch keine Angst vor einem Single-Point-Of-Failure haben (der Websocket-Server). Die Ports werden in MySQL aufbewahrt.

    Ob jemand dazu authentifiziert ist, prüfe ich mit einer kleinen Message im Format auth|$username|$password… erst wenn das einmal korrekt gesendet worden ist, kann man die neuen Nachrichten empfangen.

    Ich wollte das alles zuerst in PHP machen, aber mittlerweile mag ich Python immer mehr (ich brauchte einen Thread in PHP, die es jedoch nicht gibt).

Leave a Reply

Your email address will not be published. Required fields are marked *

π