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

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.

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

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.

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

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.

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

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

Wenn 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 Grok Debugger und Grok Muster.

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.

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

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.

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

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

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

Link zum Grok-Debugger https://grokdebug.herokuapp.com/

Ausgangstext:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Pattern:

%{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.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" ]
  }
}

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 status

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

Tipps und Empfehlungen zur Umwandlung unstrukturierter Daten aus Protokollen 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 Protokollen in den ELK Stack unter Verwendung von GROK in LogStash

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

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. Quellenlink

Telegram-Kanal über Elasticsearch

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster