Ας μάθουμε τα βασικά στοιχεία του Grafana Tempo, ενός κατανεμημένου backend ανίχνευσης.
Η κατανεμημένη ανίχνευση είναι ο τρόπος για να λάβετε λεπτομερείς πληροφορίες σχετικά με την απόδοση του συστήματος. Είναι ένας τρόπος οπτικοποίησης του κύκλου ζωής ενός αιτήματος που περνά μέσα από την εφαρμογή. Η εφαρμογή θα μπορούσε να αποτελείται από πολλαπλές υπηρεσίες που υπάρχουν σε έναν μόνο κόμβο ή κατανεμημένες μεταξύ των κόμβων.
Έτσι, χρησιμοποιώντας την κατανεμημένη ανίχνευση, μπορείτε να έχετε μια ενοποιημένη προβολή όλων των υπηρεσιών. Και το Grafana Tempo έχει να κάνει με αυτό.
Πίνακας περιεχομένων
Τι είναι το Grafana Tempo;
Υπήρξαν μερικές σημαντικές ενημερώσεις από τα Grafana Labs στο συνέδριο ObservabilityCon φέτος, και το Grafana Tempo ήταν ένα από αυτά. Η Grafana Labs πρόσθεσε ένα ακόμη έργο, το “Grafana Tempo”, στο χαρτοφυλάκιό τους ανοιχτού κώδικα.
Grafana Tempo είναι ένα κατανεμημένο backend ανίχνευσης ανοιχτού κώδικα που είναι εξαιρετικά επεκτάσιμο και εύκολο στη χρήση. Το Tempo είναι απολύτως συμβατό με άλλα πρωτόκολλα ανίχνευσης όπως τα Zipkin, Jaeger, OpenTelemetry και OpenCensus. Επί του παρόντος, υποστηρίζει τη μηχανή ανακάλυψης δεδομένων Tempo στο Loki, παρακολουθώντας πλατφόρμες όπως ο Prometheus και η Grafana. Το Grafana 7.3+ προσφέρει μια απρόσκοπτη εμπειρία μεταξύ Grafana και Tempo.
Γιατί να χρησιμοποιήσετε το Tempo;
Το Tempo χρησιμοποιείται για να συσχετίσει τις μετρήσεις, τα ίχνη και τα αρχεία καταγραφής. Υπάρχουν περιπτώσεις όπου ένας χρήστης λαμβάνει το ίδιο είδος σφάλματος πολλές φορές. Αν θέλω να καταλάβω τι συμβαίνει, θα πρέπει να κοιτάξω τα ακριβή ίχνη. Αλλά λόγω της μείωσης της δειγματοληψίας, ορισμένες πολύτιμες πληροφορίες που μπορεί να αναζητούσα θα είχαν χαθεί. Με το Tempo, τώρα δεν χρειάζεται να κάνουμε υποδειγματοληψία κατανεμημένων δεδομένων ανίχνευσης. Μπορούμε να αποθηκεύσουμε το πλήρες ίχνος σε αποθήκευση αντικειμένων όπως το S3 ή το GCS, καθιστώντας το Tempo πολύ οικονομικό.
Επίσης, το Tempo σάς δίνει τη δυνατότητα για ταχύτερο εντοπισμό σφαλμάτων/αντιμετώπιση προβλημάτων, επιτρέποντάς σας να μετακινηθείτε γρήγορα από τις μετρήσεις στα σχετικά ίχνη των συγκεκριμένων αρχείων καταγραφής που έχουν καταγράψει ορισμένα ζητήματα.
Παρακάτω είναι οι επιλογές διαμόρφωσης που χρησιμοποιούνται στο Tempo.
- Διανομέας: Χρησιμοποιούνται για τη διαμόρφωση των επιλογών λήψης ώστε να λαμβάνουν διαστήματα και στη συνέχεια να τα στέλνουν στους απορρόφησης.
- Ingester: Χρησιμοποιούνται για τη δημιουργία παρτίδων ιχνών και τα στέλνει στο TempoDB για αποθήκευση.
- Συμπιεστής: Μεταφέρει μπλοκ από το χώρο αποθήκευσης, όπως S3 ή GCS, τα συνδυάζει και τα εγγράφει πίσω στον αποθηκευτικό χώρο.
- Αποθήκευση: Χρησιμοποιείται για τη διαμόρφωση του TempoDB. Πρέπει να αναφέρετε το όνομα υποστήριξης αποθήκευσης (S3 ή GCS) με άλλες παραμέτρους σε αυτήν τη διαμόρφωση.
- Λίστα μελών: Χρησιμοποιείται για τον συντονισμό μεταξύ των στοιχείων Tempo.
- Έλεγχος ταυτότητας/Διακομιστής: Το Tempo χρησιμοποιεί διακομιστή Weaveworks/Common. Χρησιμοποιείται για τον ορισμό διαμορφώσεων διακομιστή.
Αρχιτεκτονική Tempo
Το παραπάνω διάγραμμα δείχνει την αρχιτεκτονική εργασίας του Grafana Tempo.
Πρώτον, ο διανομέας λαμβάνει διαστήματα σε διαφορετικές μορφές από τα Zipkin, Jaeger, OpenTelemetry, OpenCensus και στέλνει αυτά τα εύρη στους χρήστες κατακερματίζοντας το αναγνωριστικό ίχνους. Στη συνέχεια, ο Ingester δημιουργεί παρτίδες ιχνών που ονομάζονται μπλοκ.
Στη συνέχεια, στέλνει αυτά τα μπλοκ στον χώρο αποθήκευσης backend (S3/GCS). Όταν έχετε ένα αναγνωριστικό ίχνους που θέλετε να αντιμετωπίσετε, θα χρησιμοποιήσετε το Grafana UI και θα τοποθετήσετε το αναγνωριστικό ίχνους στη γραμμή αναζήτησης. Τώρα το Querier είναι υπεύθυνο για τη λήψη των λεπτομερειών είτε από τον αποθηκευτικό χώρο είτε από την αποθήκευση αντικειμένων σχετικά με το αναγνωριστικό ίχνους που εισαγάγατε.
Πρώτον, ελέγχει εάν αυτό το αναγνωριστικό ίχνους υπάρχει στον απορροφητή. αν δεν το βρει, τότε ελέγχει το backend αποθήκευσης. Χρησιμοποιεί ένα απλό τελικό σημείο HTTP για να αποκαλύψει τα ίχνη. Εν τω μεταξύ, ο συμπιεστής παίρνει τα μπλοκ από το χώρο αποθήκευσης, τα συνδυάζει και τα στέλνει πίσω στο χώρο αποθήκευσης για να μειώσει τον αριθμό των μπλοκ στον χώρο αποθήκευσης.
Ρυθμίστε το Tempo χρησιμοποιώντας το Docker
Σε αυτήν την ενότητα, θα ρυθμίσω το Grafana Tempo βήμα προς βήμα χρησιμοποιώντας το Docker. Πρώτον, χρειάζεστε ένα σύστημα υποστήριξης Tempo, επομένως δημιουργήστε ένα δίκτυο docker.
[[email protected] ~]$ docker network create docker-tempo
Κάντε λήψη του αρχείου διαμόρφωσης Tempo.
[[email protected] ~]$ curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml
Παρακάτω είναι η λίστα των επιλογών πρωτοκόλλου που λαμβάνετε:
Πρωτόκολλο
Λιμάνι
Ανοιχτή Τηλεμετρία
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift Binary
6832
Jaeger – Thrift HTTP
14268
Jaeger – GRPC
14250
φερμουάρ
9411
Χρησιμοποιώντας το αρχείο διαμόρφωσης τέμπο, εκτελέστε ένα κοντέινερ docker. Εδώ επιλέγω Jaeger – Μορφή Thrift Compact (θύρα 6831) για αποστολή των ιχνών.
[[email protected] ~]$ docker run -d --rm -p 6831:6831/udp --name tempo -v $(pwd)/tempo-local.yaml:/etc/tempo-local.yaml --network docker-tempo grafana/tempo:latest -config.file=/etc/tempo-local.yaml
Τώρα πρέπει να εκτελέσετε ένα κοντέινερ ερωτήματος Tempo. Επομένως, πρώτα, κατεβάστε το αρχείο διαμόρφωσης ερωτήματος tempo.
[[email protected] ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml
Χρησιμοποιώντας το αρχείο διαμόρφωσης ερωτήματος tempo, εκτελέστε ένα κοντέινερ docker.
[[email protected] ~]$ docker run -d --rm -p 16686:16686 -v $(pwd)/tempo-query.yaml:/etc/tempo-query.yaml --network docker-tempo grafana/tempo-query:latest --grpc-storage-plugin.configuration-file=/etc/tempo-query.yaml
Τώρα το Jaeger UI θα είναι προσβάσιμο στο http://localhost:16686, όπως φαίνεται παρακάτω.
Στη γραμμή αναζήτησης, μπορείτε να προσθέσετε το αναγνωριστικό ίχνους από ένα αρχείο καταγραφής που θέλετε να αντιμετωπίσετε και θα δημιουργήσει τα ίχνη για εσάς.
Εκτέλεση μιας εφαρμογής επίδειξης στο Tempo
Ήρθε η ώρα να εκτελέσετε ένα παράδειγμα επίδειξης που δίνει η Grafana Tempo. Θα εκτελέσω ένα παράδειγμα docker-compose, οπότε αν δοκιμάζετε το ίδιο, πρέπει να έχετε εγκαταστήσει το docker-compose στον υπολογιστή σας.
Κατεβάστε το αρχείο zip Grafana Tempo: https://github.com/grafana/tempo
Εξαγάγετε τον στον αρχικό φάκελο και μεταβείτε στον κατάλογο docker-compose. Θα βρείτε πολλά παραδείγματα docker-compose. Χρησιμοποιώ το παράδειγμα όπου τα δεδομένα μιας εφαρμογής αποθηκεύονται τοπικά.
[[email protected] ~]$ cd tempo-master/example/docker-compose/ [[email protected] docker-compose]$ ls docker-compose.loki.yaml docker-compose.s3.minio.yaml docker-compose.yaml etc example-data readme.md tempo-link.png
Εκτελέστε την παρακάτω εντολή για να ξεκινήσετε τη στοίβα.
[[email protected] docker-compose]$ docker-compose up -d Starting docker-compose_prometheus_1 ... done Starting docker-compose_tempo_1 ... done Starting docker-compose_grafana_1 ... done Starting docker-compose_tempo-query_1 ... done Starting docker-compose_synthetic-load-generator_1 ... done
Μπορείτε να δείτε, έχει ξεκινήσει κοντέινερ για Grafana, Loki, Tempo, Tempo-query και Prometheus.
[[email protected] docker-compose]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 84cd557ce07b grafana/tempo-query:latest "/go/bin/query-linux…" 10 minutes ago Up 4 seconds 0.0.0.0:16686->16686/tcp docker-compose_tempo-query_1 f7cd9cf460d9 omnition/synthetic-load-generator:1.0.25 "./start.sh" 10 minutes ago Up 4 seconds docker-compose_synthetic-load-generator_1 6d9d9fbdb8f1 grafana/grafana:7.3.0-beta1 "/run.sh" 10 minutes ago Up 6 seconds 0.0.0.0:3000->3000/tcp docker-compose_grafana_1 d8574ea25028 grafana/tempo:latest "/tempo -config.file…" 10 minutes ago Up 6 seconds 0.0.0.0:49173->3100/tcp, 0.0.0.0:49172->14268/tcp docker-compose_tempo_1 5f9e53b5a09c prom/prometheus:latest "/bin/prometheus --c…" 10 minutes ago Up 6 seconds 0.0.0.0:9090->9090/tcp docker-compose_prometheus_1
Μπορείτε επίσης να μεταβείτε στο πρόγραμμα περιήγησής σας και να επαληθεύσετε εάν εκτελούνται τα Grafana, Jaeger UI, Prometheus.
Τώρα η γεννήτρια συνθετικού φορτίου που λειτουργεί μέσα σε ένα κοντέινερ δημιουργεί αναγνωριστικά ίχνους τα οποία τοποθετεί μέσα στο ρυθμό. Εκτελέστε την παρακάτω εντολή και μπορείτε να προβάλετε τα αρχεία καταγραφής.
[[email protected] docker-compose]$ docker-compose logs -f synthetic-load-generator Attaching to docker-compose_synthetic-load-generator_1 synthetic-load-generator_1 | using params: --jaegerCollectorUrl http://tempo:14268 synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /product, 2880 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /cart, 14400 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /checkout, 480 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 17867942c5e161f2 for service frontend route /currency synthetic-load-generator_1 | 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 3d9cc23c8129439f for service frontend route /shipping synthetic-load-generator_1
Αυτά είναι τα αναγνωριστικά ίχνους που πρέπει να περάσετε για να δημιουργήσετε ίχνη.
Αντιγράφω ένα από τα αναγνωριστικά ίχνους και το βάζω στη γραμμή αναζήτησης του Jaeger UI.
Μπορείτε να δείτε ότι έχει δημιουργήσει με επιτυχία τα ίχνη που σχετίζονται με το αναγνωριστικό ίχνους που παρείχα.
συμπέρασμα
Αυτό λοιπόν αφορούσε το Grafana Tempo. Συνεχίστε και αρχίστε να χρησιμοποιείτε το Tempo για να δημιουργήσετε ίχνη για να κατανοήσετε λεπτομερώς τις μετρήσεις και τα ζητήματα στα αρχεία καταγραφής σας.
Όλα αποτυπώνονται στο Tempo και δεν θα χάσετε καμία λεπτομέρεια λόγω του downsampling, που συνέβαινε νωρίτερα. Το Tempo είναι απλό για έναν προγραμματιστή ή ομάδα παραγωγής να κατανοήσει τη βασική αιτία των σφαλμάτων ή των προειδοποιήσεων που ενδέχεται να προκύψουν στα αρχεία καταγραφής.