Jaeger — «бэкенд с подключаемым хранилищем». Выбор хранилища определяет стоимость, скорость поиска и операционную сложность. Разбираем все варианты и критерии выбора.
Обзор вариантов
| Хранилище | Суть | Когда выбирать |
|---|---|---|
| in-memory | всё в RAM процесса (all-in-one) | дев, демо; теряется при рестарте |
| Badger | встроенный KV-движок, файлы на диске | одиночный узел с персистентностью: малые команды, edge |
| Cassandra | ширококолончатая NoSQL, оригинальный прод-вариант Uber | огромные объёмы записи, есть команда Cassandra |
| Elasticsearch / OpenSearch | документный поиск: мощный поиск по любым тегам | самый частый прод-выбор; уже есть ES-кластер |
| ClickHouse | колоночная аналитическая БД (плагин) | аналитика по трейсам, дешёвое хранение больших объёмов |
| gRPC plugin | любое своё хранилище через плагин | нестандартные требования |
Как устроен поиск в хранилище
Запрос в UI — «трейсы сервиса X за окно T, с тегом A, длительностью > N мс». Хранилище ищет по индексам (сервис, операция, теги, время) список подходящих trace ID, затем вычитывает сами трейсы:
- ES: каждый трейс — документ(ы), поиск — по инвертированным индексам;
- Cassandra: таблицы-индексы (по сервису, по тегу) → trace_id → таблица трейсов;
- Отсюда правило: высококардинарные теги индексировать дорого — по ним поиск медленный и хранилище пухнет (см. урок 5.3).
Критерии выбора
- Объёмы: ГБ/сутки после сэмплирования (математика — урок 5.3);
- Тип поиска: «по сервису и времени» (достаточно Cassandra) против «по произвольным тегам» (ES/CH комфортнее);
- Что уже эксплуатируете: второй кластер БД — большая цена; если есть ES — берите ES;
- Retention: ES/Cassandra — понятные механизмы удаления; Badger — общий лимит;
- Аналитика: если хочется агрегатов по трейсам (p99 по тегам) — ClickHouse сильнее.
Пример: all-in-one с ES
docker run -d --name jaeger \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://elasticsearch:9200 \
-p 16686:16686 jaegertracing/all-in-one:latest
В v2 то же самое выражается конфигом OTel-стиля (exporter/extension storage), но понятия прежние: тип хранилища + адреса + креды.
⚠️ Не используйте in-memory «временно» в проде: рестарт = потеря всей истории, память процесса — потолок данных. Badger — минимально приемлемый вариант для одиночного узла.
Практика
- Поднимите all-in-one с Badger (
SPAN_STORAGE_TYPE=badger+ volume) и убедитесь, что трейсы переживают рестарт контейнера. - Поднимите Elasticsearch в docker и перенастройте Jaeger на него; сравните скорость поиска по тегам.
- Найдите в документации Jaeger раздел по вашему выбранному хранилищу и выпишите его параметры тюнинга (batch size, индексы, TTL).
Мини-квиз
1. Почему ES — самый популярный прод-выбор? — Мощный поиск по произвольным тегам + привычная эксплуатация + retention-инструменты.
2. Чем плохи высокие кардинальные теги? — Раздутые индексы и медленный поиск; хранилище платит за каждое уникальное значение.
3. Когда ClickHouse осмысленно? — Когда нужны аналитические запросы по трейсам и дешёвое хранение больших объёмов.