Распространённые проблемы при запросах трассировок

Содержание

Почему я не могу найти нужные данные трассировки?

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

Если уровень выборки трассировок в вашем Service Mesh установлен слишком низко, вы можете видеть данные трассировок только при достаточном объёме запросов.

Вы можете увеличить уровень выборки в зависимости от ваших потребностей.

2. Запрос очень свежих данных трассировки

При запросе данных трассировки за недавний период (например, за последние 30 минут), если результаты трассировки не включают данные за последние 10 секунд, это нормально. Вы можете подождать немного и обновить страницу, чтобы попробовать снова.

Это связано с тем, что данные трассировки хранятся в Elasticsearch, который обеспечивает поиск с близкой к реальному времени задержкой.

Кроме того, ASM настраивает индекс трассировок в Elasticsearch с параметром по умолчанию "refresh_interval": "10s", что означает, что Elasticsearch обновляет данные из памяти на диск каждые 10 секунд, после чего данные становятся доступными для поиска.

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

Вы можете изменить эту настройку с помощью параметра запуска --es.asm.index-refresh-interval для jaeger-collector. Значение по умолчанию — 10s.

Если этот параметр установлен в "null", параметр refresh_interval для индекса не будет настроен.

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. Данные трассировки за текущий период неполные

При запросе данных трассировки за недавний период (например, за последние 30 минут), если спаны внутри трассировок неполные, это нормально. Вы можете подождать немного и обновить страницу, чтобы попробовать снова.

Это происходит потому, что в момент обновления Elasticsearch последних спанов на диск некоторые спаны могут ещё не быть сгенерированы или записаны на диск, что приводит к неполным результатам трассировки.

2. Неполные трассировки для спанов с длительным временем выполнения

Если запрошенные трассировки имеют длительную продолжительность (например, более часа), может быть возвращена неполная информация, что является нормальным.

По умолчанию, когда ASM запрашивает трассировки для спана, временной диапазон расширяется на один час до и после времени начала и окончания спана.

Например, если спан начинается в 08:12:30 и заканчивается в 08:12:32 , временной диапазон запроса для этой трассировки будет с 07:12:30 до 09:12:32 .

Таким образом, если трассировка длится более часа, запрос по этому спану может не вернуть полную трассировку.

Если в вашей среде трассировки обычно имеют более длительную продолжительность, вы можете настроить временной диапазон запроса для отдельных трассировок с помощью параметра запуска --es.asm.span-trace-query-time-adjustment-hours для jaeger-query.

Значение по умолчанию для этого параметра — один час, но вы можете увеличить его при необходимости.