Strukturierung unstrukturierter Daten mit GROK
Wenn Sie den Elastic Stack (ELK) verwenden und an der Zuordnung benutzerdefinierter Logstash-Protokolle zu Elasticsearch interessiert sind, dann ist dieser Beitrag genau das Richtige für Sie.

Der ELK Stack steht für drei Open-Source-Projekte: Elasticsearch, Logstash und Kibana. Zusammen bilden sie eine Plattform für das Log-Management.
- Elasticsearch – ist ein Such- und Analysesystem.
- Logstash – ist eine serverseitige Datenverarbeitungspipeline, die Daten gleichzeitig aus mehreren Quellen entgegennimmt, sie verarbeitet und dann in einen 'Wassertank' wie Elasticsearch sendet.
- Kibana ermöglicht Benutzern, Daten mit Diagrammen und Grafiken in Elasticsearch zu visualisieren.
Beats wurde später eingeführt und ist ein leichtgewichtiger Datenversender. Die Einführung von Beats hat den ELK Stack in den Elastic Stack verwandelt, aber das ist nicht das Hauptthema.
Dieser Artikel beschäftigt sich mit Grok, einer Funktion in Logstash, die Ihre Protokolle umwandeln kann, bevor sie in den Wassertank gesendet werden. Für unsere Zwecke werde ich mich nur mit der Datenverarbeitung von Logstash zu Elasticsearch befassen.

Grok ist ein Filter innerhalb von Logstash, der dazu verwendet wird, unstrukturierte Daten in strukturierte und abfragbare Formate umzuwandeln. Er basiert auf regulären Ausdrücken (regex) und verwendet Textmuster, um Zeichenfolgen in Protokolldateien zuzuordnen.
Wie wir in den folgenden Abschnitten sehen werden, ist der Einsatz von Grok entscheidend für ein effektives Log-Management.
Ohne Grok sind Ihre Protokolldaten unstrukturiert.

Ohne Grok erscheinen die Protokolle, die von Logstash an Elasticsearch gesendet und in Kibana visualisiert werden, lediglich im Nachrichtenwert.
In dieser Situation wird das Abfragen relevanter Informationen erschwert, da alle Protokolldaten in einem Schlüssel gespeichert sind. Es wäre besser, wenn die Protokollnachrichten besser organisiert wären.
Unstrukturierte Daten aus Logs
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0Wenn Sie sich die Rohdaten genauer ansehen, werden Sie feststellen, dass sie tatsächlich aus verschiedenen Teilen bestehen, die jeweils durch ein Leerzeichen getrennt sind.
Für erfahrenere Entwickler können Sie wahrscheinlich erraten, was jede der Teile bedeutet und dass diese Protokollnachricht von einem API-Aufruf stammt. Die Darstellung jeder einzelnen wird im Folgenden erläutert.
Strukturierte Darstellung unserer Daten
- localhost == Umgebung
- GET == Methode
- /v2/applink/5c2f4bb3e9fda1234edc64d == URL
- 400 == Antwortstatus
- 46ms == Antwortzeit
- 5bc6e716b5d6cb35fc9687c0 == Benutzer-ID
Wie wir in den strukturierten Daten sehen, gibt es eine Ordnung für unstrukturierte Protokolle. Der nächste Schritt ist die programmgesteuerte Verarbeitung der rohen Daten. Hier kommt Grok zur Geltung.
Grok-Vorlagen
Integrierte Grok-Vorlagen
Logstash wird mit über 100 integrierten Vorlagen geliefert, um unstrukturierte Daten zu strukturieren. Sie sollten definitiv von diesem Vorteil Gebrauch machen, wenn dies für allgemeine Systemprotokolle wie Apache, Linux, HAProxy, AWS usw. möglich ist.
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, zu experimentieren, um Ihre eigene Grok-Vorlage zu erstellen. Ich habe und .
Bitte beachten Sie, dass die Syntax der Grok-Templates folgendermaßen aussieht: %{SYNTAX:SEMANTIC}
Das Erste, was ich versuchte, war der Wechsel zum Tab Entdecken im Grok-Debugger. Ich dachte, es wäre toll, wenn dieses Tool automatisch ein Grok-Template generieren könnte, aber das war nicht so hilfreich, da es nur zwei Treffer fand.

Mit dieser Entdeckung begann ich, mein eigenes Template im Grok-Debugger zu erstellen, die Syntax, die ich auf der Github-Seite von Elastic fand, verwendend.

Nachdem ich mit verschiedenen Syntaxen experimentiert hatte, konnte ich schließlich die Logdaten so strukturieren, wie ich es wollte.

Link zum Grok-Debugger
Ausgangstext:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0Pattern:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}Das Ergebnis, das ich erzielt habe
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"\/v2\/applink\/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}Mit dem Grok-Template und den zugeordneten Daten in der Hand ist der letzte Schritt, es zu Logstash hinzuzufügen.
Aktualisierung der Logstash.conf-Datei
Gehen Sie auf dem Server, auf dem Sie den ELK-Stack installiert haben, zu den Logstash-Konfigurationen:
sudo vi /etc/logstash/conf.d/logstash.confFü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" ]
}
}Nachdem Sie die Änderungen gespeichert haben, starten Sie Logstash neu und überprüfen Sie seinen Status, um sicherzustellen, dass es weiterhin funktioniert.
sudo service logstash restart
sudo service logstash statusUm sicherzustellen, dass die Änderungen wirksam werden, müssen Sie den Elasticsearch-Index für Logstash in Kibana unbedingt aktualisieren!

Mit Grok werden Ihre Log-Daten strukturiert!

Wie im obigen Bild zu sehen ist, kann Grok Logdaten automatisch mit Elasticsearch abgleichen. Dies erleichtert die Verwaltung von Logs und das schnelle Abfragen von Informationen. Statt in Log-Dateien nach Informationen zu suchen, können Sie einfach filtern, was Sie benötigen, wie z.B. die Umgebung oder die URL.
Probieren Sie Grok-Expressions aus! Wenn Sie einen anderen Weg haben, dies zu tun, oder wenn Sie Probleme mit den obigen Beispielen haben, hinterlassen Sie einfach einen Kommentar unten, um mir Bescheid zu geben.
Danke fürs Lesen – und folgen Sie mir bitte hier auf Medium für weitere spannende Artikel zur Softwareentwicklung!
Ressourcen
P.S.
Telegram-Kanal über
Quelle: habr.com
