Unable to Query the Required Trace
Содержание
Problem Description
При выполнении запроса трассировочного следа в сервисной сетке могут возникать ситуации, когда целевой трассировочный след не удаётся получить.
Root Cause Analysis
1. Trace Sampling Rate Configured Too Low
Когда параметр частоты выборки трассировок установлен слишком низко, система будет собирать данные трассировки пропорционально. В периоды недостаточного объёма запросов или в часы низкой нагрузки это может привести к тому, что выборочные данные окажутся ниже порога видимости.
2. Elasticsearch Real-Time Limitations
Конфигурация индекса Elasticsearch по умолчанию содержит "refresh_interval": "10s", что приводит к задержке в 10 секунд перед обновлением данных из буфера памяти в состояние, доступное для поиска. При запросе недавно сгенерированных трассировок результаты могут отсутствовать, так как данные ещё не были сохранены.
Данная конфигурация индекса эффективно снижает нагрузку на слияние данных в Elasticsearch, улучшая скорость индексирования и скорость первого запроса, но при этом в некоторой степени снижает актуальность данных в реальном времени.
3. Improper Query Condition Settings
При выполнении запросов трассировок, если технические принципы параметра Span kind недостаточно понятны, это может привести к отсутствию возвращаемых данных. Поэтому не рекомендуется использовать этот параметр произвольно. Особенно при одновременном указании Client и Server результат запроса может быть пустым.
Example 1: Span kind set to Root Span with both Client and Server specified
В этом случае запрос вернёт пустой результат. Причина в том, что когда и клиент, и сервер управляются OTel Agent, корневой спан трассировки обычно находится на стороне клиента, и данные сервера не будут получены. Для решения удалите условие Server или избегайте выбора Root Span.
Example 2: Span kind set to Service Entry Span with both Client and Server specified
Аналогично, этот запрос также вернёт пустой результат. Причина в том, что когда и клиент, и сервер имеют внедрённый Sidecar, Service Entry Span относится к первому запросу, полученному сервером, но данные трассировки хранятся на стороне клиента. Для решения удалите условие Client или избегайте выбора Service Entry Span.
Solution for Root Cause 1
- Соответственно увеличьте частоту выборки в зависимости от требований.
- Используйте более продвинутые методы выборки, такие как tail sampling.
Solution for Root Cause 2
Отрегулируйте интервал обновления через параметр запуска --es.asm.index-refresh-interval компонента jaeger-collector, значение по умолчанию — 10s.
Если значение этого параметра равно "null", конфигурация refresh_interval для индекса отсутствует.
Примечание: Установка значения "null" повлияет на производительность и скорость запросов Elasticsearch.
Solution for Root Cause 3
При использовании параметра Span kind в запросах трассировок:
- Избегайте одновременного использования условий
ClientиServer - Для запросов
Root Span:- Удалите условие
Server, если присутствуют и клиент, и сервер - Или избегайте выбора
Root Span, если нужны данные со стороны сервера
- Удалите условие
- Для запросов
Service Entry Span:- Удалите условие
Client, если присутствуют и клиент, и сервер - Или избегайте выбора
Service Entry Span, если нужны данные со стороны клиента
- Удалите условие