Распределённое трассирование и Service Mesh
Содержание
Создание приложений с поддержкой передачи контекста трассировкиНастройка платформы распределённого трассирования с Service MeshНастройка сбора данных распределённого трассирования с Service MeshСоздание приложений с поддержкой передачи контекста трассировки
Хотя прокси Istio могут автоматически отправлять спаны, для объединения этих спанов в единую трассу требуется дополнительная информация. Приложения должны передавать эту информацию в HTTP-заголовках, чтобы при отправке спанов прокси бэкенд мог объединить их в одну трассу.
Для этого каждое приложение должно собирать заголовки из каждого входящего запроса и пересылать их во все исходящие запросы, вызванные этим входящим запросом. Выбор заголовков для пересылки зависит от настроенного бэкенда трассировки. Ниже приведено краткое описание:
Все приложения должны пересылать следующие заголовки:
x-request-id: заголовок, специфичный для Envoy, используемый для последовательного выборочного логирования и трассировки.traceparentиtracestate: стандартные заголовки W3C
Для других инструментов наблюдаемости обращайтесь к их документации.
Настройка платформы распределённого трассирования с Service Mesh
Alauda Service Mesh поддерживает распределённое трассирование через интеграцию со следующими компонентами:
-
Alauda Build of Jaeger: кастомизированное дистрибутивное решение на базе открытого проекта Jaeger. Обеспечивает сквозную видимость запросов в сложных распределённых системах.
-
Alauda Build of OpenTelemetry: основан на проекте OpenTelemetry, упрощает сбор телеметрических данных по метрикам, логам и трассам, управляя OpenTelemetry Collector и инструментированием нагрузок.
OpenTelemetry Collector выступает посредником для телеметрических сигналов. Он поддерживает несколько форматов данных и предоставляет стандартизированный конвейер для обработки и экспорта телеметрии в бэкенды, такие как Jaeger.
Настройка сбора данных распределённого трассирования с Service Mesh
Вы можете интегрировать Alauda Service Mesh с OpenTelemetry для инструментирования, генерации, сбора и экспорта трасс, метрик и логов OpenTelemetry, чтобы анализировать и понимать производительность и поведение вашего ПО.
Требования
- Alauda Build of Jaeger установлен.
- Alauda Build of OpenTelemetry установлен.
- Создан экземпляр Istio.
- Создан экземпляр Istio CNI.
Процедура
Пометьте пространство имён istio-system меткой проекта:
Установите экземпляр Jaeger в пространстве имён istio-system.
Обратитесь к скрипту установки в Развёртывание экземпляра Jaeger и используйте пример команды ниже для развертывания выделенного для Istio Jaeger:
Параметр --jaeger-es-index-prefix задаёт префикс индекса в Elasticsearch, где хранятся данные трассировки.
- Для одно-кластерной service mesh рекомендуется заканчивать префикс именем кластера, например
istio-tracing-cluster-1. - Для мультикластерной service mesh трассы всех кластеров должны храниться в одном индексе; рекомендуется заканчивать префикс meshID, например
istio-tracing-mesh-1.
После успешной установки вы сможете получить доступ к UI Jaeger для запроса трасс по адресу <platform-url>/clusters/<cluster>/istio/jaeger.
Перейдите в Alauda Build of OpenTelemetry в OperatorHub и создайте OpenTelemetryCollector в пространстве имён istio-system.
Пример OpenTelemetry Collector в пространстве имён istio-system
- Поле
endpoint— это сервис коллектораJaegerв пространстве имёнistio-system.
Обновите ресурс Istio, чтобы включить трассировку и определить провайдера трассировки OpenTelemetry:
Пример: Включение трассировки через meshConfig
- Поле
service— это сервис коллектораOpenTelemetryв пространстве имёнistio-system.
Обновите ресурс Telemetry, чтобы включить провайдера трассировки, определённого в meshConfig:
Пример ресурса Istio Telemetry
После того как вы убедитесь, что видите трассы, уменьшите значение randomSamplingPercentage, чтобы сократить количество запросов.