
Einfaches Health-Monitoring für Shopware mit Bordmitteln
Als wir für einen Kunden ein Health-Monitoring für dessen Shopware-Instanz aufsetzen sollten, standen wir vor der Herausforderung: Es musste einfach sein, keine komplexen externen Tools oder teure Third-Party-Dienste. Idealerweise mit den vorhandenen Möglichkeiten von Shopware selbst.
Das Problem: Keine einfache API-Lösung
Erste Recherchen in der Shopware-API zeigten schnell: Da gibt's nichts Brauchbares von Haus aus. Keine direkte API-Route, die einem einfach den Gesundheitsstatus des Systems ausgibt, ohne dass man sich selbst durch diverse Logs und Statusmeldungen graben muss. Besonders Probleme wie Rückstau in der Queue oder nicht ausgeführte geplante Aufgaben wollten wir sauber erfassen können.
Die Lösung: Standard-Plugin als Datenquelle
Unser Blick fiel auf das kleine grüne Icon der FroshTools, das sich oben auf der rechten Seite der Backend-Navigation findet. Ist etwas nicht in Ordnung, wird es gelb. Da müssen also Daten zu holen sein!
Auf der GitHub-Seite des Plugins haben wir nichts von einer API gelesen. Aber so einfach gibt man sich eben nicht geschlagen.
Also schnell die Dev-Tools ausgepackt und die XHR-Calls der Seite, auf die der Klick auf das Status-Icon führt, analysiert – und tada 🎉: ein JSON-Endpoint, der genau das liefert, was wir wollen.
/api/_action/frosh-tools/health/status
Umsetzung: JSON-Analyse und Monitoring-Integration
Die Antwort sieht beispielsweise so aus:
[
{
// ...
"state": "STATE_OK",
"id": "database-info"
},
{
// ...
"state": "STATE_OK",
"id": "scheduled_task"
}
]
Problematische Module sollen uns vom Monitoring gemeldet werden. Zum Glück kann unser Tool über JSONata
Daten verarbeiten. Damit lassen sich gezielt die relevanten Werte extrahieren und auf fehlende oder problematische Module prüfen. Gemäß dem Motto "Keep it simple, stupid" filtern wir die Liste nach dem state
-Wert und prüfen, ob alle relevanten Module (anhand des Attributs id
) in der Antwort enthalten sind. Das genügt, um eine Nachricht mit den jeweilig problematischen Modulen auszulösen.
Der Query sieht (vereinfacht) etwa so aus.
(
$expected := ["queue", "security-eol-shopware", "database-info", "scheduled_task"];
$filtered := $[state="STATE_OK" or state="STATE_INFO"].id;
$missing := $expected[$not($ in $filtered)];
$missing
)
Fazit
Mit minimalem Aufwand haben wir ein pragmatisches Monitoring für Shopware umgesetzt. Keine teuren Zusatztools, kein Overhead – einfach ein bestehendes Plugin genutzt, das ohnehin fast jeder Shopware-Shop installiert hat. Falls ihr also auf der Suche nach einer schlanken Lösung für's Shopware-Monitoring seid: schaut euch an, was euer Shop bereits dabei hat und nutzt es klug.