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

Модуль 04 / Урок 15 из 27

Поиск трейсов в Jaeger UI

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

Поиск — то, чем вы будете пользоваться чаще всего. Правильно составленный запрос находит инцидент за минуты; неправильный — «ничего не находит» и подрывает доверие к трассировке.

Поля поиска

ПолеЧто значитПример
Serviceобязательное; чей трейс ищемorders
Operationсужение по операции (endpoint)POST /orders
Tagsфильтр по атрибутам спановorder.id=1001, http.response.status_code=500
Min/Max Durationпорог длительности трейсаmin 500ms — найти медленные
Time rangeокно временипоследние 15 минут вокруг инцидента
Limitсколько результатов вернуть20–100

Отдельно — поиск по Trace ID: поле слева вверху UI. Скопировали ID из лога/алерта — попали в точный трейс, минуя фильтры. Это самый быстрый путь в расследовании.

Теги в поиске: тонкости

  • Формат — key=value; значение без кавычек;
  • Ищутся по всем спанам трейса, не только корневому: тег на самом глубоком спане найдёт трейс;
  • Числа/булевы — как записаны в атрибутах (retry.count=3);
  • Несколько тегов = логическое И;
  • Поддержка wildcard-ов ограничена и зависит от хранилища: ES шустрее по произвольным тегам, Cassandra — по индексируемым.
💡 Тактика: сначала широкий запрос (сервис + время), затем добавляйте ограничители. Если «ничего не найдено» — проверьте окно времени (UTC vs локальное!) и сервис. 50% «не работает поиск» — это часовой пояс.

Поиск «медленных» и «ошибочных»

  • Медленные: Service + Min Duration 1s + сортировка по времени. Сразу видна серия тяжёлых запросов;
  • Ошибочные: тег error=true (стандартная конвенция OTel: статус ERROR отображается флагом) или http.response.status_code=5xx по частям;
  • Нужный пользователь: если вы клали user.id в атрибуты (урок 2.1) — поиск по тегу найдёт все запросы пользователя.

Что ограничивает поиск

  • Retention: найдётся только то, что не вычищено (урок 5.3);
  • Сэмплирование: трейс, не прошедший сэмплинг, не существует для поиска — не путайте с «потерей»;
  • Карточность: запросы по тегам с миллионами значений — медленные (и это ваш сигнал пересмотреть дизайн атрибутов);
  • Хранилище: глубокая пагинация и широкие окна — дорогие запросы; для старта берите узкие окна и Limit 20.

Программный доступ: query API

# UI — лишь оболочка над HTTP API:
curl "http://localhost:16686/api/traces?service=orders&start=1717000000000000&
end=1717003600000000&operation=POST%20/orders&limit=20"

# Трейс по ID:
curl "http://localhost:16686/api/traces/<trace-id>"

API используют скрипты и боты: «вытаскивай трейсы с error=true за последний час и шлёт сводку в Slack». Время — в микросекундах Unix.

Практика

  1. На стенде из 3.5 найдите: (а) все трейсы с ошибкой; (б) трейсы медленнее 300 мс; (в) трейс по order.id.
  2. Возьмите trace_id из лога приложения и найдите трейс полем Trace ID — отработайте цикл «лог → трейс».
  3. Напишите curl-скрипт «топ-10 медленных трейсов за час» и запустите по крону — это прототип SPM-дашборда (урок 5.4).
  4. Поставьте фильтр времени на окно «вчера 14:00–14:10» и убедитесь, что пустой результат при переключении UTC/локального времени меняется — запомните эту ловушку.
Мини-квиз

1. Тег указан на спане БД глубоко в трейсе. Найдётся ли поиском? — Да: поиск покрывает все спаны трейса.

2. Самый быстрый путь к трейсу при инциденте? — Trace ID из лога/алерта.

3. Поиск «ничего не нашёл» — три первые проверки? — Окно времени и часовой пояс, правильный service.name, сэмплирование/retention.