Нека научим основите на 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 ви дава възможност за по-бързо отстраняване на грешки/отстраняване на неизправности, като ви позволява бързо да преминете от показатели към съответните следи на конкретни регистрационни файлове, които са записали някои проблеми.
По-долу са опциите за конфигурация, използвани в 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
По-долу е списъкът с опциите на протокола, които получавате:
протокол
Порт
Отворете телеметрията
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 работят.
Сега генераторът на синтетично натоварване, работещ вътре в контейнер, генерира идентификатори на проследяване, които поставя в темпото. Изпълнете командата по-долу и можете да видите регистрационните файлове.
[[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 е лесен за разработчици или производствени екипи, за да разберат основната причина за грешките или предупрежденията, които могат да възникнат в регистрационните файлове.