Программа курса

Модуль 03 / Урок 12 из 27

Хранилища трейсов

Теория и практика

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 — минимально приемлемый вариант для одиночного узла.

Практика

  1. Поднимите all-in-one с Badger (SPAN_STORAGE_TYPE=badger + volume) и убедитесь, что трейсы переживают рестарт контейнера.
  2. Поднимите Elasticsearch в docker и перенастройте Jaeger на него; сравните скорость поиска по тегам.
  3. Найдите в документации Jaeger раздел по вашему выбранному хранилищу и выпишите его параметры тюнинга (batch size, индексы, TTL).
Мини-квиз

1. Почему ES — самый популярный прод-выбор? — Мощный поиск по произвольным тегам + привычная эксплуатация + retention-инструменты.

2. Чем плохи высокие кардинальные теги? — Раздутые индексы и медленный поиск; хранилище платит за каждое уникальное значение.

3. Когда ClickHouse осмысленно? — Когда нужны аналитические запросы по трейсам и дешёвое хранение больших объёмов.