Начало работы с Grafana Tempo

Опубликовано: 2021-04-19

Давайте изучим основы Grafana Tempo, серверной части распределенной трассировки.

Распределенная трассировка - это способ получить подробную информацию о производительности системы. Это способ визуализировать жизненный цикл запроса, проходящего через приложение. Приложение может состоять из нескольких служб, присутствующих на одном узле или распределенных по узлам.

Таким образом, используя распределенную трассировку, вы можете получить консолидированное представление обо всех услугах. И Grafana Tempo - все об этом.

Что такое Grafana Tempo?

В этом году на конференции ObservabilityCon было несколько важных обновлений от Grafana Labs, и Grafana Tempo была одной из них. Grafana Labs добавила еще один проект, «Grafana Tempo», в свое портфолио с открытым исходным кодом.

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 / общий сервер. Он используется для настройки конфигурации сервера.

Темп Архитектура

темповая архитектура

На приведенной выше диаграмме показана рабочая архитектура Grafana Tempo.

Во-первых, дистрибьютор получает промежутки в разных форматах от Zipkin, Jaeger, OpenTelemetry, OpenCensus и отправляет эти промежутки приемникам путем хеширования идентификатора трассировки. Затем 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 - экономичный компактный 6831
Jaeger - экономичный бинарный 6832
Jaeger - бережливость HTTP 14268
Jaeger - GRPC 14250
Зипкин 9411

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

 [[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 , как показано ниже.

jaeger ui - geekflare

В строке поиска вы можете добавить идентификатор трассировки из журнала, который вы хотите устранить, и он сгенерирует трассировки для вас.

traceid - новый

Запуск демонстрационного приложения в 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.

traceid

Вы можете видеть, что он успешно сгенерировал трассировки, связанные с предоставленным мной идентификатором трассировки.

Вывод

Вот и все о Grafana Tempo. Идите вперед и начните использовать Tempo для создания трассировок, чтобы подробно понять показатели и проблемы в ваших журналах.

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