Συμβουλές και κόλπα για τη μετατροπή μη δομημένων δεδομένων από αρχεία καταγραφής σε στοίβα ELK χρησιμοποιώντας το GROK στο LogStash

Δόμηση μη δομημένων δεδομένων με GROK

Εάν χρησιμοποιείτε τη στοίβα Elastic (ELK) και ενδιαφέρεστε να αντιστοιχίσετε προσαρμοσμένα αρχεία καταγραφής Logstash στο Elasticsearch, τότε αυτή η ανάρτηση είναι για εσάς.

Συμβουλές και κόλπα για τη μετατροπή μη δομημένων δεδομένων από αρχεία καταγραφής σε στοίβα ELK χρησιμοποιώντας το GROK στο LogStash

Η στοίβα ELK είναι ένα αρκτικόλεξο για τρία έργα ανοιχτού κώδικα: Elasticsearch, Logstash και Kibana. Μαζί σχηματίζουν μια πλατφόρμα διαχείρισης αρχείων καταγραφής.

  • Ελαστική αναζήτηση είναι ένα σύστημα αναζήτησης και ανάλυσης.
  • Logstash είναι ένας αγωγός επεξεργασίας δεδομένων από την πλευρά του διακομιστή που απορροφά δεδομένα από πολλές πηγές ταυτόχρονα, τα μετασχηματίζει και στη συνέχεια τα στέλνει σε "απόκρυψη" όπως το Elasticsearch.
  • Kibana επιτρέπει στους χρήστες να οπτικοποιούν δεδομένα χρησιμοποιώντας γραφήματα και γραφήματα στο Elasticsearch.

Beats ήρθε αργότερα και είναι ένας ελαφρύς αποστολέας δεδομένων. Η εισαγωγή του Beats μετέτρεψε το Elk Stack σε Elastic Stack, αλλά δεν είναι αυτό το θέμα.

Αυτό το άρθρο αφορά το Grok, το οποίο είναι μια δυνατότητα στο Logstash που μπορεί να μεταμορφώσει τα αρχεία καταγραφής σας πριν σταλούν στο απόθεμα. Για τους σκοπούς μας, θα μιλήσω μόνο για την επεξεργασία δεδομένων από το Logstash στο Elasticsearch.

Συμβουλές και κόλπα για τη μετατροπή μη δομημένων δεδομένων από αρχεία καταγραφής σε στοίβα ELK χρησιμοποιώντας το GROK στο LogStash

Το Grok είναι ένα φίλτρο μέσα στο Logstash που χρησιμοποιείται για την ανάλυση μη δομημένων δεδομένων σε κάτι δομημένο και με δυνατότητα αναζήτησης. Βρίσκεται πάνω από μια τυπική έκφραση (regex) και χρησιμοποιεί μοτίβα κειμένου για να ταιριάζει με συμβολοσειρές σε αρχεία καταγραφής.

Όπως θα δούμε στις επόμενες ενότητες, η χρήση του Grok κάνει μεγάλη διαφορά όσον αφορά την αποτελεσματική διαχείριση αρχείων καταγραφής.

Χωρίς το Grok τα δεδομένα καταγραφής σας δεν είναι δομημένα

Συμβουλές και κόλπα για τη μετατροπή μη δομημένων δεδομένων από αρχεία καταγραφής σε στοίβα ELK χρησιμοποιώντας το GROK στο LogStash

Χωρίς το 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 Debugger и Grok Patterns.

Σημειώστε ότι η σύνταξη του προτύπου Grok είναι η εξής: %{SYNTAX:SEMANTIC}

Το πρώτο πράγμα που προσπάθησα να κάνω ήταν να πάω στην καρτέλα Ανακαλύψτε στον εντοπισμό σφαλμάτων Grok. Σκέφτηκα ότι θα ήταν ωραίο αν αυτό το εργαλείο μπορούσε να δημιουργήσει αυτόματα ένα μοτίβο Grok, αλλά δεν ήταν πολύ χρήσιμο αφού βρήκε μόνο δύο αντιστοιχίες.

Συμβουλές και κόλπα για τη μετατροπή μη δομημένων δεδομένων από αρχεία καταγραφής σε στοίβα ELK χρησιμοποιώντας το GROK στο LogStash

Χρησιμοποιώντας αυτήν την ανακάλυψη, άρχισα να δημιουργώ το δικό μου πρότυπο στο πρόγραμμα εντοπισμού σφαλμάτων Grok χρησιμοποιώντας τη σύνταξη που βρίσκεται στη σελίδα Elastic Github.

Συμβουλές και κόλπα για τη μετατροπή μη δομημένων δεδομένων από αρχεία καταγραφής σε στοίβα ELK χρησιμοποιώντας το GROK στο LogStash

Αφού έπαιξα με διαφορετικές συντακτικές, τελικά μπόρεσα να δομήσω τα δεδομένα καταγραφής με τον τρόπο που ήθελα.

Συμβουλές και κόλπα για τη μετατροπή μη δομημένων δεδομένων από αρχεία καταγραφής σε στοίβα ELK χρησιμοποιώντας το GROK στο LogStash

Σύνδεσμος εντοπισμού σφαλμάτων Grok https://grokdebug.herokuapp.com/

Πρωτότυπο κείμενο:

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!

Συμβουλές και κόλπα για τη μετατροπή μη δομημένων δεδομένων από αρχεία καταγραφής σε στοίβα ELK χρησιμοποιώντας το GROK στο LogStash

Με το Grok, τα δεδομένα καταγραφής σας είναι δομημένα!

Συμβουλές και κόλπα για τη μετατροπή μη δομημένων δεδομένων από αρχεία καταγραφής σε στοίβα ELK χρησιμοποιώντας το GROK στο LogStash

Όπως μπορούμε να δούμε στην παραπάνω εικόνα, το Grok είναι σε θέση να αντιστοιχίσει αυτόματα δεδομένα καταγραφής με το Elasticsearch. Αυτό διευκολύνει τη διαχείριση των αρχείων καταγραφής και τη γρήγορη αναζήτηση πληροφοριών. Αντί να ψάχνετε σε αρχεία καταγραφής για εντοπισμό σφαλμάτων, μπορείτε απλώς να φιλτράρετε με βάση αυτό που αναζητάτε, όπως ένα περιβάλλον ή μια διεύθυνση url.

Δοκιμάστε τις εκφράσεις Grok! Εάν έχετε άλλο τρόπο να το κάνετε αυτό ή έχετε προβλήματα με τα παραπάνω παραδείγματα, απλώς γράψτε ένα σχόλιο παρακάτω για να με ενημερώσετε.

Ευχαριστώ για την ανάγνωση—και παρακαλώ ακολουθήστε με εδώ στο Medium για περισσότερα ενδιαφέροντα άρθρα μηχανικής λογισμικού!

Πόροι

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 Σύνδεσμος προς την πηγή

Κανάλι Telegram από Ελαστική αναζήτηση

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο