Початок роботи з Grafana Tempo

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

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

Таким чином, використовуючи розподілене трасування, ви можете отримати консолідоване уявлення про всі служби. І Grafana Tempo — це все.

Що таке Grafana Tempo?

На конференції ObservabilityCon цього року було кілька важливих оновлень від Grafana Labs, і 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 дає змогу швидше налагоджувати/виправляти неполадки, дозволяючи швидко переходити від показників до відповідних трасувань конкретних журналів, у яких зафіксовано деякі проблеми.

  Чи можуть хости Zoom дійсно бачити всі ваші особисті повідомлення?

Нижче наведено параметри конфігурації, які використовуються в Tempo.

  • Розповсюджувач: вони використовуються для налаштування параметрів отримання для отримання діапазонів, а потім надсилання їх користувачам.
  • Ingester: вони використовуються для створення пакетів трасувань і надсилання їх до TempoDB для зберігання.
  • Компактор: він передає блоки зі сховища, наприклад S3 або GCS, об’єднує їх і записує назад у сховище.
  • Зберігання: використовується для налаштування TempoDB. У цій конфігурації потрібно вказати назву серверної частини сховища (S3 або GCS) разом з іншими параметрами.
  • Список учасників: використовується для координації між компонентами Tempo.
  • Автентифікація/Сервер: Tempo використовує Weaveworks/Загальний сервер. Він використовується для встановлення конфігурацій сервера.

Tempo Architecture

Наведена вище схема показує робочу архітектуру Grafana Tempo.

По-перше, розповсюджувач отримує діапазони в різних форматах від Zipkin, Jaeger, OpenTelemetry, OpenCensus і надсилає ці діапазони користувачам, хешуючи ідентифікатор трасування. Потім Ingester створює пакети трасувань, які називаються блоками.

Потім він надсилає ці блоки до внутрішнього сховища (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

Нижче наведено список доступних вам параметрів протоколу:

  Як автоматично відновити файли в Photoshop

Протокол
Порт
Відкрийте телеметрію
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift Binary
6832
Jaeger – Thrift HTTP
14268
Єгер – 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-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.

  Як створити контактну форму для веб-сайту за допомогою Google Forms

Тепер генератор синтетичного навантаження, що працює всередині контейнера, генерує ідентифікатори трасування, які він розміщує всередині темпу. Виконайте наведену нижче команду, і ви зможете переглянути журнали.

[[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 все фіксується, і ви не пропустите жодної деталі через зниження роздільної здатності, яке траплялося раніше. Tempo є простим для розробників або виробничої групи, щоб зрозуміти першопричину помилок або попереджень, які можуть виникнути в журналах.