Розглянемо основні аспекти Grafana Tempo, серверної частини, призначеної для розподіленого трасування.
Розподілене трасування є методом отримання глибокого розуміння продуктивності системи. Воно дозволяє візуалізувати шлях запиту через складну програму. Така програма може складатися з різних сервісів, що працюють на одній машині або розподілені між декількома.
Таким чином, застосовуючи розподілене трасування, можна отримати цілісне бачення всіх задіяних сервісів. Grafana Tempo ідеально підходить для цього.
Що таке Grafana Tempo?
На конференції ObservabilityCon цього року Grafana Labs представила ряд важливих оновлень, серед яких була Grafana Tempo. Компанія додала ще один проект з відкритим вихідним кодом до свого портфоліо – 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/Common server. Він призначений для налаштування конфігурації сервера.
Архітектура Tempo
Схема вище демонструє архітектуру роботи Grafana Tempo.
Розповсюджувач отримує діапазони в різних форматах від Zipkin, Jaeger, OpenTelemetry, OpenCensus та направляє ці діапазони користувачам, хешуючи ідентифікатор трасування. Далі Ingester створює пакети трасувань, відомі як блоки.
Потім ці блоки відправляються у внутрішнє сховище (S3/GCS). Якщо вам потрібно знайти певне трасування, використовуйте інтерфейс Grafana та введіть ідентифікатор трасування у рядку пошуку. Запитувач відповідає за отримання деталей про потрібний ідентифікатор трасування з системи прийому або зі сховища об’єктів.
Спочатку перевіряється наявність ідентифікатора трасування в приймальнику; якщо його там немає, запит надсилається до системи зберігання. Для пошуку слідів використовується простий HTTP-запит. Тим часом компактор бере блоки зі сховища, об’єднує їх та відправляє назад у сховище, зменшуючи кількість блоків у ньому.
Налаштування Tempo за допомогою Docker
У цьому розділі крок за кроком буде показано, як налаштувати Grafana Tempo з використанням Docker. Перш за все, нам потрібен бекенд Tempo, тому створимо мережу Docker.
docker network create docker-tempo
Завантажте файл конфігурації Tempo.
curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml
Список доступних протоколів:
Протокол | Порт |
OpenTelemetry | 55680 |
Jaeger – Thrift Compact | 6831 |
Jaeger – Thrift Binary | 6832 |
Jaeger – Thrift HTTP | 14268 |
Jaeger – GRPC | 14250 |
Zipkin | 9411 |
Запустіть контейнер Docker, використовуючи файл конфігурації tempo. Тут ми оберемо формат Jaeger – Thrift Compact (порт 6831) для відправки трасувань.
docker run -d --rm -p 6831:6831/udp --name tempo -v $(pwd)/tempo.yaml:/etc/tempo.yaml --network docker-tempo grafana/tempo:latest -config.file=/etc/tempo.yaml
Тепер необхідно запустити контейнер запитів Tempo. Спочатку завантажте файл конфігурації запитів Tempo.
curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml
Запустіть контейнер Docker, використовуючи файл конфігурації запитів Tempo.
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. Я використовую приклад, де дані програми зберігаються локально.
cd tempo-master/example/docker-compose/
ls
Виконайте наведену нижче команду, щоб запустити стек.
docker-compose up -d
Ви побачите, що запустилися контейнери для Grafana, Loki, Tempo, Tempo-query та Prometheus.
docker ps
Ви також можете відкрити браузер і перевірити, чи працюють Grafana, Jaeger UI, Prometheus.
Генератор синтетичного навантаження, що працює у контейнері, генерує ідентифікатори трасування та відправляє їх у Tempo. Виконайте наведену команду, щоб переглянути журнали.
docker-compose logs -f synthetic-load-generator
Це ідентифікатори трасування, які можна використати для створення трасувань.
Скопіюйте один з ідентифікаторів трасування та вставте його у панель пошуку Jaeger UI.
Ви побачите успішно згенероване трасування для наданого ідентифікатора.
Висновок
Це все, що потрібно знати про Grafana Tempo. Почніть використовувати Tempo для створення трасувань, щоб отримати детальне розуміння метрик та проблем у ваших логах.
У Tempo фіксується все, і ви не пропустите жодну деталь через зменшення роздільної здатності. Tempo є простим інструментом для розробників або виробничих команд, що дозволяє швидко знаходити першопричини помилок або попереджень, які можуть з’являтися в журналах.