Der Unterschied zwischen mittelmäßigen Produkten und großartigen Produkten ist die Protokollierung. Erfahren Sie, warum das so ist und wie Sie das Ganze miteinander verbinden können.
Genau wie die Sicherheit ist die Protokollierung eine weitere Schlüsselkomponente von Webanwendungen (oder Anwendungen im Allgemeinen), die aufgrund alter Gewohnheiten und der Unfähigkeit, vorauszuschauen, vernachlässigt wird. Was viele als nutzloses digitales Band betrachten, ist ein mächtiges Werkzeug, um in Ihre Anwendungen hineinzuschauen, Fehler zu korrigieren, Schwachstellen zu verbessern und Kunden zu begeistern.
Bevor wir uns mit der zentralisierten Protokollierung befassen, sollten wir uns zunächst ansehen, warum die Protokollierung so wichtig ist.
Zwei Arten (Ebenen) der Protokollierung
Computer sind deterministische Systeme, außer wenn sie es nicht sind.
Als professioneller Entwickler habe ich schon viele Fälle erlebt, in denen das beobachtete Verhalten der Anwendung alle Beteiligten tagelang vor ein Rätsel gestellt hat, aber der Schlüssel lag immer in den Protokollen. Jede Software, die wir ausführen, erzeugt (oder sollte zumindest) Protokolle, die uns sagen, was sie durchgemacht hat, als die problematische Situation auftrat.
Meiner Meinung nach gibt es zwei Arten von Protokollen: automatisch erstellte Protokolle und vom Programmierer erstellte Protokolle. Bitte beachten Sie, dass es sich hierbei nicht um eine Unterscheidung aus dem Lehrbuch handelt, und wenn Sie mich zu dieser Terminologie zitieren, werden Sie Ärger bekommen. 😉
Das Bild oben zeigt, was man als automatisch generiertes Protokoll bezeichnen kann.
In diesem speziellen Fall handelt es sich um ein WordPress-System, das bei der Ausführung eines PHP-Codes einen unerwarteten Zustand (einen Hinweis) protokolliert. Logs wie diese werden ständig und unermüdlich erstellt – von Datenbank-Tools wie MySQL, Webservern wie Apache, Programmiersprachen und -umgebungen, mobilen Geräten und sogar Betriebssystemen.
Sie enthalten selten viel Wert und Programmierer machen sich nicht einmal die Mühe, sie zu lesen, außer wenn etwas schief läuft. In solchen Momenten wühlen sie tief in den Protokollen und versuchen zu verstehen, was schief gelaufen ist.
Automatisch erstellte Protokolle können jedoch nur bedingt hilfreich sein. Wenn z.B. mehrere Personen über einen Admin-Zugang zu einer Website verfügen und einer von ihnen zufällig eine wichtige Information löscht, ist es unmöglich, den Übeltäter mit Hilfe von automatisch generierten Protokollen zu ermitteln. Aus der Sicht der Systeme, die als Anwendung miteinander verbunden sind, war es ein ganz normaler Arbeitsvorgang – jemand hatte die erforderliche Berechtigung, eine Aufgabe auszuführen, und das System führte sie aus.
Was hier benötigt wird, ist eine zusätzliche Ebene expliziter, umfassender Protokollierung, die Spuren für die menschliche Seite der Dinge schafft. Diese so genannten programmierergenerierten Protokolle bilden das Rückgrat sensibler Branchen wie dem Bankwesen. Hier sehen Sie ein Beispiel dafür, wie ein solches Protokollierungsschema aussehen könnte:
Protokollierung ist Macht
Wenn Sie diese beiden Arten von Protokollen in einem System haben, können Sie sich diese zunutze machen und die Wirkung verstärken.
Dem Kunden immer einen Schritt voraus sein
der Begriff “Kundenzufriedenheit” hat sich als nutzlose Marketingmasche etabliert, aber dank der Protokollierung kann er sehr real werden. Ich kenne digitale Produkte, die ihre Protokolle wie ein Falke überwachen, und sobald ein Kunde etwas auf der Seite kaputt macht, können sie den Kunden anrufen und ihm Hilfe anbieten.
Stellen Sie sich das einmal vor – innerhalb von Sekunden nach einem hässlichen Fehler erhalten Sie einen Anruf von dem Unternehmen, in dem es heißt: “Hey, ich habe gehört, dass Sie versucht haben, diesen Artikel in den Warenkorb zu legen, aber er ist immer wieder abgestürzt. Ist es in Ordnung, wenn ich den Artikel dieses Mal hinzufüge und die Bestellung für Sie abschließe?”
Ein begeisterter Kunde? Darauf können Sie wetten!
Team-Moral und Produktivität
Wie ich schon sagte, wenn Fehler lange Zeit unentdeckt bleiben, sind die Entwickler in Ihrem Team frustriert und verlieren immer mehr Zeit mit der Suche nach ihnen. Und das ist das Problem bei der Fehlersuche – sie erfordert von Anfang an einen frischen, neugierigen Geist. Wenn Ihnen auch nur ein WTF-Gedanke in den Sinn kommt, ist der ganze Prozess zum Scheitern verurteilt.
Und was macht die Fehlersuche so schwierig? Meiner Erfahrung nach ist es die fehlende Protokollierung bzw. das fehlende Wissen über die Protokollierung. Zunächst einmal ist Ihnen vielleicht nicht klar, dass Ihre Lieblingsdatenbank auch nur ein weiteres Stück Software ist, das Protokolle erzeugt, oder Sie protokollieren nicht ausgiebig in Ihrer Anwendung (siehe oben, vom Programmierer erzeugte Protokolle ).
Ich erinnere mich besonders an einen Fall, in dem die Anwendung nicht mehr reagierte und niemand wusste, warum. Einige Tage später stellte sich heraus, dass das Limit für die Festplatten-E/A aufgrund von übermäßigem Datenverkehr erreicht worden war. Da sich niemand die Mühe machte, dort nachzusehen, konnte auch niemand herausfinden, warum.
Prüfpfade
Was, wenn Ihr Kunde zwei Jahre später sagt, dass all diese Bestellungen nicht von ihm, sondern von einem Hacker aufgegeben wurden?
Welche Argumente hätten Sie, um dem Antrag stattzugeben oder ihn abzulehnen? Wenn Sie über eine umfassende Protokollierung verfügen (IP-Adresse, Datum und Uhrzeit, Kreditkarte usw.), dann können Sie all das analysieren und eine Entscheidung treffen. Ob gut oder schlecht, sie wird zumindest eine objektive Grundlage haben und nicht einem Schuss ins Blaue ähneln.
Das Gleiche gilt, wenn Sie im Rahmen eines neuen, wichtigen Projekts unter die Lupe genommen werden oder sich einer Prüfung durch Dritte unterziehen müssen. Wenn Sie kein robustes Protokollierungssystem haben, werden Sie in einem schlechten Licht dastehen.
Verbesserung der bestehenden Systeme
Wie gehen Sie vor, um das aktuelle System zu verbessern?
Sollten Sie einfach mehr RAM und CPU-Threads zur Verfügung stellen? Was ist, wenn Ihre Anwendung trotz ausreichender Ressourcen langsam ist? Wo liegt der Engpass? In den meisten Fällen ist die Protokollierung die Antwort.
Alle großen Datenbanksysteme verfügen beispielsweise über eine Funktion zur Protokollierung langsamer Abfragen.
Wenn Sie das Protokoll der langsamen Abfragen regelmäßig einsehen, erfahren Sie, welche Vorgänge die meiste Zeit in Anspruch nehmen, und können so kleine, aber wichtige Bereiche aufdecken, an denen gearbeitet werden muss. Oft ist eine kleine Änderung wie diese besser als eine Verdoppelung der Hardwarekapazität.
Es gibt unzählige Möglichkeiten, wie ein gutes Protokollierungssystem Ihnen hilft. Das beste Argument ist vielleicht, dass es sich um eine automatisierte Aktivität handelt, die, wenn sie einmal eingerichtet ist, keiner Überwachung bedarf und Sie eines Tages vor dem Ruin bewahren wird.
Lassen Sie uns nun einen Blick auf einige der erstaunlichen Open Source Log Collectors (vereinheitlichte Protokollierungstools) werfen, die es gibt. Nur für den Fall, dass Sie sich wundern, wir haben kommerzielle Cloud-basierte Protokollierungstools in einem früheren Beitrag behandelt.
Graylog
Graylog ist einer der führenden Namen in der Branche, wenn es um industrietaugliche Protokollierungs- und Visualisierungsfunktionen geht. Einzigartig ist auch, dass es Ihre gesammelten Protokolle auf Anzeichen von Sicherheitsschwachstellen untersucht und Sie sofort benachrichtigt.
Obwohl Graylog ein zentralisiertes Protokollierungssystem ist, bietet es die Flexibilität, die Sie benötigen, und ermöglicht Ihnen die Anpassung von Warnungen, Dashboards und mehr.
Graylog ist Open-Source, aber es gibt einen Enterprise-Plan, wenn Ihre Anforderungen komplex sind.
Mit Kunden wie SAP, Cisco und LinkedIn auf der Liste ist Graylog ein Tool, dem Sie mit geschlossenen Augen vertrauen können.
Logstash
Wenn Sie ein Fan oder Benutzer des Elastic-Stacks sind, sollten Sie sich Logstash einmal ansehen (der ELK-Stack ist bereits eine Sache, falls Sie das noch nicht wussten). Wie andere Protokollierungstools auf dieser Liste ist Logstash vollständig quelloffen und lässt Ihnen die Freiheit, es nach Belieben einzusetzen und zu verwenden.
Aber lassen Sie sich nicht in die Irre führen: Logstash ist ein Mutterschiff mit Fähigkeiten, die jedes bescheidene Logging-Tool bei weitem übertreffen. Es ist in der Lage, riesige Datenmengen von verschiedenen Plattformen zu sammeln, ermöglicht Ihnen die Definition und Ausführung Ihrer eigenen Datenpipelines, macht unstrukturierte Log-Dumps sinnvoll nutzbar und vieles mehr.
Die einzige Einschränkung ist natürlich, dass es nur mit der Elastic-Produktsuite funktioniert, aber wenn Sie anfangen und bald skalieren wollen, ist Logstash genau das Richtige für Sie!
Fluentd
Unter den zentralisierten Logging-Tools, die als Zwischenschicht für die Datenaufnahme dienen, ist Flutend ein Spitzenreiter unter Gleichen. Mit einer ausgezeichneten Bibliothek von Plugins ist Fluentd in der Lage, Daten aus praktisch jedem Produktionssystem zu erfassen, sie in die gewünschte Struktur zu bringen, eine benutzerdefinierte Pipeline zu erstellen und sie an Ihre bevorzugte Analyseplattform weiterzuleiten, sei es MongoDB oder Elasticsearch.
Fluentd basiert auf Ruby, ist vollständig Open Source und erfreut sich aufgrund seiner Flexibilität und Modularität großer Beliebtheit.
Da große Unternehmen wie Microsoft, Atlassian und Twilio die Plattform nutzen, muss Fluentd nichts mehr beweisen 🙂
Flume
Wenn Sie mit sehr, sehr großen Datensätzen zu tun haben und alles in etwas wie Hadoop einspeisen möchten, ist Flume eine der besten Optionen. Es ist ein “reines” Open-Source-Projekt in dem Sinne, dass es von unserer geliebten Apache Foundation verwaltet wird, was bedeutet, dass es keinen Unternehmensplan gibt.
Vielleicht ist es genau das, wonach Sie suchen 🙂
Flume ist in Java geschrieben (was mich immer wieder erstaunt, wenn es um bahnbrechende Technologie geht) und der Quellcode ist völlig offen. Flume ist am besten für Sie geeignet, wenn Sie eine verteilte, fehlertolerante Plattform zur Datenaufnahme für anspruchsvolle Aufgaben suchen.
Octopussy
Ich gebe Octopussy null von zehn Punkten für die Produktbezeichnung, aber Octopussy kann eine gute Wahl sein, wenn Ihre Anforderungen einfach sind und Sie sich fragen, was es mit dem ganzen Trara um Pipelines, Ingestion, Aggregation usw. auf sich hat.
Meiner Meinung nach deckt Octopussy den Bedarf der meisten Produkte auf dem Markt ab (geschätzte Statistiken sind nutzlos, aber wenn ich raten müsste, würde ich sagen, dass es 80% der Anwendungsfälle in der realen Welt abdeckt).
Octopussy verfügt zwar nicht über eine großartige Benutzeroberfläche, macht dies aber in Bezug auf die Geschwindigkeit und das Fehlen von Überflüssigem wieder wett. Der Quellcode ist, wie erwartet, auf GitHub verfügbar und ich denke, es ist einen ernsthaften Blick wert.
Rsyslog
Rsyslog steht für ein raketenschnelles System für die Protokollverarbeitung.
Es ist ein Dienstprogramm für Unix-ähnliche Betriebssysteme. Technisch gesehen handelt es sich um einen Nachrichten-Router mit dynamisch ladbaren Ein- und Ausgängen, der in hohem Maße konfigurierbar ist.
Es kann Eingaben aus mehreren Datenquellen entgegennehmen, sie umwandeln und die Ausgabe an verschiedene Ziele senden. Mit Rsyslog können Sie 1 Million Nachrichten pro Sekunde über lokale Ziele versenden.
Rsyslog bietet auch einen Windows-Agenten, der sehr eng mit dem Rsyslog-Linux-Agenten zusammenarbeitet. Er wird für die Integration zwischen den beiden Umgebungen verwendet. Dieser Windows-Agent wird verwendet, um die Ereignisprotokolle von Windows weiterzuleiten und den Dateiüberwachungsdienst einzurichten.
Im Folgenden finden Sie weitere von Rsyslog angebotene Funktionen:
- Flexible Konfigurationen
- Bietet Multithreading-Fähigkeiten
- Schutz der Protokolldateien vor Manipulation durch Protokollsignaturen und Verschlüsselung.
- Unterstützt Big Data-Plattformen
- Bietet inhaltsbasierte Filterfunktionen
Grafana Loki
Grafana Loki wurde von Prometheus inspiriert und ist eine mandantenfähige Log-Aggregationslösung.
Loki ist eine kostengünstige Lösung, die nur Metadaten indiziert und in ein gängiges System wie Kubernetes, Prometheus, Linux, SQL usw. eingebunden werden kann. Schauen Sie sich diese Anleitung an, um Loki zu installieren und selbst zu sehen, wie es funktioniert.
Logwatch
Ich bin mir sicher, dass es unter uns einige gibt, die nicht die ganze Zeremonie wollen, die mit einem “einheitlichen”, “zentralisierten” Protokollierungssystem verbunden ist. Sie arbeiten mit einzelnen Servern und suchen nach einer schnellen und effizienten Lösung zur Überwachung ihrer Protokolldateien. Nun, begrüßen Sie Logwatch.
Nach der Installation kann LogWatch Ihre Systemprotokolle durchsuchen und einen Bericht der von Ihnen gewünschten Art erstellen. Es handelt sich allerdings um eine etwas veraltete Software (lesen Sie “zuverlässig”), die in Perl geschrieben wurde. Sie benötigen also Perl 5.6 auf Ihrem Server, um es auszuführen. Ich kann Ihnen keine Screenshots zur Verfügung stellen, da es sich um einen reinen Befehlszeilenprozess handelt, der von einem Dämon ausgeführt wird.
Wenn Sie ein CLI-Junkie sind und eine Vorliebe für die altmodische Art haben, Dinge zu tun, werden Sie Logwatch lieben!
Syslog-ng
Das Tool Syslog-ng wurde entwickelt, um Syslog-Datendateien (ein etabliertes Client-Server-Protokoll für die Systemprotokollierung) in Echtzeit zu verarbeiten. Mit der Zeit hat es jedoch auch andere Datenformate unterstützt: unstrukturierte, SQL- und NoSQL-Daten. Die Funktionsweise des Syslog-Protokolls ist in der folgenden Abbildung ziemlich genau zusammengefasst.
syslog-ng ist ein produktionstaugliches, zuverlässiges Tool zur Sammlung und Klassifizierung von Protokollen, das in C geschrieben wurde und in der Branche seit langem einen festen Platz hat. Das Beste daran ist seine Erweiterbarkeit, die es Ihnen ermöglicht, Plugins in C, Python, Java, Lua oder Perl zu schreiben.
Lnav, kurz für (Log Navigator), ist ein reines Terminal-Tool, das auf einem einzigen Rechner und in einem einzigen Verzeichnis arbeitet. Es ist für diejenigen gedacht, die ihre Protokollierung in einem einzigen Verzeichnis vereinheitlicht haben oder Echtzeit-Protokolle aus einer einzigen Quelle filtern und anzeigen möchten.
Wenn Sie dachten, lnav sei nichts weiter als ein glorifiziertes tailf
|grep
, dann liegen Sie falsch. Es gibt mehrere Funktionen, in die Sie sich verlieben werden: Zeitreihenansicht, Pretty-Printing (für JSON und andere Formate), farblich gekennzeichnete Protokollquellen, leistungsstarke Filter, die Fähigkeit, verschiedene Protokollierungsprotokolle zu verstehen, und vieles mehr.
Es ist nur so, dass Sie manchmal eine mühelose, einrichtungsfreie, vielleicht vorübergehende Protokollierungsschicht benötigen, und lnav ist dafür perfekt geeignet!
Fazit
Und da haben Sie es!
Um ehrlich zu sein, war es nicht leicht, diese Liste zusammenzustellen, denn die Protokollierung ist nicht so populär wie z.B. die Verwaltung von Inhalten, und es scheint, dass drei oder vier Tools die gesamte Aufmerksamkeit auf sich gezogen haben. Dennoch sind die Bedürfnisse jedes Einzelnen anders, und ich habe versucht, sie umfassend zu berücksichtigen.
Von albernen Kommandozeilen-Tools, die keine Einrichtung erfordern, bis hin zu ausgewachsenen Datenmolochs ist alles dabei!
Als Nächstes lernen Sie einige der besten Profiling-Software zur Optimierung der Anwendung kennen.