Δόμηση μη δομημένων δεδομένων με GROK
Εάν χρησιμοποιείτε τη στοίβα Elastic (ELK) και ενδιαφέρεστε να αντιστοιχίσετε προσαρμοσμένα αρχεία καταγραφής Logstash στο Elasticsearch, τότε αυτή η ανάρτηση είναι για εσάς.
Η στοίβα ELK είναι ένα αρκτικόλεξο για τρία έργα ανοιχτού κώδικα: Elasticsearch, Logstash και Kibana. Μαζί σχηματίζουν μια πλατφόρμα διαχείρισης αρχείων καταγραφής.
- Ελαστική αναζήτηση είναι ένα σύστημα αναζήτησης και ανάλυσης.
- Logstash είναι ένας αγωγός επεξεργασίας δεδομένων από την πλευρά του διακομιστή που απορροφά δεδομένα από πολλές πηγές ταυτόχρονα, τα μετασχηματίζει και στη συνέχεια τα στέλνει σε "απόκρυψη" όπως το Elasticsearch.
- Kibana επιτρέπει στους χρήστες να οπτικοποιούν δεδομένα χρησιμοποιώντας γραφήματα και γραφήματα στο Elasticsearch.
Beats ήρθε αργότερα και είναι ένας ελαφρύς αποστολέας δεδομένων. Η εισαγωγή του Beats μετέτρεψε το Elk Stack σε Elastic Stack, αλλά δεν είναι αυτό το θέμα.
Αυτό το άρθρο αφορά το Grok, το οποίο είναι μια δυνατότητα στο Logstash που μπορεί να μεταμορφώσει τα αρχεία καταγραφής σας πριν σταλούν στο απόθεμα. Για τους σκοπούς μας, θα μιλήσω μόνο για την επεξεργασία δεδομένων από το Logstash στο Elasticsearch.
Το Grok είναι ένα φίλτρο μέσα στο Logstash που χρησιμοποιείται για την ανάλυση μη δομημένων δεδομένων σε κάτι δομημένο και με δυνατότητα αναζήτησης. Βρίσκεται πάνω από μια τυπική έκφραση (regex) και χρησιμοποιεί μοτίβα κειμένου για να ταιριάζει με συμβολοσειρές σε αρχεία καταγραφής.
Όπως θα δούμε στις επόμενες ενότητες, η χρήση του Grok κάνει μεγάλη διαφορά όσον αφορά την αποτελεσματική διαχείριση αρχείων καταγραφής.
Χωρίς το Grok τα δεδομένα καταγραφής σας δεν είναι δομημένα
Χωρίς το Grok, όταν τα αρχεία καταγραφής αποστέλλονται από το Logstash στο Elasticsearch και αποδίδονται στο Kibana, εμφανίζονται μόνο στην τιμή του μηνύματος.
Η αναζήτηση σημαντικών πληροφοριών σε αυτήν την κατάσταση είναι δύσκολη, επειδή όλα τα δεδομένα καταγραφής αποθηκεύονται σε ένα μόνο κλειδί. Θα ήταν καλύτερα τα μηνύματα του ημερολογίου να ήταν καλύτερα οργανωμένα.
Μη δομημένα δεδομένα από αρχεία καταγραφής
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Αν κοιτάξετε προσεκτικά τα ακατέργαστα δεδομένα, θα δείτε ότι στην πραγματικότητα αποτελείται από διαφορετικά μέρη, το καθένα χωρισμένο από ένα διάστημα.
Για πιο έμπειρους προγραμματιστές, μπορείτε πιθανώς να μαντέψετε τι σημαίνει καθένα από τα μέρη και ποιο είναι αυτό το μήνυμα καταγραφής από την κλήση API. Η παρουσίαση κάθε στοιχείου περιγράφεται παρακάτω.
Δομημένη προβολή των δεδομένων μας
- localhost == περιβάλλον
- μέθοδος GET ==
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == απόκριση_κατάσταση
- 46 ms == χρόνος_απόκρισης
- 5bc6e716b5d6cb35fc9687c0 == user_id
Όπως βλέπουμε στα δομημένα δεδομένα, υπάρχει μια παραγγελία για μη δομημένα αρχεία καταγραφής. Το επόμενο βήμα είναι η επεξεργασία λογισμικού ακατέργαστων δεδομένων. Εδώ λάμπει ο Γκροκ.
Πρότυπα Grok
Ενσωματωμένα πρότυπα Grok
Το Logstash συνοδεύεται από περισσότερα από 100 ενσωματωμένα πρότυπα για τη δόμηση μη δομημένων δεδομένων. Θα πρέπει οπωσδήποτε να επωφεληθείτε από αυτό όποτε είναι δυνατόν για γενικά syslogs όπως apache, linux, haproxy, aws και ούτω καθεξής.
Ωστόσο, τι συμβαίνει όταν έχετε προσαρμοσμένα αρχεία καταγραφής όπως στο παραπάνω παράδειγμα; Πρέπει να δημιουργήσετε το δικό σας πρότυπο Grok.
Προσαρμοσμένα πρότυπα Grok
Πρέπει να προσπαθήσετε να δημιουργήσετε το δικό σας πρότυπο Grok. χρησιμοποίησα
Σημειώστε ότι η σύνταξη του προτύπου Grok είναι η εξής: %{SYNTAX:SEMANTIC}
Το πρώτο πράγμα που προσπάθησα να κάνω ήταν να πάω στην καρτέλα Ανακαλύψτε στον εντοπισμό σφαλμάτων Grok. Σκέφτηκα ότι θα ήταν ωραίο αν αυτό το εργαλείο μπορούσε να δημιουργήσει αυτόματα ένα μοτίβο Grok, αλλά δεν ήταν πολύ χρήσιμο αφού βρήκε μόνο δύο αντιστοιχίες.
Χρησιμοποιώντας αυτήν την ανακάλυψη, άρχισα να δημιουργώ το δικό μου πρότυπο στο πρόγραμμα εντοπισμού σφαλμάτων Grok χρησιμοποιώντας τη σύνταξη που βρίσκεται στη σελίδα Elastic Github.
Αφού έπαιξα με διαφορετικές συντακτικές, τελικά μπόρεσα να δομήσω τα δεδομένα καταγραφής με τον τρόπο που ήθελα.
Σύνδεσμος εντοπισμού σφαλμάτων Grok
Πρωτότυπο κείμενο:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Πρότυπο:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Τι έγινε στο τέλος
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Με το πρότυπο Grok και τα αντιστοιχισμένα δεδομένα στο χέρι, το τελευταίο βήμα είναι να το προσθέσετε στο Logstash.
Ενημέρωση του αρχείου διαμόρφωσης Logstash.conf
Στον διακομιστή όπου εγκαταστήσατε τη στοίβα ELK, μεταβείτε στη διαμόρφωση Logstash:
sudo vi /etc/logstash/conf.d/logstash.conf
Επικολλήστε τις αλλαγές.
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" ]
}
}
Αφού αποθηκεύσετε τις αλλαγές σας, επανεκκινήστε το Logstash και ελέγξτε την κατάστασή του για να βεβαιωθείτε ότι εξακολουθεί να λειτουργεί.
sudo service logstash restart
sudo service logstash status
Τέλος, για να βεβαιωθείτε ότι οι αλλαγές έχουν τεθεί σε ισχύ, Φροντίστε να ενημερώσετε το ευρετήριο Elasticsearch για το Logstash στο Kibana!
Με το Grok, τα δεδομένα καταγραφής σας είναι δομημένα!
Όπως μπορούμε να δούμε στην παραπάνω εικόνα, το Grok είναι σε θέση να αντιστοιχίσει αυτόματα δεδομένα καταγραφής με το Elasticsearch. Αυτό διευκολύνει τη διαχείριση των αρχείων καταγραφής και τη γρήγορη αναζήτηση πληροφοριών. Αντί να ψάχνετε σε αρχεία καταγραφής για εντοπισμό σφαλμάτων, μπορείτε απλώς να φιλτράρετε με βάση αυτό που αναζητάτε, όπως ένα περιβάλλον ή μια διεύθυνση url.
Δοκιμάστε τις εκφράσεις Grok! Εάν έχετε άλλο τρόπο να το κάνετε αυτό ή έχετε προβλήματα με τα παραπάνω παραδείγματα, απλώς γράψτε ένα σχόλιο παρακάτω για να με ενημερώσετε.
Ευχαριστώ για την ανάγνωση—και παρακαλώ ακολουθήστε με εδώ στο Medium για περισσότερα ενδιαφέροντα άρθρα μηχανικής λογισμικού!
Πόροι
Κανάλι Telegram από
Πηγή: www.habr.com