Strukturierung unstrukturierter Daten mit GROK
Wenn Sie den Elastic-Stack (ELK) verwenden und daran interessiert sind, benutzerdefinierte Logstash-Protokolle mit Elasticsearch abzugleichen, dann ist dieser Beitrag für Sie.

Der ELK-Stack ist ein Akronym für drei Open-Source-Projekte: Elasticsearch, Logstash und Kibana. Zusammen bilden sie eine Plattform zur Protokollverwaltung.
- Elasticsearch ist ein Such- und Analysesystem.
- Logstash ist eine serverseitige Datenverarbeitungspipeline, die Daten gleichzeitig aus mehreren Quellen entgegennimmt, sie transformiert und dann in einen "Speicher" wie Elasticsearch sendet.
- Kibana ermöglicht es Benutzern, Daten in Elasticsearch durch Diagramme und Grafiken zu visualisieren.
Beats wurde später eingeführt und ist ein leichter Datenversender. Die Einführung von Beats verwandelte den Elk-Stack in den Elastic-Stack, aber das ist nicht das Hauptthema.
Dieser Artikel widmet sich Grok, einer Funktion in Logstash, die Ihre Protokolle transformieren kann, bevor sie in den Speicher gesendet werden. Für unsere Zwecke werde ich nur über die Datenverarbeitung von Logstash in Elasticsearch sprechen.

Grok ist ein Filter innerhalb von Logstash, der verwendet wird, um unstrukturierte Daten in etwas Strukturiertes und Abfragbares zu parsen. Er basiert auf regulären Ausdrücken (regex) und verwendet Textmuster zum Abgleich von Zeilen in Protokolldateien.
Wie wir in den folgenden Abschnitten sehen werden, ist die Verwendung von Grok von großer Bedeutung, wenn es um effektive Protokollverwaltung geht.
Ohne Grok sind Ihre Protokolldaten unstrukturiert.

Ohne Grok erscheinen Protokolle, die von Logstash an Elasticsearch gesendet und in Kibana visualisiert werden, nur im Nachrichtenwert.
Das Abrufen bedeutungsvoller Informationen in dieser Situation ist erschwert, da alle Protokolldaten in einem Schlüssel gespeichert werden. Es wäre besser, wenn die Protokollnachrichten besser strukturiert wären.
Unstrukturierte Daten aus Logs
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0Wenn Sie sich die Rohdaten genau ansehen, werden Sie feststellen, dass sie tatsächlich aus verschiedenen Teilen bestehen, die durch Leerzeichen getrennt sind.
Für erfahrenere Entwickler können Sie wahrscheinlich erraten, was jeder der Teile bedeutet und dass dies eine Protokollmeldung von einem API-Aufruf ist. Die Bedeutung jedes Punktes wird unten erläutert.
Die strukturierte Ansicht unserer Daten
- localhost == Umgebung
- GET == Methode
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == response_status
- 46ms == response_time
- 5bc6e716b5d6cb35fc9687c0 == user_id
Wie wir in den strukturierten Daten sehen, gibt es eine Reihenfolge für unstrukturierte Protokolle. Der nächste Schritt besteht in der programmgesteuerten Verarbeitung der Rohdaten. Hier kommt Grok zum Einsatz.
Grok-Vorlagen
Logstash wird mit über 100 integrierten Vorlagen geliefert, um unstrukturierte Daten zu strukturieren. Sie sollten auf jeden Fall von diesem Vorteil Gebrauch machen, wenn es um allgemeine Systemprotokolle wie Apache, Linux, HAProxy, AWS usw. geht.
Was passiert jedoch, wenn Sie benutzerdefinierte Protokolle haben, wie im obigen Beispiel? Sie müssen Ihre eigene Grok-Vorlage erstellen.
Benutzerdefinierte Grok-Vorlagen
Es ist notwendig, es auszuprobieren, um Ihre eigene Grok-Vorlage zu erstellen. Ich habe
Grok-Debugger und .
%{SYNTAX:SEMANTIC} Das Erste, was ich versucht habe, war, auf die Registerkarte
Entdecken im Grok-Debugger zu wechseln. Ich dachte, es wäre großartig, wenn dieses Tool automatisch eine Grok-Vorlage generieren könnte, aber das war nicht besonders hilfreich, da es nur zwei Übereinstimmungen gefunden hat. Mit dieser Entdeckung begann ich, meine eigene Vorlage im Grok-Debugger zu erstellen, indem ich die Syntax verwendete, die auf der GitHub-Seite von Elastic zu finden war.

Nachdem ich mit verschiedenen Syntaxen experimentiert hatte, gelang es mir schließlich, die Protokolldaten so zu strukturieren, wie ich es wollte.

Link zum Grok-Debugger

Ausgangstext:
Muster:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Das Ergebnis war schließlich{ "environment": [ [ "localhost" ] ], "method": [ [ "GET" ] ], "url": [ [ "/v2/applink/5c2f4bb3e9fda1234edc64d" ] ], "response_status": [ [ "400" ] ], "BASE10NUM": [ [ "400" ] ], "response_time": [ [ "46ms" ] ], "user_id": [ [ "5bc6e716b5d6cb35fc9687c0" ] ] }
Mit der Grok-Vorlage und den zugeordneten Daten in der Hand, der letzte Schritt ist, sie zu Logstash hinzuzufügen.Aktualisierung der Logstash.conf-Konfigurationsdatei
Auf dem Server, auf dem Sie den ELK-Stack installiert haben, navigieren Sie zu den Logstash-Konfigurationen:
sudo vi /etc/logstash/conf.d/logstash.conf
Fügen Sie die Änderungen ein.input { file { path => "/your_logs/*.log" } } filter{ grok { match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"} } } output { elasticsearch { hosts => [ "localhost:9200" ] } }
input {
file {
path => "/your_logs/*.log"
}
}
filter{
grok {
match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}Starten Sie Logstash nach dem Speichern der Änderungen neu und überprüfen Sie seinen Status, um sicherzustellen, dass es noch funktioniert.
sudo service logstash restart
sudo service logstash statusUm sicherzustellen, dass die Änderungen wirksam sind, aktualisieren Sie unbedingt den Elasticsearch-Index für Logstash in Kibana!

Mit Grok werden Ihre Log-Daten strukturiert!

Wie wir im obigen Bild sehen, ist Grok in der Lage, Logdaten automatisch mit Elasticsearch abzugleichen. Dies erleichtert die Verwaltung von Logs und die schnelle Abfrage von Informationen. Anstatt in Logdateien nach Debugging-Informationen zu suchen, können Sie einfach filtern, wonach Sie suchen, wie z. B. Umgebung oder URL.
Versuchen Sie, Grok-Expressions eine Chance zu geben! Wenn Sie eine andere Methode haben oder Probleme mit den obigen Beispielen auftreten, hinterlassen Sie einfach einen Kommentar unten, um mir Bescheid zu geben.
Vielen Dank fürs Lesen – und folgen Sie mir bitte hier auf Medium für weitere interessante Artikel zur Softwareentwicklung!
Ressourcen
P.S
Telegram-Kanal zu
Quelle: habr.com
