Невозможно выполнить запрос требуемого трассирования
Содержание
Описание проблемыАнализ причин1. Слишком низкий уровень выборки трассировки2. Ограничения Elasticsearch в режиме реального времени3. Неправильные настройки условий запросаПример 1:Span kind установлен в Root Span с одновременным указанием Client и ServerПример 2: Span kind установлен в Service Entry Span с одновременным указанием Client и ServerРешение для причины 1Решение для причины 2Решение для причины 3Описание проблемы
При выполнении запроса трассировки в сервисной сетке могут возникать ситуации, когда целевая трассировка не может быть получена.
Анализ причин
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, если нужны данные со стороны клиента
- Удалите условие