Features

BOOM ... Health Checks!

Website Monitoring Magazin

koality.io ist unheimlich stark, wenn es darum geht eine Webseite von außen anzusehen und dann zu sagen, ob sie funktioniert - aus Nutzersicht, aus Sicht einer Suchmaschine oder eines Bots. Wir versuchen 360° abzudecken und alles Wichtige in die Überwachung zu nehmen.

Trotzdem hat jedes Projekt im Web auch seine individuellen Probleme, die man nicht mit Standard-Checks überprüfen kann. Wir bei koality.io saßen jetzt eine Weile zusammen und haben uns überlegt, wie man diese benutzerdefinierten Überprüfungen so umsetzen kann, dass wir die Idee hinter unserem Produkt, ein einfach zu bedienender Service zu sein, nicht verwässern. Die große Frage ist also, wie kann man in Standard denken und trotzdem individuelle Checks ermöglichen. Und wie man sich schon denken kann, ist die Antwort "Health Checks".

Was sind Health Checks?

Eigentlich ganz einfach. Für uns sind Health Checks Informationen darüber, ob eine Applikation samt Infrastruktur funktioniert. Am besten ergänzend zu den Daten, die wir von Außen messen und damit ein Gesamtbild ergeben. Dies wird dann zusammengefasst in eine Antwort, die koality.io lesen kann. Klingt erstmal sehr einfach. Ist es auch.

Aber was könnten solche Health Checks beinhalten? Wir haben mal ein paar Ideen zusammengestellt:

  • Serverüberwachung: Wie voll ist die Festplatte? Wie ist die CPU-Auslastung in den letzten fünf Minuten gewesen? Swapt mein Server?

  • Infrastruktur: Läuft die MySQL? Wird jede Stunde ein Datenbank-Backup erstellt? Ist Redis noch zu erreichen? Kann ich alle Webservice vom Server aus erreichen?

  • Applikation: Liefen meine CronJobs? Ist das Cache-Verzeichnis schreibbar? Wie viele Einträge hatte das Error-Log in den letzten 60 Minuten?

Natürlich gibt es schon Tools, die genau dies überwachen, aber häufig ist es einfacher den einen kleinen gewünschten Check schnell selbst zu bauen und ihn dann an das Standard-Monitoring anzuschließen, als ein Prometheus zu warten oder Icinga den Projektverantwortlichen beizubringen. Und machen wir uns nichts vor: die meisten Projekte - besonders in Agenturen - können nicht noch mehr Komplexität vertragen.

Wie kann ich eigene Checks bauen?

Das ist das Tolle an diesen Ansatz. Es ist sehr einfach für jeden Entwickler, in jeder Sprache solche Checks zu implementieren. Das einzige, was man machen muss, ist es, ein JSON-Dokument als Antwort auf einen HTTP-Request zu liefern. Und das ist das genau das, was wir Entwickler den ganzen Tag so machen.

Uns war es wichtig einen offenen Standard für die Health Checks zu nehmen und den dann im besten Fall nur an ein zwei Stellen zu erweitern. Das ist uns auch geglückt. Die IETF (Internet Engineering Task Force) hat einen RFC auf die Reise gebracht, der sich genau mit dem Thema beschäftigt. Im Prinzip wird dabei ein recht einfaches JSON-Format definiert, dass die Gesundheit einer Applikation oder Servers widerspiegelt.

{
    "status": "pass",
    "output": "Storage server is up and running.",
    "checks": {
        "leankoala.device.space.used": {
            "status": "pass",
            "output": "Enough space left on device. 66% used (\/).",
            "observedValue": 0.66,
            "observedUnit": "percent",
            "metricType": "time_series_percent",
            "observedValuePrecision": 2,
            "limit": 0.9,
            "limitType": "max"
        },
        "leankoala.apps.chrome": {
            "status": "pass",
            "output": "Number of processes \"chromium\" was within limits. Current number is 35.",
            "description": "Number of chrome browsers running.",
            "observedValue": 35,
            "observedUnit": "process",
            "metricType": "time_series_numeric",
            "observedValuePrecision": 0,
            "limit": 50,
            "limitType": "max"
        }
    }
}

So sieht ein einfaches Beispiel aus, das überprüft, wie viele Chrome-Prozesse im Hintergrund laufen und ob die Platte nicht zu voll ist. Man merkt an dem Beispiel, dass wir dieses neue Feature auch sehr stark im Einsatz haben, denn das sind genau die zwei Parameter, die uns bei einem Worker interessieren.

Bei uns ist es PHP, das diese Datei erstellt. Im Grunde genommen ist es egal, wer das macht - Hauptsache man folgt dem Standard. In koality.io muss man jetzt nur noch die URL, über die dieses Dokument ausgeliefert wird, eintragen und schon ist man fertig. Sobald einer der Checks einen Fehler zurückliefert wird ein Alarm über E_mail, Slack oder Teams versendet. Ganz einfach.

Falls man das Feld metric_type noch ergänzt und dort time_series_numeric hinterlegt, bekommt man im koality.io-Backend noch eine wundervolle Ansicht über die historischen Werte.

Ich glaube, es war noch nie so einfach, seine eigenen Metriken über ein Monitoring-Tool zu implementieren und zu überwachen.

Plugin aktivieren

Das Plugin für die Health Check Unterstützung kann einfach im Marketplace im koality.io-Backend aktiviert werden. Danach läuft es sofort. Derzeit ist es Beta, aber voll funktionsfähig.

Health Foundation

koality.io wäre nicht koality.io, wenn wir nicht probieren würden diesen Standard auch noch mal zu standardisieren. Aus diesem Grund haben wir schon mal eine PHP-Basis-Bibliothek mit dem Namen HealthFoundation erstellt, die jeder nutzen kann. Da ist schon relativ viel von dem enthalten, was man so braucht. Aber es ist auch aus dem Grund Open Source, weil wir uns erhoffen, dass ihr eure Standard-Checks mit einbaut.

Das erste dutzend Checks ist bereits implementiert und wird auch ständig von uns weiterentwickelt, sobald wir einen Need haben. Wenn ihr einen habt, dann gerne einen Pull Request stellen.

Wird es für mein Framework auch vorgefertigte Health Checks geben?

Die Antwort ist JA. Wir glauben, dass diese Art der Überwachung so einfach ist, dass erfahrene Entwickler nicht mehr als einen Tag brauchen werden, es für ihr CMS oder Shopsystem zu adaptieren. Danach sollte man es doch gerne jedem zur Verfügung stellen. Wenn es ein gutes Plugin geworden ist, dann würden wir im Nachklapp auch ein echtes koality.io Plugin draus machen und in unseren Marketplace stellen. Das ist aber nicht unbedingt notwendig, da allen bereits das Health Check Plugin zur Verfügung steht. Wie immer gilt natürlich, dass wir gerne unterstützen, wenn man was Schönes vor hat. Einfach über Twitter kontaktieren.

Welche Systeme werden bereits unterstützt?

Durch unsere HealthFoundation ist schon mal jedes PHP-Projekt in der Lage einen einfachen Health-Check zu erstellen, aber wir sind natürlich fleißig und haben die ersten echten Plugins fertig bzw. in Arbeit. Diese Liste wird ständig aktualisiert.

Welche Systeme wurden schon nachgefragt?

Natürlich bekommen wir auch täglich die Anfrage, wann wir denn ein Plugin für Framework XY anbieten. Die häufigsten wollen wir hier einmal auflisten. Vielleicht hat der eine oder die andere Lust hier mit uns aktiv zu werden.

  • Symfony 5
  • Joomla!
  • Typo3
  • WooCommerce
  • WordPress

Sicherheit

Wenn man seine eigenen Health Checks baut, muss man natürlich sicher gehen, dass man auch die nötigen Sicherheitsmaßnahmen unternimmt. Das Minimum sind HTTPS-übertragung der Daten und ein Endpunkt, der über einen möglichst komplexen Hash abgesichert ist. Natürlich nur, wenn es sich lohn die Daten zu schützen.

Wenn dir dieser Artikel gefällt, dann melde dich am besten zu unserem Newsletter an. Danach wirst du keinen unserer Artikel zum Thema Monitoring und Agenturen.

Ja, ich will euren Newsletter abonnieren