Χαιρετισμός, κάτοικοι του Khabrovsk! Την παραμονή της έναρξης νέας εγγραφής για το μάθημα
Αυτό το άρθρο είναι μια σύντομη εισαγωγή στο 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:
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.
Η οθόνη του 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
Ο πελάτης Ιστού εκτελεί εφαρμογές στον διακομιστή, το 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 προσθέτει μεταδεδομένα από το Kubernetes. Έτσι, καθίσταται δυνατή η προβολή των κορμών ενός συγκεκριμένου κοντέινερ.
Για παράδειγμα, για να επιλέξετε τα αρχεία καταγραφής κοντέινερ promtail, μπορείτε να χρησιμοποιήσετε το ακόλουθο ερώτημα: {container_name = "promtail"}
.
Εδώ θυμηθείτε επίσης να επιλέξετε την πηγή δεδομένων Loki.
Αυτό το ερώτημα θα επιστρέψει τη δραστηριότητα κοντέινερ ως εξής:
Αποτέλεσμα ερωτήματος στο Grafana
Προσθήκη στον πίνακα ελέγχου
Ξεκινώντας με το Grafana 6.4, μπορείτε να τοποθετήσετε πληροφορίες καταγραφής απευθείας στον πίνακα εργαλείων. Μετά από αυτό, ο χρήστης θα μπορεί να εναλλάσσεται γρήγορα μεταξύ του αριθμού των αιτημάτων στον ιστότοπό του και των ιχνών εφαρμογής.
Παρακάτω είναι ένα παράδειγμα πίνακα εργαλείων που υλοποιεί αυτήν την αλληλεπίδραση:
Δείγμα πίνακα ελέγχου με μετρήσεις 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 που εκτίθενται στη Γραφάνα
Είναι δυνατή η χρήση ενός από τα πεδία JSON, για παράδειγμα, για:
- συνδέσμους προς εξωτερικό εργαλείο
- φιλτράρισμα των περιεχομένων του ημερολογίου
Για παράδειγμα, μπορείτε να κάνετε κλικ στο traceId για να μεταβείτε στο Zipkin ή στο Jaeger.
Ως συνήθως, περιμένουμε τα σχόλιά σας και σας προσκαλούμε
Πηγή: www.habr.com