Распространённые проблемы при запросах трассировок
Содержание
Почему я не могу найти нужные данные трассировки?1. Слишком низкий коэффициент выборки трассировок2. Запрос очень свежих данных трассировки3. Неправильные настройки условий запросаПример 1:Span kind установлен в Root Span с указанием и Client, и ServerПример 2: Span kind установлен в Service Entry Span с указанием и Client, и ServerПочему запрошенные трассировки неполные?1. Данные трассировки за текущий период времени неполные2. Неполные трассировки для спанов с длительной продолжительностьюПочему я не могу найти нужные данные трассировки?
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.
Значение по умолчанию для этого параметра — один час, но вы можете увеличить его при необходимости.