Verwendung von Elasticsearch, Logstash und Kibana zur Visualisierung von Protokollen in Python in Echtzeit

Was ist Protokollierung?

Angenommen, Sie entwickeln ein Softwareprodukt. Es arbeitet remote, interagiert mit verschiedenen Geräten, sammelt Daten von Sensoren und bietet dem Benutzer einen Service. Eines Tages geht etwas schief und das System funktioniert nicht wie erwartet. Möglicherweise werden die Geräte nicht identifiziert oder es werden keine Daten von den Sensoren empfangen, oder es wurde möglicherweise nur ein Laufzeitfehler aufgrund eines Fehlers im Code angezeigt. Wie können Sie sicher wissen?

Stellen Sie sich nun vor, der Systemcode enthält Prüfpunkte, an denen das System, wenn es ein unerwartetes Ergebnis zurückgibt, es einfach kennzeichnet und den Entwickler benachrichtigt. Dies ist das Konzept der Protokollierung.

Durch die Protokollierung können die Entwickler verstehen, was der Code tatsächlich tut und wie der Workflow abläuft. Ein großer Teil des Lebens von Softwareentwicklern besteht in der Überwachung, Fehlerbehebung und Fehlerbehebung. Die Protokollierung macht dies zu einem viel einfacheren und reibungsloseren Prozess.

Visualisierung von Protokollen

Wenn Sie ein erfahrener Entwickler sind, der schon seit einiger Zeit Software entwickelt und erstellt, denken Sie, dass die Protokollierung keine große Sache ist und der größte Teil unseres Codes in einer Debug.Log('____')Anweisung enthalten ist. Das ist großartig, aber es gibt noch einige andere Aspekte der Protokollierung, die wir nutzen können.

Die Visualisierung bestimmter protokollierter Daten bietet folgende Vorteile:

  • Überwachen Sie den Betrieb des Systems aus der Ferne.
  • Kommunizieren Sie Informationen klar und effizient über statistische Grafiken, Diagramme und Informationsgrafiken.
  • Extrahieren Sie Wissen aus den Daten, die in Form verschiedener Diagramme visualisiert werden.
  • Ergreifen Sie die erforderlichen Maßnahmen, um das System zu verbessern.

Es gibt verschiedene Möglichkeiten, Rohdaten zu visualisieren. In den Programmiersprachen Python und R gibt es eine Reihe von Bibliotheken, die beim Zeichnen von Diagrammen hilfreich sein können. Mehr dazu erfahren Sie hier . In diesem Beitrag werde ich jedoch nicht auf die oben genannten Methoden eingehen. Haben Sie jemals von dem ELK-Stack gehört ?

ELK-Stapel

E - Elasticsearch , L - Logstash , K - Kibana

Lassen Sie mich eine kurze Einführung geben. Der ELK-Stack ist eine Sammlung von drei Open-Source-Softwareprogrammen, mit deren Hilfe Echtzeitinformationen zu Daten bereitgestellt werden können, die entweder strukturiert oder unstrukturiert sein können. Mit seinen Werkzeugen kann man Daten extrem einfach und effizient suchen und analysieren.

Elasticsearch ist eine verteilte, RESTful-Such- und Analyse-Engine, mit der eine wachsende Anzahl von Anwendungsfällen gelöst werden kann. Als Herzstück des Elastic Stack speichert es Ihre Daten zentral, damit Sie das Erwartete entdecken und das Unerwartete aufdecken können. Mit Elasticsearch können Sie viele Arten von Suchvorgängen durchführen und kombinieren - strukturiert, unstrukturiert, geografisch, metrisch usw. Es basiert auf der Programmiersprache Java, mit der Elasticsearch auf verschiedenen Plattformen ausgeführt werden kann. Es ermöglicht Benutzern, sehr große Datenmengen mit sehr hoher Geschwindigkeit zu untersuchen.

Logstash ist eine Open-Source-Pipeline für die serverseitige Datenverarbeitung, die Daten aus einer Vielzahl von Quellen gleichzeitig aufnimmt, transformiert und dann an Ihren bevorzugten „Stash“ (wie Elasticsearch) sendet. Daten werden häufig in vielen Formaten auf viele Systeme verteilt oder isoliert. Logstash unterstützt eine Vielzahl von Eingaben, die Ereignisse aus einer Vielzahl gemeinsamer Quellen gleichzeitig abrufen. Einfache Erfassung aus Ihren Protokollen, Metriken, Webanwendungen, Datenspeichern und verschiedenen AWS-Diensten - alles kontinuierlich und kontinuierlich. Logstash verfügt über ein steckbares Framework mit über 200 Plugins. Mischen, passen und orchestrieren Sie verschiedene Eingaben, Filter und Ausgaben, um in Pipeline-Harmonie zu arbeiten.

Kibana ist eine Open Source-Analyse- und Visualisierungsplattform, die für die Zusammenarbeit mit Elasticsearch entwickelt wurde. Mit Kibana können Sie in Elasticsearch-Indizes gespeicherte Daten suchen, anzeigen und damit interagieren. Sie können problemlos erweiterte Datenanalysen durchführen und Ihre Daten in einer Vielzahl von Diagrammen, Tabellen und Karten visualisieren. Kibana macht es einfach, große Datenmengen zu verstehen. Über die einfache, browserbasierte Oberfläche können Sie schnell dynamische Dashboards erstellen und freigeben, in denen Änderungen an Elasticsearch-Abfragen in Echtzeit angezeigt werden.

Um ein besseres Bild des Workflows der Interaktion der drei Softwareprogramme zu erhalten, sehen Sie sich das folgende Diagramm an:

Implementierung

Anmelden bei Python

Hier habe ich die Implementierung der Protokollierung in Python erläutert, da dies die am häufigsten verwendete Sprache für Projekte ist, bei denen die Kommunikation zwischen mehreren Computern und dem Internet der Dinge eine Rolle spielt. Es wird Ihnen helfen, eine allgemeine Vorstellung davon zu bekommen, wie es funktioniert.

Python bietet ein Protokollierungssystem als Teil seiner Standardbibliothek, sodass Sie Ihrer Anwendung schnell eine Protokollierung hinzufügen können.

import logging

In Python kann die Protokollierung auf 5 verschiedenen Ebenen durchgeführt werden, die jeweils den Ereignistyp angeben. Es gibt wie folgt:

  • Info - Bezeichnet Informationsnachrichten, die den Fortschritt der Anwendung auf grobkörniger Ebene hervorheben.
  • Debuggen - Bezeichnet detaillierte Informationsereignisse, die zum Debuggen einer Anwendung am nützlichsten sind.
  • Warnung - Bezeichnet potenziell schädliche Situationen.
  • Fehler - Bezeichnet Fehlerereignisse, bei denen die Anwendung möglicherweise weiterhin ausgeführt werden kann.
  • Kritisch - Bezeichnet sehr schwerwiegende Fehlerereignisse, die vermutlich zum Abbruch der Anwendung führen.

Daher verwenden wir je nach dem Problem, das protokolliert werden muss, die definierte Ebene entsprechend.

Hinweis : Info und Debug werden standardmäßig nicht protokolliert, da nur Protokolle der Stufe Warnung und höher protokolliert werden.

Um nun ein Beispiel zu geben und eine Reihe von Protokollanweisungen zur Visualisierung zu erstellen, habe ich ein Python-Skript erstellt, das Anweisungen eines bestimmten Formats und eine Nachricht protokolliert.

import logging import random logging.basicConfig(filename="logFile.txt", filemode="a", format="%(asctime)s %(levelname)s-%(message)s", datefmt="%Y-%m-%d %H:%M:%S") for i in xrange(0,15): x=random.randint(0,2) if(x==0): logging.warning('Log Message') elif(x==1): logging.critical('Log Message') else: logging.error('Log Message')

Hier werden die Protokollanweisungen an eine Datei mit dem Namen logFile.txt im angegebenen Format angehängt . Ich habe das Skript drei Tage lang in verschiedenen Zeitintervallen ausgeführt und eine Datei mit zufälligen Protokollen wie folgt erstellt:

2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message

Setting up Elasticsearch, Logstash and Kibana

At first let’s download the three open source softwares from their respective links [elasticsearch],[logstash]and[kibana]. Unzip the files and put all three in the project folder.

Let’s get started.

Step 1 — Set up Kibana and Elasticsearch on the local system. We run Kibana by the following command in the bin folder of Kibana.

bin\kibana

Similarly, Elasticsearch is setup like this:

bin\elasticsearch

Now, in the two separate terminals we can see both of the modules running. In order to check that the services are running open localhost:5621 and localhost:9600.

After both the services are successfully running we use Logstash and Python programs to parse the raw log data and pipeline it to Elasticsearch from which Kibana queries data.

Step 2— Now let’s get on with Logstash. Before starting Logstash, a Logstash configuration file is created in which the details of input file, output location, and filter methods are specified.

input{ file{ path => "full/path/to/log_file/location/logFile.txt" start_position => "beginning" } } filter { grok{ match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level}-%{GREEDYDATA:message}"} } date { match => ["timestamp", "ISO8601"] } } output{ elasticsearch{ hosts => ["localhost:9200"] index => "index_name"} stdout{codec => rubydebug} }

This configuration file plays a major role in the ELK stack. Take a look at filter{grok{…}} line. This is a Grok filter plugin. Grok is a great way to parse unstructured log data into something structured and queryable. This tool is perfect for syslog logs, apache and other webserver logs, mysql logs, and in general, any log format that is generally written for humans and not computer consumption. This grok pattern mentioned in the code tells Logstash how to parse each line entry in our log file.

Now save the file in Logstash folder and start the Logstash service.

bin\logstash –f logstash-simple.conf
Um mehr über die Konfiguration von Logstash zu erfahren, klicken Sie auf [ hier ].

Schritt 3 - Danach stehen die analysierten Daten aus den Protokolldateien in der Kibana-Verwaltung unter localhost: 5621 zum Erstellen verschiedener Grafiken und Dashboards zur Verfügung. Um zu überprüfen, ob Kibana Daten empfängt, führen Sie auf der Registerkarte Verwaltung von Kibana den folgenden Befehl aus:

localhost:9200/_cat/indices?v

Dadurch werden alle Indizes angezeigt. Für jede Visualisierung muss ein neues Indexmuster aus den Entwicklungswerkzeugen ausgewählt werden. Anschließend werden verschiedene Visualisierungstechniken verwendet, um ein Dashboard zu erstellen.

Dashboard mit Kibana

Nachdem Sie alles eingerichtet haben, ist es jetzt Zeit, Diagramme zu erstellen, um die Protokolldaten zu visualisieren.

After opening the Kibana management homepage, we will be asked to create a new index pattern. Enter index_name* in the Index pattern field and select @timestamp in the Time Filter field name dropdown menu.

Now to create graphs, we go to the Visualize tab.

Select a new visualisation, choose a type of graph and index name, and depending on your axis requirements, create a graph. We can create a histogram with y-axis as the count and x-axis with the log-level keyword or the timestamp.

After creating a few graphs, we can add all the required visualisations and create a Dashboard, like below:

Hinweis - Immer wenn die Protokolle in der Protokolldatei aktualisiert oder an die vorherigen Protokolle angehängt werden, werden die Daten in Elasticsearch ausgeführt und die Diagramme in Kibana werden automatisch entsprechend den neuen Daten aktualisiert, solange die drei Dienste ausgeführt werden.

Einpacken

Die Protokollierung kann bei der Bekämpfung von Fehlern und beim Debuggen von Programmen hilfreich sein, anstatt eine print-Anweisung zu verwenden. Das Protokollierungsmodul unterteilt die Nachrichten nach verschiedenen Ebenen. Dies führt zu einem besseren Verständnis des Codes und des Ablaufs des Aufrufs, ohne das Programm zu unterbrechen.

Die Visualisierung von Daten ist ein notwendiger Schritt in Situationen, in denen jeden Moment eine große Datenmenge generiert wird. Tools und Techniken zur Datenvisualisierung bieten Führungskräften und anderen Wissensarbeitern neue Ansätze, um ihre Fähigkeit, in ihren Daten versteckte Informationen zu erfassen, erheblich zu verbessern. Die schnelle Identifizierung von Fehlerprotokollen, das einfache Verständnis von Daten und hochgradig anpassbare Datenvisualisierungen sind einige der Vorteile. Dies ist eine der konstruktivsten Methoden zur Organisation von Rohdaten.

Weitere Informationen finden Sie in der offiziellen ELK-Dokumentation unter //www.elastic.co/learn und bei der Anmeldung in Python - //docs.python.org/2/library/logging.html