Невозможно выполнить запрос к требуемому трассировочному следу

Содержание

Описание проблемы

При выполнении запроса трассировочного следа в сервисной сетке могут возникать ситуации, когда целевой трассировочный след не удаётся получить.

Анализ причин

1. Слишком низкий коэффициент выборки трассировок

Если параметр коэффициента выборки трассировок установлен слишком низко, система будет собирать данные трассировок пропорционально. В периоды недостаточного объёма запросов или в часы низкой нагрузки это может привести к тому, что выборочные данные окажутся ниже порога видимости.

2. Ограничения Elasticsearch по времени обновления

По умолчанию для индекса Elasticsearch установлено "refresh_interval": "10s", что приводит к задержке в 10 секунд перед обновлением данных из буфера памяти в состояние, доступное для поиска. При запросе недавно сгенерированных трассировок результаты могут отсутствовать, так как данные ещё не были сохранены.

Такая конфигурация индекса эффективно снижает нагрузку на слияние данных в Elasticsearch, улучшая скорость индексирования и скорость первого запроса, но в то же время снижает степень актуальности данных.

3. Некорректные настройки условий запроса

При выполнении запросов трассировок, если технические принципы параметра Span kind недостаточно понятны, это может привести к отсутствию возвращаемых данных. Поэтому не рекомендуется использовать этот параметр произвольно. Особенно при одновременном указании Client и Server результат запроса может быть пустым.

Пример 1: Span kind установлен в Root Span с указанием и Client, и Server

В этом случае запрос вернёт пустой результат. Причина в том, что при управлении и клиентом, и сервером через OTel Agent корневой спан трассировки обычно находится на стороне клиента, и данные сервера не будут получены. Для решения удалите условие Server или избегайте выбора Root Span.

Пример 2: Span kind установлен в Service Entry Span с указанием и Client, и Server

Аналогично, этот запрос также вернёт пустой результат. Причина в том, что при инъекции Sidecar и на клиенте, и на сервере, Service Entry Span относится к первому запросу, полученному сервером, но данные трассировки хранятся на стороне клиента. Для решения удалите условие Client или избегайте выбора Service Entry Span.

Решение для причины 1

  • Соответственно увеличьте коэффициент выборки в зависимости от требований.
  • Используйте более продвинутые методы выборки, например, tail sampling.

Решение для причины 2

Отрегулируйте интервал обновления через параметр запуска --es.asm.index-refresh-interval у jaeger-collector, значение по умолчанию — 10s.

Если значение параметра установлено в "null", конфигурация refresh_interval для индекса не применяется.

Примечание: Установка значения в "null" повлияет на производительность и скорость запросов Elasticsearch.

Решение для причины 3

При использовании параметра Span kind в запросах трассировок:

  • Избегайте одновременного использования условий Client и Server
  • Для запросов с Root Span:
    • Уберите условие Server, если присутствуют и клиент, и сервер
    • Или избегайте выбора Root Span, если нужны данные с сервера
  • Для запросов с Service Entry Span:
    • Уберите условие Client, если присутствуют и клиент, и сервер
    • Или избегайте выбора Service Entry Span, если нужны данные с клиента