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, если нужны данные с клиента