Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Logs in den ELK Stack unter Verwendung von GROK in LogStash

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.

Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Logs in den ELK Stack unter Verwendung von GROK in LogStash

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.

Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Logs in den ELK Stack unter Verwendung von GROK in LogStash

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.

Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Logs in den ELK Stack unter Verwendung von GROK in LogStash

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 5bc6e716b5d6cb35fc9687c0

Wenn 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 Grok-Muster und Beachten Sie, dass die Syntax der Grok-Vorlagen wie folgt aussieht:.

%{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.

Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Logs in den ELK Stack unter Verwendung von GROK in LogStash

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

Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Logs in den ELK Stack unter Verwendung von GROK in LogStash

Link zum Grok-Debugger

Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Logs in den ELK Stack unter Verwendung von GROK in LogStash

Ausgangstext: https://grokdebug.herokuapp.com/

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 status

Um sicherzustellen, dass die Änderungen wirksam sind, aktualisieren Sie unbedingt den Elasticsearch-Index für Logstash in Kibana!

Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Logs in den ELK Stack unter Verwendung von GROK in LogStash

Mit Grok werden Ihre Log-Daten strukturiert!

Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Logs in den ELK Stack unter Verwendung von GROK in LogStash

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

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

P.S Link zur Quelle

Telegram-Kanal zu Elasticsearch

Quelle: habr.com

60GB SSD 8Gb DDR4