Logstash Grok Muster online für den Elasticsearch (ELK) Stack prüfen
In diesem Posting geht es um die online Überprüfung von Mustern für den Logstash Filter Grok.
Einführung
Mit dem ELK Stack [1], bestehend aus Elasticsearch, Logstash und Kibana, lassen sich Logdateien prima analysieren. Logstash verwendet dafür unter anderem den Filter Grok [2], ein Tool das bei der Analyse von unstrukturiertem Text hilfreich ist. Dem Filter wird dabei der zu analysierende Text (message) übergeben. Grok wendet auf die message eine zuvor definierte Folge von Grok Mustern an. Falls die message und die Folge von Mustern übereinstimmen, also falls beide matchen, gibt der Filter den zu jedem Muster gefundenen Wert in strukturierter Weise zurück.
Passt das Muster?
Bei einer message kann es sich dabei um einzelne Zeilen einer Logdatei handeln oder z. B. auch um Ausgaben einer SQL-Abfrage einer Datenbank. Die message kann auch mehrzeilig sein. Die Schwierigkeit beim Grok Filter besteht darin, eine zur jeweiligen message passende Folge von Grok Mustern zu finden. Logstash enthält bereits standardmässig eine große Anzahl von Grok Mustern, die beliebig kombiniert und erweitert werden können. Zuerst betrachtet man den zu analysierenden unstrukturierten Text und überlegt sich, welche Grok Muster darauf anzuwenden sein könnten. Unser Beispieltext stammt von einer SQL-Abfrage:
id:123,datumAbruf:2015-07-07 10:30:00,shopName:myShop,shopUrl:http://www.myshop.de,artikelIdentifikation:123-de
Bei der ersten Betrachtung der message fällt auf, die einzelnen Werte sind durch ein Komma getrennt. Außerdem scheint es sich um Key-Value-Paare zu handeln. Unsere Folge von Grok Mustern könnte also wie folgt aussehen:
id:%{NUMBER:id:int},datumAbruf:%{TIMESTAMP_ISO8601:datumAbruf},shopName:%{USERNAME:shopName},shopUrl:%{URI:shopUrl},artikelIdentifikation:%{GREEDYDATA:artikelIdentifikation}
Möchte man testen, ob die gefundene Folge von Grok Mustern auf die message anwendbar ist, so kann man dafür Logstash im agent Modus starten. Der Grok Filter wird dabei in der Konfigurationsdatei logstash.conf angegeben:
sudo -u logstash /opt/logstash/bin/logstash agent --verbose -f /etc/logstash/conf.d/logstash.conf
Falls die Grok Muster Folge nicht auf die Nachricht anwendbar ist, fügt logstash den Typ _grokparsefailure hinzu. Dieses Vorgehen ist langwierig, denn bei jedem Versuch muss zuerst Logstash gestartet werden, was einige Sekunden in Anspruch nimmt. Viel besser geeignet ist die Matcher Funktion [3] von Grok Constructor. Dabei handelt es sich um eine Art online Logstash. Die Webseite bietet ein Textfeld, in das man den unstrukturierten Text eingibt. Darunter kann man die zu testende Grok Muster Folge eingeben und danach die Logstash Bibliotheken definieren, die für die Analyse verwendet werden sollen.
Die Überprüfung der Grok Muster Folge wird gestartet durch Klick auf den Go!-Knopf. Die Seite präsentiert das Ergebnis der Überprüfung am unteren Ende.
Weitere Funktionen
Neben Matcher bietet die Seite noch zwei weitere Funktionen. Mit Incremental Construction steht eine Art Assistent zur Verfügung, der Schritt für Schritt durch den zu analysierenden Text führt und Vorschläge für mögliche Grok Muster Folgen macht. Der Assistent funktioniert gut und vereinfacht das Finden von passenden Grok Muster Folgen. Allerdings stößt man schnell an die Grenzen der Funktion, wenn man z. B. mit Freitext zu tun hat. Die folgende Grok Muster Folge wurde mit der Incremental Construction Funktion ermittelt:
id:%{BASE10NUM:id},datumAbruf:%{TIMESTAMP_ISO8601:datumAbruf},shopName:%{HOST:shopName},shopUrl:%{URI:shopUrl},artikelIdentifikation:%{GREEDYDATA:artikelIdentifikation}
Diese Folge von Mustern ist zwar auf unseren Beispieltext anwendbar. Sobald aber beispielsweise der Shop-Name ein Leerzeichen enthält ("Mein Shop"), schlägt das Matching fehl. Musterfolgen, die mit der Incremental Construction Funktion ermittelt wurden, dienen zwar als guter Anhaltspunkt, müssen aber nachkontrolliert werden.
Die zweite Funktion der Seite heißt Automatic Construction und generiert nach dem Prinzip der Permutation alle möglichen Musterfolgen. Das (auf die Top 200 Folgen eingeschränkte) Ergebnis ist allerdings nicht wirklich für die weitere Verwendung geeignet.
Fazit
Mit der Matcher Funktion der Webseite Grok Constructor lässt sich schnell und einfach eine Folge von Grok Mustern finden und überprüfen, ob sie auf einen Beispieltext anwendbar ist.