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.
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.
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
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
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.
Mithilfe dieser Entdeckung begann ich mit der Erstellung meiner eigenen Vorlage im Grok-Debugger unter Verwendung der Syntax auf der Elastic Github-Seite.
Nachdem ich mit verschiedenen Syntaxen herumgespielt hatte, konnte ich die Protokolldaten endlich so strukturieren, wie ich es wollte.
Grok-Debugger-Link
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!
Mit Grok sind Ihre Protokolldaten strukturiert!
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
PS
Telegram-Kanal von
Source: habr.com