Tipps und Tricks zum Konvertieren unstrukturierter Daten aus Protokollen in ELK Stack mithilfe von GROK in LogStash

Strukturierung unstrukturierter Daten mit GROK

Wenn Sie den Elastic (ELK)-Stack verwenden und daran interessiert sind, benutzerdefinierte Logstash-Protokolle Elasticsearch zuzuordnen, dann ist dieser Beitrag genau das Richtige für Sie.

Tipps und Tricks zum Konvertieren unstrukturierter Daten aus Protokollen in ELK Stack mithilfe von GROK in LogStash

Der ELK-Stack ist ein Akronym für drei Open-Source-Projekte: Elasticsearch, Logstash und Kibana. Zusammen bilden sie eine Protokollverwaltungsplattform.

  • Elasticsearch ist ein Such- und Analysesystem.
  • Logstasch ist eine serverseitige Datenverarbeitungspipeline, die Daten aus mehreren Quellen gleichzeitig aufnimmt, umwandelt und sie dann an einen „Stash“ wie Elasticsearch sendet.
  • Kibana ermöglicht Benutzern die Visualisierung von Daten mithilfe von Diagrammen und Grafiken in Elasticsearch.

Beats kam später und ist ein leichter Datenversender. Die Einführung von Beats verwandelte den Elk Stack in den Elastic Stack, aber darum geht es nicht.

In diesem Artikel geht es um Grok, eine Funktion in Logstash, mit der Sie Ihre Protokolle umwandeln können, bevor sie an den Stash gesendet werden. Für unsere Zwecke werde ich nur auf die Verarbeitung von Daten aus Logstash in Elasticsearch eingehen.

Tipps und Tricks zum Konvertieren unstrukturierter Daten aus Protokollen in ELK Stack mithilfe von GROK in LogStash

Grok ist ein Filter in Logstash, der verwendet wird, um unstrukturierte Daten in etwas Strukturiertes und abfragbares zu analysieren. Es basiert auf einem regulären Ausdruck (Regex) und verwendet Textmuster, um Zeichenfolgen in Protokolldateien abzugleichen.

Wie wir in den folgenden Abschnitten sehen werden, macht die Verwendung von Grok einen großen Unterschied, wenn es um eine effiziente Protokollverwaltung geht.

Ohne Grok sind Ihre Protokolldaten unstrukturiert

Tipps und Tricks zum Konvertieren unstrukturierter Daten aus Protokollen in ELK Stack mithilfe von GROK in LogStash

Wenn Protokolle ohne Grok von Logstash an Elasticsearch gesendet und in Kibana gerendert werden, erscheinen sie nur im Nachrichtenwert.

In dieser Situation ist es schwierig, aussagekräftige Informationen abzufragen, da alle Protokolldaten in einem einzigen Schlüssel gespeichert sind. Es wäre besser, wenn die Protokollnachrichten besser organisiert wären.

Unstrukturierte Daten aus Protokollen

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 jeweils durch ein Leerzeichen getrennt sind.

Erfahrenere Entwickler können wahrscheinlich erraten, was die einzelnen Teile bedeuten und was die Protokollmeldung des API-Aufrufs ist. Die Präsentation der einzelnen Elemente ist unten aufgeführt.

Strukturierte Ansicht unserer Daten

  • ​ localhost == Umgebung
  • ​ GET == Methode
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == Antwortstatus
  • ​ 46ms == Antwortzeit
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Wie wir bei strukturierten Daten sehen, gibt es eine Reihenfolge für unstrukturierte Protokolle. Der nächste Schritt ist die Softwareverarbeitung der Rohdaten. Hier glänzt Grok.

Grok-Vorlagen

Integrierte Grok-Vorlagen

Logstash verfügt über über 100 integrierte Vorlagen zur Strukturierung unstrukturierter Daten. Sie sollten dies auf jeden Fall nach Möglichkeit für allgemeine Syslogs wie Apache, Linux, Haproxy, AWS usw. nutzen.

Was passiert jedoch, wenn Sie benutzerdefinierte Protokolle wie im obigen Beispiel haben? Sie müssen Ihre eigene Grok-Vorlage erstellen.

Benutzerdefinierte Grok-Vorlagen

Sie müssen versuchen, Ihre eigene Grok-Vorlage zu erstellen. ich benutzte Grok-Debugger и Grok-Muster.

Beachten Sie, dass die Syntax der Grok-Vorlage wie folgt lautet: %{SYNTAX:SEMANTIC}

Als erstes habe ich versucht, zur Registerkarte zu gehen Entdecken im Grok-Debugger. Ich dachte, es wäre cool, wenn dieses Tool automatisch ein Grok-Muster generieren könnte, aber das war nicht besonders nützlich, da es nur zwei Übereinstimmungen fand.

Tipps und Tricks zum Konvertieren unstrukturierter Daten aus Protokollen in ELK Stack mithilfe von GROK in LogStash

Mithilfe dieser Entdeckung begann ich mit der Erstellung meiner eigenen Vorlage im Grok-Debugger unter Verwendung der Syntax auf der Elastic Github-Seite.

Tipps und Tricks zum Konvertieren unstrukturierter Daten aus Protokollen in ELK Stack mithilfe von GROK in LogStash

Nachdem ich mit verschiedenen Syntaxen herumgespielt hatte, konnte ich die Protokolldaten endlich so strukturieren, wie ich es wollte.

Tipps und Tricks zum Konvertieren unstrukturierter Daten aus Protokollen in ELK Stack mithilfe von GROK in LogStash

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

Original Text:

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

Muster:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

Was ist am Ende passiert

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Nachdem Sie die Grok-Vorlage und die zugeordneten Daten zur Hand haben, besteht der letzte Schritt darin, sie zu Logstash hinzuzufügen.

Aktualisieren der Konfigurationsdatei Logstash.conf

Gehen Sie auf dem Server, auf dem Sie den ELK-Stack installiert haben, zur Logstash-Konfiguration:

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 Ihre Änderungen gespeichert haben, starten Sie Logstash neu und überprüfen Sie seinen Status, um sicherzustellen, dass es noch funktioniert.

sudo service logstash restart
sudo service logstash status

Um abschließend sicherzustellen, dass die Änderungen wirksam wurden, Aktualisieren Sie unbedingt Ihren Elasticsearch-Index für Logstash in Kibana!

Tipps und Tricks zum Konvertieren unstrukturierter Daten aus Protokollen in ELK Stack mithilfe von GROK in LogStash

Mit Grok sind Ihre Protokolldaten strukturiert!

Tipps und Tricks zum Konvertieren unstrukturierter Daten aus Protokollen in ELK Stack mithilfe von GROK in LogStash

Wie wir im Bild oben sehen können, ist Grok in der Lage, Protokolldaten automatisch mit Elasticsearch abzugleichen. Dies erleichtert die Verwaltung von Protokollen und die schnelle Abfrage von Informationen. Anstatt zum Debuggen die Protokolldateien zu durchsuchen, können Sie einfach nach dem filtern, wonach Sie suchen, beispielsweise nach einer Umgebung oder einer URL.

Probieren Sie Grok-Ausdrücke aus! Wenn Sie eine andere Möglichkeit haben, dies zu tun, oder Probleme mit den obigen Beispielen haben, schreiben Sie einfach unten einen Kommentar, 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/

PS Quellverweis

Telegram-Kanal von Elasticsearch

Source: habr.com

Kommentar hinzufügen