Einführung
Ein integraler Bestandteil der Softwareentwicklung ist der Empfang und die Analyse der vom Code erzeugten Informationen. Manchmal ist es ein einfaches Protokoll wie "Anwendung läuft" oder "Funktion gestartet". Wir können aber auch Informationen über kritische Fehler erhalten, die die Anwendung stoppen. Um solche Meldungen generieren, sammeln und analysieren zu können, müssen Sie Logging an die von Ihnen entwickelte Anwendung anhängen. Meistens werden Protokolle in einer Textdatei gespeichert, die leicht geparst werden kann. Diese Art von Lösung funktioniert am besten, wenn sich eine Anwendung in der Entwicklungsphase befindet. Die Anwendung hat keine Benutzer, daher ist die Anzahl der Protokolle nicht so groß und das Speichern aller Protokolle in einer Textdatei ermöglicht eine einfache Analyse.
Die Situation ist völlig anders, wenn unsere Anwendung Benutzer erreicht. Es können Tausende von ihnen sein (und das wünsche ich uns). Dann ist das Speichern von Protokollen in einer Textdatei nicht die beste Lösung. Unsere Protokolle enthalten wichtige Informationen wie die Anzahl der Benutzer pro Sekunde, die Anzahl der Fehler, die Funktionsbetriebszeit usw. Glücklicherweise kommt das ELK-Toolkit, d. h. Elasticseach, Logstash und Kibana, das eines der beliebtesten Log-Management-Systeme ist, zur Rettung. In diesem Artikel werde ich vorstellen, wofür ELK verwendet werden kann, welche Vorteile die Verwendung dieses Toolkits hat, woraus es besteht und wie Sie ELK in Ihrem Projekt implementieren können.
Was ist ELK?
ELK ist eine Reihe von Tools, mit denen Sie Protokolle speichern, analysieren und visualisieren können. Wenn wir ELK richtig mit unserer Anwendung verbinden, können wir Protokolle von Benutzern streamen, was uns die volle Kontrolle darüber gibt, was gerade in unserer Anwendung passiert, wie viele Benutzer sie gerade verwenden, wie lange sie auf die Ergebnisse warten, und im Falle einer zu langen Antwortzeit können wir die erforderlichen Rechenressourcen erhöhen.
Um besser zu verstehen, wie ELK funktioniert, lassen Sie uns herausfinden, was die Abkürzung ELK genau bedeutet:
- Elasticsearch - Es ist eine Open-Source-Such- und Analyse-Engine, die auf Apache Lucene basiert. Es ermöglicht Ihnen, schnell riesige Mengen an Textdaten zu speichern und zu analysieren.
- Logstash - Es ist eine kostenlose Open-Source-Software, die Daten aus verschiedenen Quellen sammelt, transformiert und sendet.
- Kibana - Es ist eine kostenlose Anwendung, die Datenvisualisierung und -exploration für Daten bietet. Kibana bietet Funktionen wie verschiedene Arten von Diagrammen, die es ermöglichen, Daten auf bequeme und leicht verständliche Weise darzustellen.
Dummy-Python-Projekt mit Flask
Zuerst schreiben wir ein einfaches Python-Projekt mit Flask, das zwei Funktionen hat. Die erste Funktion ist say_hello, die ein Argument "name" hat und eine Begrüßungsnachricht zurückgibt. Die zweite Funktion ist app_info, die einfach Informationen über den Anwendungsstatus zurückgibt.
Um die Anwendung auszuführen, können Sie diesen Befehl in Ihre Konsole schreiben.
Gehen wir zum Webbrowser, um zu überprüfen, ob die Anwendung korrekt läuft. Möchten Sie mehr wissen? Verbessern Sie Ihre Python-Codequalität - klicken Sie hier.



ELK mit Docker ausführen
Meiner Meinung nach ist der beste Ansatz, das ELK-System einzurichten, dies mit Docker zu tun. Sie können einfach fertige Docker-Images von Dockerhub (https://hub.docker.com) verwenden und sie mit der Docker-Compose-Datei ausführen. Zuerst müssen wir Konfigurationsdateien vorbereiten. Im folgenden Beispiel möchte ich die grundlegende ELK-Konfiguration zeigen, mit der wir Protokolle senden, speichern und visualisieren können. Natürlich gibt es noch viele weitere Einstellungen, die das ELK-System verbessern könnten. Weitere Informationen finden Sie in der offiziellen ELK-Dokumentation (https://www.elastic.co/guide/index.html).
In der Datei elasticsearch.yml legen wir den Clusternamen, den Netzwerkhost, den Discovery-Typ, den Typ der Xpack-Lizenz fest und deaktivieren beispielsweise die Xpack-Sicherheit.
Die Datei kibana.yml besteht aus Servername, Serverhost und Elasticsearch-Host.
In der Datei logstash.yml gibt es nur Informationen über den HTTP-Host.
Die Datei logstash.conf enthält Informationen darüber, wie Protokolle von Logstash empfangen (Input) und wohin Logstash sie senden wird (Output). In diesem Fall werden Protokolle über TCP mit Port 5000 an Logstash gesendet und Logstash sendet sie über den Host elasticsearch:9200 an Elasticsearch.
Wenn alle Konfigurationsdateien vorbereitet sind, ist es höchste Zeit, eine docker-compose.yml zu schreiben, die alle Komponenten des ELK-Systems ausführt. Wir müssen jedoch vorher ein paar Dinge besprechen:
- Kommunikation - Elasticsearch, Logstash und Kibana benötigen ein Netzwerk, um miteinander zu kommunizieren. Wir müssen ein Bridge-Netzwerk sicherstellen, das genau wie eine Brücke zwischen diesen Komponenten funktioniert.
- Images und ELK-Version - In diesem Beispiel verwenden wir die ELK-Version 7.14.4.
- Benötigte Ports:
- Elasticsearch verwendet Port 9200 für Anfragen und Port 9300 für die Kommunikation zwischen Knoten im Cluster.
- Logstash benötigt Port 5000 für die TCP-Kommunikation und Port 9600 für die Web-API-Kommunikation.
- Um über eine Webseite auf Kibana zuzugreifen, verwenden wir Port 5601.








Logging zur Python-App hinzufügen
Wenn das ELK-System korrekt funktioniert, müssen wir dem Skript app.py einige Protokolle hinzufügen. Denken Sie daran, dass wir diese Protokolle an Logstash senden möchten, daher ist AsynchronousLogstashHandler erforderlich. Sehen wir uns den folgenden Code-Snippet an, um herauszufinden, wie Sie das Logging richtig konfigurieren.
Wenn das Logging hinzugefügt wurde, führen Sie app.py aus und erzeugen Sie einige Protokolle, indem Sie die Webseiten 127.0.0.1:5001, 127.0.0.1:5001/hello/Natalia und 127.0.0.1:5001/hello/N besuchen.





Protokollstream in Elastic anzeigen
Gehen Sie zum Home-Menü und wählen Sie Observability -> Logs
Klicken Sie auf Settings
Fügen Sie im Abschnitt Indices log* im Feld Log indices hinzu.
Klicken Sie auf Apply und kehren Sie zum Panel Observability -> Logs zurück.
Und voilà! Protokolle von app.py wurden hinzugefügt. Von nun an wird jedes von app.py erzeugte Protokoll an das ELK-System gestreamt und im Stream-Bereich angezeigt.
Fazit
Logging ermöglicht es Ihnen, den Zustand einer Anwendung zu kontrollieren, was sehr wichtig ist, insbesondere wenn sie von Benutzern verwendet wird. Das ELK-Toolkit ermöglicht es Ihnen, Protokolle einfach zu sammeln und zu analysieren. Wie im Artikel bewiesen, ist die Konfiguration des ELK-Systems mit Docker nicht so schwierig. Ich hoffe, ich habe Sie ermutigt, das ELK-System in Ihren Anwendungen zu verwenden.
Weitere Informationen zu Big Data finden Sie in unserem Blog: