Loki - συλλογή αρχείων καταγραφής χρησιμοποιώντας την προσέγγιση Προμηθέας

Χαιρετισμός, κάτοικοι του Khabrovsk! Την παραμονή της έναρξης νέας εγγραφής για το μάθημα "Πρακτικές και εργαλεία DevOps" Ετοιμάσαμε μια μετάφραση ενδιαφέροντος υλικού για εσάς.

Αυτό το άρθρο είναι μια σύντομη εισαγωγή στο Loki. Project Loki υποστηρίζεται από τη Γραφάνα και στοχεύει στην κεντρική συλλογή αρχείων καταγραφής (από διακομιστές ή κοντέινερ).

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

  • χρησιμοποιώντας ετικέτες για την αποθήκευση δεδομένων
  • κατανάλωση λίγων πόρων

Θα επιστρέψουμε στο πώς λειτουργεί ο Prometheus και θα δώσουμε μερικά παραδείγματα χρήσης του στο πλαίσιο του Kubernetes.

Λίγα λόγια για τον Προμηθέα

Για να κατανοήσετε πλήρως πώς λειτουργεί ο Loki, είναι σημαντικό να κάνετε ένα βήμα πίσω και να θυμηθείτε λίγα πράγματα για τον Προμηθέα.

Ένα από τα ιδιαίτερα χαρακτηριστικά του Prometheus είναι η εξαγωγή μετρήσεων από σημεία συλλογής (μέσω εξαγωγέων) και η αποθήκευσή τους στο TSDB (Time Series Data Base), με την προσθήκη μεταδεδομένων με τη μορφή ετικετών.

Γιατί είναι απαραίτητο

Πρόσφατα, ο Prometheus έγινε το de facto πρότυπο στον κόσμο των κοντέινερ και των Kubernetes: η εγκατάστασή του είναι πολύ απλή και το σύμπλεγμα Kubernetes έρχεται με ένα εγγενές τελικό σημείο για τον Prometheus. Ο Prometheus μπορεί επίσης να εξάγει μετρήσεις από εφαρμογές που αναπτύσσονται σε ένα κοντέινερ ενώ αποθηκεύει συγκεκριμένες ετικέτες. Επομένως, η παρακολούθηση εφαρμογών είναι πολύ εύκολη στην εφαρμογή.

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

  • διαχειριζόμενη υπηρεσία cloud για συγκέντρωση αρχείων καταγραφής (AWS, Azure ή Google)
  • υπηρεσία παρακολούθησης "παρακολούθηση ως υπηρεσία" (για παράδειγμα, Datadog)
  • δημιουργώντας τη δική σας υπηρεσία συλλογής κορμών.

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

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

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

Ωστόσο, αυτή η απλότητα έρχεται σε βάρος ορισμένων συμβιβασμών. Ένα από αυτά είναι να μην ευρετηριαστεί το περιεχόμενο. Επομένως, η αναζήτηση κειμένου δεν είναι πολύ αποτελεσματική ή πλούσια και δεν επιτρέπει στατιστικά στοιχεία για το περιεχόμενο του κειμένου. Αλλά επειδή ο Λόκι θέλει να είναι το αντίστοιχο του grep και να συμπληρώσει τον Προμηθέα, αυτό δεν είναι μειονέκτημα.

Διερεύνηση περιστατικού

Για να κατανοήσουμε καλύτερα γιατί το Loki δεν χρειάζεται ευρετηρίαση, ας επιστρέψουμε στη μέθοδο διερεύνησης περιστατικών που χρησιμοποίησαν οι προγραμματιστές του Loki:

Loki - συλλογή αρχείων καταγραφής χρησιμοποιώντας την προσέγγιση Προμηθέας
1 Ειδοποίηση → 2 Πίνακας εργαλείων → 3 Ερώτημα Adhoc → 4 Συνάθροιση αρχείων καταγραφής → 5 Κατανεμημένη ανίχνευση → 6 Διόρθωση!
(1 Προειδοποίηση → 2 Πίνακας εργαλείων → 3 Ερώτημα Adhoc → 4 Συνάθροιση αρχείων καταγραφής → 5 Κατανεμημένη ανίχνευση → 6 Διόρθωση!)

Η ιδέα είναι ότι λαμβάνουμε κάποιο είδος ειδοποίησης (Slack Notification, SMS κ.λπ.) και μετά:

  • κοιτάξτε τους πίνακες εργαλείων Grafana
  • κοιτάξτε τις μετρήσεις υπηρεσιών (για παράδειγμα, στον Προμηθέα)
  • κοιτάξτε τις εγγραφές ημερολογίου (για παράδειγμα, στο Elasticsearch)
  • ίσως ρίξτε μια ματιά στα κατανεμημένα ίχνη (Jaeger, Zipkin, κ.λπ.)
  • και τελικά επιλύοντας το αρχικό πρόβλημα.

Εδώ, στην περίπτωση της στοίβας Grafana + Prometheus + Elasticsearch + Zipkin, θα πρέπει να χρησιμοποιήσετε τέσσερα διαφορετικά εργαλεία. Για να μειώσετε το χρόνο, θα ήταν ωραίο να μπορείτε να εκτελέσετε όλα αυτά τα βήματα χρησιμοποιώντας ένα εργαλείο: το Grafana. Αξίζει να σημειωθεί ότι αυτή η προσέγγιση στην έρευνα έχει εφαρμοστεί στο Grafana από την έκδοση 6. Έτσι, καθίσταται δυνατή η πρόσβαση στα δεδομένα του Prometheus απευθείας από το Grafana.

Loki - συλλογή αρχείων καταγραφής χρησιμοποιώντας την προσέγγιση Προμηθέας
Η οθόνη του Explorer χωρίζεται μεταξύ του Προμηθέα και του Λόκι

Από αυτήν την οθόνη μπορείτε να προβάλετε αρχεία καταγραφής Loki που σχετίζονται με τις μετρήσεις του Prometheus χρησιμοποιώντας την έννοια της διαίρεσης οθόνης. Από την έκδοση 6.5, το Grafana σάς επιτρέπει να αναλύετε το αναγνωριστικό ανίχνευσης στις καταχωρίσεις καταγραφής Loki για να ακολουθήσετε συνδέσμους προς τα αγαπημένα σας εργαλεία κατανεμημένης ανίχνευσης (Jaeger).

Τοπικό τεστ Loki

Ο ευκολότερος τρόπος για να δοκιμάσετε το Loki τοπικά είναι να χρησιμοποιήσετε το docker-compose. Το αρχείο docker-compose βρίσκεται στο αποθετήριο Loki. Μπορείτε να λάβετε το αποθετήριο χρησιμοποιώντας την ακόλουθη εντολή git:

$ git clone https://github.com/grafana/loki.git

Στη συνέχεια, πρέπει να μεταβείτε στον κατάλογο παραγωγής:

$ cd production

Μετά από αυτό, μπορείτε να λάβετε την πιο πρόσφατη έκδοση των εικόνων Docker:

$ docker-compose pull

Τέλος, η στοίβα Loki εκκινείται με την ακόλουθη εντολή:

$ docker-compose up

Αρχιτεκτονική Loki

Εδώ είναι ένα μικρό διάγραμμα με την αρχιτεκτονική Loki:

Loki - συλλογή αρχείων καταγραφής χρησιμοποιώντας την προσέγγιση Προμηθέας
Αρχές Αρχιτεκτονικής Loki

Ο πελάτης Ιστού εκτελεί εφαρμογές στον διακομιστή, το Promtail συλλέγει αρχεία καταγραφής και τα στέλνει στο Loki, ο πελάτης Ιστού στέλνει επίσης μεταδεδομένα στον Loki. Ο Λόκι συγκεντρώνει τα πάντα και τα μεταδίδει στη Γραφάνα.
Ο Loki εκτοξεύεται. Για να δείτε τα διαθέσιμα στοιχεία, εκτελέστε την ακόλουθη εντολή:

$ docker ps

Στην περίπτωση ενός πρόσφατα εγκατεστημένου Docker, η εντολή θα πρέπει να επιστρέψει το ακόλουθο αποτέλεσμα:

IMAGE               PORTS                  NAMES
grafana/promtail:                          production_promtail_1
grafana/grafana: m  0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late  80/tcp,0.0.0.0:3100... production_loki_1

Βλέπουμε τα ακόλουθα στοιχεία:

  • Promtail: πράκτορας υπεύθυνος για τη συγκέντρωση αρχείων καταγραφής
  • Grafana: ένα διάσημο εργαλείο ταμπλό
  • Loki: Data Centralization Daemon

Ως μέρος μιας κλασικής υποδομής (για παράδειγμα, που βασίζεται σε εικονικές μηχανές), ο πράκτορας Promtail πρέπει να αναπτυχθεί σε κάθε μηχανή. Το Grafana και το Loki μπορούν να εγκατασταθούν στο ίδιο μηχάνημα.

Ανάπτυξη στο Kubernetes

Η εγκατάσταση στοιχείων Loki στο Kubernetes θα γίνει ως εξής:

  • daemonSet για την ανάπτυξη του πράκτορα Promtail σε καθένα από τα μηχανήματα στο σύμπλεγμα διακομιστών
  • Ανάπτυξη Loki
  • και το τελευταίο είναι η ανάπτυξη της Γραφάνας.

Ευτυχώς, το Loki είναι διαθέσιμο ως πακέτο Helm, καθιστώντας το εύκολο στην ανάπτυξή του.

Εγκατάσταση μέσω Heml

Θα πρέπει να έχετε ήδη εγκαταστήσει το Heml. Μπορείτε να το κατεβάσετε από το αποθετήριο GitHub του έργου. Εγκαθίσταται αποσυσκευάζοντας το αρχείο που αντιστοιχεί στην αρχιτεκτονική σας και προσθέτοντας το πηδάλιο στο $PATH.

Σημείωση: Η έκδοση 3.0.0 του Helm κυκλοφόρησε πρόσφατα. Δεδομένου ότι έχουν γίνει πολλές αλλαγές σε αυτό, συνιστάται στον αναγνώστη να περιμένει λίγο πριν το χρησιμοποιήσει..

Προσθήκη πηγής για Helm

Το πρώτο βήμα είναι να προσθέσετε το αποθετήριο "loki" χρησιμοποιώντας την ακόλουθη εντολή:

$ helm add loki https://grafana.github.io/loki/charts

Μετά από αυτό, μπορείτε να αναζητήσετε πακέτα με το όνομα "loki":

$ helm search loki

Το αποτέλεσμα:

loki/loki       0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2  v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail   0.13.1 v0.4.0 Responsible for gathering logs and...

Αυτά τα πακέτα έχουν τα ακόλουθα χαρακτηριστικά:

  • πακέτο loki/loki ταιριάζει μόνο με τον διακομιστή Loki
  • πακέτο loki/fluent-bit σας επιτρέπει να αναπτύξετε ένα DaemonSet χρησιμοποιώντας fluent-bin για τη συλλογή αρχείων καταγραφής αντί του Promtail
  • πακέτο loki/promtail περιέχει έναν παράγοντα συλλογής αρχείων καταγραφής
  • πακέτο loki/loki-stack, σας επιτρέπει να αναπτύξετε αμέσως το Loki μαζί με το Promtail.

Εγκατάσταση Loki

Για να αναπτύξετε το Loki στο Kubernetes, εκτελέστε την ακόλουθη εντολή στον χώρο ονομάτων «παρακολούθηση»:

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

Για αποθήκευση στο δίσκο, προσθέστε την παράμετρο --set loki.persistence.enabled = true:

$ helm upgrade --install loki loki/loki-stack 
              --namespace monitoring 
              --set loki.persistence.enabled=true

Σημείωση: εάν θέλετε να αναπτύξετε το Grafana ταυτόχρονα, προσθέστε την παράμετρο --set grafana.enabled = true

Όταν εκτελείτε αυτήν την εντολή θα πρέπει να λάβετε την ακόλουθη έξοδο:

LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
…
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.

Εξετάζοντας την κατάσταση των pods στον χώρο ονομάτων "παρακολούθηση", μπορούμε να δούμε ότι όλα έχουν αναπτυχθεί:

$ kubectl -n monitoring get pods -l release=loki

Το αποτέλεσμα:

NAME                 READY  STATUS   RESTARTS  AGE
loki-0               1/1    Running  0         147m
loki-promtail-9zjvc  1/1    Running  0         3h25m
loki-promtail-f6brf  1/1    Running  0         11h
loki-promtail-hdcj7  1/1    Running  0         3h23m
loki-promtail-jbqhc  1/1    Running  0         11h
loki-promtail-mj642  1/1    Running  0         62m
loki-promtail-nm64g  1/1    Running  0         24m

Όλα τα pods τρέχουν. Τώρα ήρθε η ώρα να κάνετε μερικές δοκιμές!

Σύνδεση με Γραφάνα

Για να συνδεθείτε στο Grafana κάτω από το Kubernetes, πρέπει να ανοίξετε ένα τούνελ στο pod του. Παρακάτω είναι η εντολή για το άνοιγμα της θύρας 3000 για το Grafana pod:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

Ένα άλλο σημαντικό σημείο είναι η ανάγκη ανάκτησης του κωδικού πρόσβασης διαχειριστή Grafana. Ο κωδικός πρόσβασης διατηρείται μυστικός loki-grafana στον τομέα .data.admin-user σε μορφή base64.

Για να το επαναφέρετε, πρέπει να εκτελέσετε την ακόλουθη εντολή:

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

Χρησιμοποιήστε αυτόν τον κωδικό πρόσβασης σε συνδυασμό με τον προεπιλεγμένο λογαριασμό διαχειριστή (admin).

Καθορισμός μιας πηγής δεδομένων Loki στο Grafana

Πρώτα απ 'όλα, βεβαιωθείτε ότι έχει δημιουργηθεί η πηγή δεδομένων Loki (Διαμόρφωση/Πηγή δεδομένων).
Ακολουθεί ένα παράδειγμα:

Loki - συλλογή αρχείων καταγραφής χρησιμοποιώντας την προσέγγιση Προμηθέας
Παράδειγμα ρύθμισης μιας πηγής δεδομένων για το Loki

Κάνοντας κλικ στο "Δοκιμή" μπορείτε να ελέγξετε τη σύνδεση με τον Loki.

Κάνοντας αιτήματα στον Λόκι

Τώρα μεταβείτε στη Γραφάνα στην ενότητα "Εξερεύνηση". Όταν λαμβάνει αρχεία καταγραφής από κοντέινερ, ο Loki προσθέτει μεταδεδομένα από το Kubernetes. Έτσι, καθίσταται δυνατή η προβολή των κορμών ενός συγκεκριμένου κοντέινερ.

Για παράδειγμα, για να επιλέξετε τα αρχεία καταγραφής κοντέινερ promtail, μπορείτε να χρησιμοποιήσετε το ακόλουθο ερώτημα: {container_name = "promtail"}.
Εδώ θυμηθείτε επίσης να επιλέξετε την πηγή δεδομένων Loki.

Αυτό το ερώτημα θα επιστρέψει τη δραστηριότητα κοντέινερ ως εξής:

Loki - συλλογή αρχείων καταγραφής χρησιμοποιώντας την προσέγγιση Προμηθέας
Αποτέλεσμα ερωτήματος στο Grafana

Προσθήκη στον πίνακα ελέγχου

Ξεκινώντας με το Grafana 6.4, μπορείτε να τοποθετήσετε πληροφορίες καταγραφής απευθείας στον πίνακα εργαλείων. Μετά από αυτό, ο χρήστης θα μπορεί να εναλλάσσεται γρήγορα μεταξύ του αριθμού των αιτημάτων στον ιστότοπό του και των ιχνών εφαρμογής.

Παρακάτω είναι ένα παράδειγμα πίνακα εργαλείων που υλοποιεί αυτήν την αλληλεπίδραση:

Loki - συλλογή αρχείων καταγραφής χρησιμοποιώντας την προσέγγιση Προμηθέας
Δείγμα πίνακα ελέγχου με μετρήσεις Prometheus και αρχεία καταγραφής Loki

Το μέλλον του Loki

Άρχισα να χρησιμοποιώ το Loki τον Μάιο/Ιούνιο με την έκδοση 0.1. Σήμερα η έκδοση 1, ακόμα και η 1.1 και η 1.2 έχουν ήδη κυκλοφορήσει.

Πρέπει να παραδεχτούμε ότι η έκδοση 0.1 δεν ήταν αρκετά σταθερή. Αλλά το 0.3 έδειξε ήδη πραγματικά σημάδια ωριμότητας και οι επόμενες εκδόσεις (0.4, μετά 1.0) απλώς ενίσχυσαν αυτήν την εντύπωση.

Μετά το 1.0.0, κανείς δεν μπορεί να έχει καμία δικαιολογία για να μην χρησιμοποιήσει αυτό το υπέροχο εργαλείο.

Οι περαιτέρω βελτιώσεις δεν θα πρέπει να αφορούν τον Loki, αλλά την ενσωμάτωσή του με την εξαιρετική Grafana. Στην πραγματικότητα, το Grafana 6.4 έχει ήδη καλή ενσωμάτωση με τα ταμπλό.

Το Grafana 6.5, το οποίο κυκλοφόρησε πρόσφατα, βελτιώνει περαιτέρω αυτήν την ενοποίηση αναγνωρίζοντας αυτόματα τα περιεχόμενα των αρχείων καταγραφής σε μορφή JSON.

Το παρακάτω βίντεο δείχνει ένα μικρό παράδειγμα αυτού του μηχανισμού:

Loki - συλλογή αρχείων καταγραφής χρησιμοποιώντας την προσέγγιση Προμηθέας
Χρησιμοποιώντας χορδές Loki που εκτίθενται στη Γραφάνα

Είναι δυνατή η χρήση ενός από τα πεδία JSON, για παράδειγμα, για:

  • συνδέσμους προς εξωτερικό εργαλείο
  • φιλτράρισμα των περιεχομένων του ημερολογίου

Για παράδειγμα, μπορείτε να κάνετε κλικ στο traceId για να μεταβείτε στο Zipkin ή στο Jaeger.

Ως συνήθως, περιμένουμε τα σχόλιά σας και σας προσκαλούμε ανοιχτό διαδικτυακό σεμινάριο, όπου θα μιλήσουμε για το πώς αναπτύχθηκε η βιομηχανία DevOps κατά τη διάρκεια του 2019 και θα συζητήσουμε πιθανές διαδρομές ανάπτυξης για το 2020.

Πηγή: www.habr.com