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

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

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

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

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

Что такое Графана Темпо?

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

Grafana Tempo — это распределенный сервер отслеживания с открытым исходным кодом, который легко масштабируется и прост в использовании. Tempo полностью совместим с другими протоколами отслеживания, такими как Zipkin, Jaeger, OpenTelemetri и OpenCensus. В настоящее время он поддерживает механизм обнаружения Tempo в Loki, платформы мониторинга, такие как Prometheus и Grafana. Grafana 7.3+ обеспечивает беспроблемное взаимодействие между Grafana и Tempo.

Зачем использовать темп?

Tempo используется для связывания метрик, трассировок и журналов. Бывают ситуации, когда пользователь получает один и тот же тип ошибки несколько раз. Если я хочу понять, что происходит, мне придется искать точные улики. Но из-за понижения дискретизации некоторая ценная информация, которую я, возможно, искал, будет потеряна. С Tempo теперь нам не нужно понижать дискретизацию распределенных данных трассировки. Мы можем хранить полную трассировку в объектном хранилище, таком как S3 или GCS, что делает Tempo очень экономичным.

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

Ниже приведены параметры конфигурации, используемые в Tempo.

  • Распространитель: используется для настройки параметров получения для получения диапазонов и последующей отправки их получателям.
  • Ingester: они используются для создания групп треков и отправки их в TempoDB для хранения.
  • Компактор: выделяет блоки из хранилища, такого как S3 или GCS, объединяет их и записывает обратно в хранилище.
  • Хранилище: используется для настройки TempoDB. Вы должны указать имя внутреннего хранилища (S3 или GCS) с другими параметрами в этой конфигурации.
  • Список участников: используется для координации между компонентами Tempo.
  • Аутентификация/сервер: Tempo использует сервер Weaveworks/Common. Он используется для настройки конфигурации сервера.

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

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

Сначала дистрибьютор получает диапазоны в различных форматах от Zipkin, Jaeger, OpenTelemetri, OpenCensus и отправляет эти диапазоны инжесторам, хешируя идентификатор отслеживания. Затем приемник создает группы треков, называемые блоками.

Затем он отправляет эти блоки в серверное хранилище (S3/GCS). Получив идентификатор отслеживания, который вы хотите разрешить, вы будете использовать пользовательский интерфейс Grafana и поместить идентификатор отслеживания в строку поиска. Теперь курьер отвечает за получение сведений о введенном вами идентификаторе отслеживания либо от получателя, либо от хранилища объектов.

Во-первых, он проверяет, присутствует ли этот идентификатор трассировки в приемнике; если не находит, то проверяет фон памяти. Он использует простую конечную точку HTTP для предоставления трассировок. Тем временем компактор берет блоки из хранилища, объединяет их и отправляет обратно в хранилище, чтобы уменьшить количество блоков в хранилище.

Установите темп с помощью 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
Джагер – GRPC
14250
Зипкин
9411

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

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

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

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

Заключение

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

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

Поделиться в соцсетях