Първи стъпки с Grafana Tempo

Нека научим основите на Grafana Tempo, бекенд за разпределено проследяване.

Разпределеното проследяване е начинът да получите фина информация за производителността на системата. Това е начин за визуализиране на жизнения цикъл на заявка, преминаваща през приложението. Приложението може да се състои от множество услуги, присъстващи на един възел или разпределени между възли.

Така че, като използвате разпределено проследяване, можете да получите консолидиран изглед на всички услуги. И Grafana Tempo е всичко за това.

Какво е Grafana Tempo?

Имаше някои големи актуализации от Grafana Labs на конференцията ObservabilityCon тази година и Grafana Tempo беше една от тях. Grafana Labs добави още един проект, “Grafana Tempo,” към своето портфолио с отворен код.

Графана Темпо е бекенд за разпределено проследяване с отворен код, който е силно мащабируем и лесен за използване. Tempo е напълно съвместим с други протоколи за проследяване като Zipkin, Jaeger, OpenTelemetry и OpenCensus. В момента поддържа двигателя за откриване на данни Tempo в Loki, платформи за наблюдение като Prometheus и Grafana. Grafana 7.3+ предлага безпроблемно изживяване между Grafana и Tempo.

Защо да използвате Tempo?

Tempo се използва за корелация на показателите, следите и регистрационните файлове. Има ситуации, при които потребителят получава един и същ вид грешка няколко пъти. Ако искам да разбера какво се случва, ще трябва да погледна точните следи. Но поради намаляване на дискретизацията, някои ценни данни, които може би търся, биха се изгубили. С Tempo сега не е нужно да намаляваме дискретизацията на разпределени данни за проследяване. Можем да съхраняваме пълната следа в обектно хранилище като S3 или GCS, което прави Tempo много рентабилен.

Освен това Tempo ви дава възможност за по-бързо отстраняване на грешки/отстраняване на неизправности, като ви позволява бързо да преминете от показатели към съответните следи на конкретни регистрационни файлове, които са записали някои проблеми.

  Как да създавате анкети в iMessage групови чатове на iPhone и iPad

По-долу са опциите за конфигурация, използвани в Tempo.

  • Дистрибутор: Те се използват за конфигуриране на опциите за получаване, за да получават участъци и след това да ги изпращат до приемащите.
  • Ingester: Те се използват за създаване на партиди от следи и ги изпраща в TempoDB за съхранение.
  • Компактор: Той предава блокове от хранилището като S3 или GCS, комбинира ги и ги записва обратно в хранилището.
  • Съхранение: Това се използва за конфигуриране на TempoDB. Трябва да споменете името на бекенда за съхранение (S3 или GCS) с други параметри в тази конфигурация.
  • Списък с членове: Използва се за координация между компонентите на Tempo.
  • Удостоверяване/сървър: Tempo използва Weaveworks/общ сървър. Използва се за задаване на сървърни конфигурации.

Tempo Architecture

Горната диаграма показва работната архитектура на Grafana Tempo.

Първо, дистрибуторът получава обхвати в различни формати от Zipkin, Jaeger, OpenTelemetry, OpenCensus и изпраща тези обхвати на потребители чрез хеширане на ID на проследяване. След това Ingester създава партиди от следи, които се наричат ​​блокове.

След това изпраща тези блокове към резервното хранилище (S3/GCS). Когато имате идентификатор на проследяване, който искате да отстраните, ще използвате потребителския интерфейс на Grafana и ще поставите идентификатора на проследяване в лентата за търсене. Сега querier е отговорен за получаването на подробностите от хранилището за приемане или обект за идентификатора на проследяване, който сте въвели.

Първо, той проверява дали този идентификатор на проследяване присъства в инжестера; ако не го намери, след това проверява бекенда за съхранение. Той използва проста HTTP крайна точка, за да разкрие следите. Междувременно компакторът взема блоковете от хранилището, комбинира ги и ги изпраща обратно в хранилището, за да намали броя на блоковете в хранилището.

Настройте Tempo с помощта на Docker

В този раздел ще настроя Grafana Tempo стъпка по стъпка с помощта на Docker. Първо, имате нужда от бекенд на Tempo, така че настройте докер мрежа.

[[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

По-долу е списъкът с опциите на протокола, които получавате:

  Как да поправите грешката при удостоверяване на шлюза на AT&T U-verse

протокол
Порт
Отворете телеметрията
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift Binary
6832
Jaeger – Thrift HTTP
14268
Jaeger – GRPC
14250
Зипкин
9411

Използвайки файла за конфигуриране на темпото, стартирайте докер контейнер. Ето аз избирам Йегер – 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 контейнер за заявки. Затова първо изтеглете конфигурационния файл на заявката за темпо.

[[email protected] ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml

С помощта на конфигурационния файл на заявка за темпо стартирайте контейнер за докери.

[[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 ще бъде достъпен на http://localhost:16686, както е показано по-долу.

В лентата за търсене можете да добавите ИД на проследяване от регистрационен файл, който искате да отстраните, и той ще генерира следите вместо вас.

Стартиране на демо приложение на Tempo

Време е да стартираме демо пример, даден от Grafana Tempo. Ще стартирам пример за съставяне на docker, така че ако опитвате същото, трябва да имате инсталиран 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 работят.

  Sleep Better ви казва колко добре спите

Сега генераторът на синтетично натоварване, работещ вътре в контейнер, генерира идентификатори на проследяване, които поставя в темпото. Изпълнете командата по-долу и можете да видите регистрационните файлове.

[[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.

Можете да видите, че успешно е генерирал следите, свързани с идентификационния номер на проследяване, който предоставих.

Заключение

Така че това беше всичко за Grafana Tempo. Продължете и започнете да използвате Tempo, за да генерирате следи, за да разберете в детайли показателите и проблемите във вашите регистрационни файлове.

Всичко се улавя в Tempo и няма да пропуснете нито един детайл поради намаляване на семплирането, което се случваше по-рано. Tempo е лесен за разработчици или производствени екипи, за да разберат основната причина за грешките или предупрежденията, които могат да възникнат в регистрационните файлове.