Ξεκινώντας με το Grafana Tempo

Ας μάθουμε τα βασικά στοιχεία του 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 πολύ οικονομικό.

  6 διαδικτυακά μαθήματα σχεδίου για να γίνετε καλλιτέχνης

Επίσης, το 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 για να αποκαλύψει τα ίχνη. Εν τω μεταξύ, ο συμπιεστής παίρνει τα μπλοκ από το χώρο αποθήκευσης, τα συνδυάζει και τα στέλνει πίσω στο χώρο αποθήκευσης για να μειώσει τον αριθμό των μπλοκ στον χώρο αποθήκευσης.

  Ο απόλυτος οδηγός για τον καθαρισμό των Icky AirPods σας

Ρυθμίστε το 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.

  Τι είναι καλύτερο μεταξύ Romer G εναντίον Cherry MX;

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

[[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 είναι απλό για έναν προγραμματιστή ή ομάδα παραγωγής να κατανοήσει τη βασική αιτία των σφαλμάτων ή των προειδοποιήσεων που ενδέχεται να προκύψουν στα αρχεία καταγραφής.