Πώς να χρησιμοποιήσετε το Elasticsearch, το Logstash και το Kibana για να απεικονίσετε αρχεία καταγραφής στο Python σε πραγματικό χρόνο

Τι είναι η καταγραφή;

Ας υποθέσουμε ότι αναπτύσσετε ένα προϊόν λογισμικού. Λειτουργεί εξ αποστάσεως, αλληλεπιδρά με διαφορετικές συσκευές, συλλέγει δεδομένα από αισθητήρες και παρέχει μια υπηρεσία στον χρήστη. Μια μέρα, κάτι πάει στραβά και το σύστημα δεν λειτουργεί όπως αναμενόταν. Ίσως να μην ταυτοποιεί τις συσκευές ή να μην λαμβάνει δεδομένα από τους αισθητήρες ή μπορεί να είχε μόλις λάβει σφάλμα χρόνου εκτέλεσης λόγω σφάλματος στον κώδικα. Πώς μπορείτε να γνωρίζετε σίγουρα;

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

Η καταγραφή επιτρέπει στους προγραμματιστές να κατανοήσουν τι πραγματικά κάνει ο κώδικας και πώς είναι η ροή εργασίας. Ένα μεγάλο μέρος της ζωής των προγραμματιστών λογισμικού είναι η παρακολούθηση, η αντιμετώπιση προβλημάτων και ο εντοπισμός σφαλμάτων. Η καταγραφή το καθιστά πολύ πιο εύκολη και πιο ομαλή διαδικασία.

Οπτικοποίηση των αρχείων καταγραφής

Τώρα, εάν είστε ειδικός προγραμματιστής που έχει αναπτύξει και δημιουργεί λογισμικό για αρκετό καιρό, τότε θα νομίζετε ότι η καταγραφή δεν είναι μεγάλη υπόθεση και το μεγαλύτερο μέρος του κώδικα μας περιλαμβάνεται σε μια Debug.Log('____')δήλωση. Λοιπόν, αυτό είναι υπέροχο, αλλά υπάρχουν κάποιες άλλες πτυχές της καταγραφής που μπορούμε να χρησιμοποιήσουμε.

Η οπτικοποίηση συγκεκριμένων καταγεγραμμένων δεδομένων έχει τα ακόλουθα οφέλη:

  • Παρακολουθήστε τις λειτουργίες του συστήματος από απόσταση.
  • Κοινοποιήστε πληροφορίες με σαφήνεια και αποτελεσματικότητα μέσω στατιστικών γραφικών, γραφημάτων και γραφικών πληροφοριών.
  • Εξαγάγετε γνώσεις από τα δεδομένα που απεικονίζονται με τη μορφή διαφορετικών γραφημάτων.
  • Λάβετε τις απαραίτητες ενέργειες για τη βελτίωση του συστήματος.

Υπάρχουν διάφοροι τρόποι με τους οποίους μπορούμε να απεικονίσουμε ανεπεξέργαστα δεδομένα. Υπάρχουν πολλές βιβλιοθήκες στις γλώσσες προγραμματισμού Python και R που μπορούν να βοηθήσουν στη χάραξη γραφημάτων. Μπορείτε να μάθετε περισσότερα για αυτό εδώ . Αλλά σε αυτήν την ανάρτηση, δεν πρόκειται να συζητήσω για τις παραπάνω μεθόδους. Έχετε ακούσει ποτέ για τη στοίβα ELK ;

ELK στοίβα

E - Elasticsearch , L - Logstash , K - Kibana

Επιτρέψτε μου να δώσω μια σύντομη εισαγωγή σε αυτό. Η στοίβα ELK είναι μια συλλογή από τρία λογισμικά ανοιχτού κώδικα που βοηθούν στην παροχή πληροφοριών σε πραγματικό χρόνο σχετικά με δεδομένα που μπορούν να είναι είτε δομημένα είτε μη δομημένα. Κάποιος μπορεί να αναζητήσει και να αναλύσει δεδομένα χρησιμοποιώντας τα εργαλεία του με εξαιρετική ευκολία και αποτελεσματικότητα.

Η Elasticsearch είναι μια κατανεμημένη, RESTful μηχανή αναζήτησης και ανάλυσης ικανή να επιλύει έναν αυξανόμενο αριθμό περιπτώσεων χρήσης. Ως η καρδιά του Elastic Stack, αποθηκεύει κεντρικά τα δεδομένα σας, ώστε να μπορείτε να ανακαλύψετε τα αναμενόμενα και να αποκαλύψετε το απροσδόκητο. Το Elasticsearch σάς επιτρέπει να εκτελείτε και να συνδυάζετε πολλούς τύπους αναζητήσεων - δομημένες, μη δομημένες, γεωγραφικές, μετρικές κλπ. Είναι βασισμένο σε γλώσσα προγραμματισμού Java, η οποία επιτρέπει στο Elasticsearch να εκτελείται σε διαφορετικές πλατφόρμες. Επιτρέπει στους χρήστες να εξερευνήσουν πολύ μεγάλο αριθμό δεδομένων με πολύ υψηλή ταχύτητα.

Το Logstash είναι ένας αγωγός επεξεργασίας δεδομένων ανοιχτής πηγής, διακομιστή που απορροφά δεδομένα από πολλές πηγές ταυτόχρονα, τα μετατρέπει και στη συνέχεια τα στέλνει στο αγαπημένο σας «stash» (όπως το Elasticsearch). Τα δεδομένα είναι συχνά διασκορπισμένα ή σιωπηλά σε πολλά συστήματα σε πολλές μορφές. Το Logstash υποστηρίζει μια ποικιλία εισόδων που τραβούν τα γεγονότα από πολλές κοινές πηγές, όλα ταυτόχρονα. Καταναλώστε εύκολα από τα αρχεία καταγραφής, τις μετρήσεις, τις εφαρμογές ιστού, τα καταστήματα δεδομένων και διάφορες υπηρεσίες AWS, όλα με συνεχή ροή. Το Logstash διαθέτει ένα πτυσσόμενο πλαίσιο με περισσότερα από 200 πρόσθετα Ανακατέψτε, αντιστοιχίστε και ενορχηστρώστε διαφορετικές εισόδους, φίλτρα και εξόδους για να δουλέψετε σε αρμονία.

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

Για να λάβετε μια καλύτερη εικόνα της ροής εργασίας για το πώς αλληλεπιδρούν τα τρία λογισμικά μεταξύ τους, ανατρέξτε στο ακόλουθο διάγραμμα:

Εκτέλεση

Σύνδεση στην Python

Εδώ, επέλεξα να εξηγήσω την υλοποίηση της σύνδεσης στο Python επειδή είναι η πιο χρησιμοποιούμενη γλώσσα για έργα που περιλαμβάνουν επικοινωνία μεταξύ πολλαπλών μηχανημάτων και διαδικτύου πραγμάτων. Θα σας δώσει μια γενική ιδέα για το πώς λειτουργεί.

Η Python παρέχει ένα σύστημα καταγραφής ως μέρος της τυπικής βιβλιοθήκης του, ώστε να μπορείτε να προσθέσετε γρήγορα την καταγραφή στην εφαρμογή σας.

import logging

Στο Python, η καταγραφή μπορεί να γίνει σε 5 διαφορετικά επίπεδα που το καθένα υποδεικνύει αντίστοιχα τον τύπο του συμβάντος. Υπάρχουν τα εξής:

  • Πληροφορίες - Ορίζει ενημερωτικά μηνύματα που επισημαίνουν την πρόοδο της εφαρμογής σε χονδροειδές επίπεδο.
  • Εντοπισμός σφαλμάτων - Ορίζει λεπτομερείς ενημερωτικές εκδηλώσεις που είναι πιο χρήσιμες για τον εντοπισμό σφαλμάτων μιας εφαρμογής.
  • Προειδοποίηση - Προσδιορίζει δυνητικά επιβλαβείς καταστάσεις.
  • Σφάλμα - Ορίζει συμβάντα σφαλμάτων που ενδέχεται να επιτρέψουν την συνέχιση της εφαρμογής της εφαρμογής.
  • Κρίσιμο - Προσδιορίζει πολύ σοβαρά συμβάντα σφάλματος που πιθανώς οδηγούν την εφαρμογή σε ματαίωση.

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

Σημείωση : Οι πληροφορίες και το πρόγραμμα εντοπισμού σφαλμάτων δεν καταγράφονται από προεπιλογή καθώς καταγράφονται αρχεία καταγραφής μόνο επιπέδου προειδοποίησης και άνω.

Τώρα για να δώσω ένα παράδειγμα και να δημιουργήσω ένα σύνολο δηλώσεων καταγραφής για οπτικοποίηση, έχω δημιουργήσει ένα σενάριο Python που καταγράφει δηλώσεις συγκεκριμένης μορφής και ένα μήνυμα.

import logging import random logging.basicConfig(filename="logFile.txt", filemode="a", format="%(asctime)s %(levelname)s-%(message)s", datefmt="%Y-%m-%d %H:%M:%S") for i in xrange(0,15): x=random.randint(0,2) if(x==0): logging.warning('Log Message') elif(x==1): logging.critical('Log Message') else: logging.error('Log Message')

Εδώ, οι δηλώσεις καταγραφής θα προσαρτηθούν σε ένα αρχείο με το όνομα logFile.txt στην καθορισμένη μορφή. Έτρεξα το σενάριο για τρεις ημέρες σε διαφορετικά χρονικά διαστήματα δημιουργώντας ένα αρχείο που περιέχει αρχεία καταγραφής τυχαία όπως παρακάτω:

2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message

Setting up Elasticsearch, Logstash and Kibana

At first let’s download the three open source softwares from their respective links [elasticsearch],[logstash]and[kibana]. Unzip the files and put all three in the project folder.

Let’s get started.

Step 1 — Set up Kibana and Elasticsearch on the local system. We run Kibana by the following command in the bin folder of Kibana.

bin\kibana

Similarly, Elasticsearch is setup like this:

bin\elasticsearch

Now, in the two separate terminals we can see both of the modules running. In order to check that the services are running open localhost:5621 and localhost:9600.

After both the services are successfully running we use Logstash and Python programs to parse the raw log data and pipeline it to Elasticsearch from which Kibana queries data.

Step 2— Now let’s get on with Logstash. Before starting Logstash, a Logstash configuration file is created in which the details of input file, output location, and filter methods are specified.

input{ file{ path => "full/path/to/log_file/location/logFile.txt" start_position => "beginning" } } filter { grok{ match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level}-%{GREEDYDATA:message}"} } date { match => ["timestamp", "ISO8601"] } } output{ elasticsearch{ hosts => ["localhost:9200"] index => "index_name"} stdout{codec => rubydebug} }

This configuration file plays a major role in the ELK stack. Take a look at filter{grok{…}} line. This is a Grok filter plugin. Grok is a great way to parse unstructured log data into something structured and queryable. This tool is perfect for syslog logs, apache and other webserver logs, mysql logs, and in general, any log format that is generally written for humans and not computer consumption. This grok pattern mentioned in the code tells Logstash how to parse each line entry in our log file.

Now save the file in Logstash folder and start the Logstash service.

bin\logstash –f logstash-simple.conf
Για να μάθετε περισσότερα σχετικά με τη διαμόρφωση του αρχείου καταγραφής, κάντε κλικ [ εδώ ].

Βήμα 3 - Μετά από αυτό, τα αναλυμένα δεδομένα από τα αρχεία καταγραφής θα είναι διαθέσιμα στη διαχείριση Kibana στο localhost: 5621 για τη δημιουργία διαφορετικών οπτικών και ταμπλό. Για να ελέγξετε εάν το Kibana λαμβάνει δεδομένα, στην καρτέλα διαχείρισης του Kibana εκτελέστε την ακόλουθη εντολή:

localhost:9200/_cat/indices?v

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

Πίνακας ελέγχου με χρήση του Kibana

Αφού ρυθμίσετε τα πάντα, τώρα ήρθε η ώρα να δημιουργήσετε γραφήματα για να απεικονίσετε τα δεδομένα καταγραφής.

After opening the Kibana management homepage, we will be asked to create a new index pattern. Enter index_name* in the Index pattern field and select @timestamp in the Time Filter field name dropdown menu.

Now to create graphs, we go to the Visualize tab.

Select a new visualisation, choose a type of graph and index name, and depending on your axis requirements, create a graph. We can create a histogram with y-axis as the count and x-axis with the log-level keyword or the timestamp.

After creating a few graphs, we can add all the required visualisations and create a Dashboard, like below:

Σημείωση - Κάθε φορά που τα αρχεία καταγραφής στο αρχείο καταγραφής ενημερώνονται ή προσαρτώνται στα προηγούμενα αρχεία καταγραφής, αρκεί οι τρεις υπηρεσίες να εκτελούν τα δεδομένα στο elasticsearch και τα γραφήματα στο kibana θα ενημερώνονται αυτόματα σύμφωνα με τα νέα δεδομένα.

Τυλίγοντας

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

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

Για περαιτέρω αναφορά, μπορείτε να ανατρέξετε στην επίσημη τεκμηρίωση ELK από εδώ - //www.elastic.co/learn και σχετικά με τη σύνδεση στο python - //docs.python.org/2/library/logging.html