Настройка платформы распределённой трассировки с Service Mesh
Alauda Service Mesh поддерживает распределённую трассировку за счёт интеграции со следующими компонентами:
-
Alauda Build of Jaeger v2: Настраиваемая дистрибуция на основе проекта с открытым исходным кодом Jaeger. Она обеспечивает сквозную видимость запросов в сложных распределённых системах. В v2 экземпляр Jaeger разворачивается как пользовательский ресурс
OpenTelemetryCollector, управляемый Alauda Build of OpenTelemetry v2 Operator. -
Alauda Build of OpenTelemetry v2: Основанный на проекте OpenTelemetry Operator управляет жизненным циклом как экземпляра Jaeger v2, так и OpenTelemetry Collector, который выступает перед ним.
OpenTelemetry Collector выступает в роли промежуточного компонента для сигналов телеметрии. Он поддерживает несколько форматов данных и предоставляет стандартизированный конвейер для обработки и экспорта телеметрии в backend-системы, такие как Jaeger.
Содержание
Настройка сбора данных распределённой трассировки с Service MeshУдаление distributed tracingУдаление конфигурации tracing для Service MeshУдаление OpenTelemetry Collector и Jaeger v2Настройка сбора данных распределённой трассировки с Service Mesh
Вы можете интегрировать Alauda Service Mesh с Alauda Distributed Tracing, развернув экземпляр Jaeger v2 и OpenTelemetry Collector, а затем настроив Istio на экспорт данных трассировки через них.
Экземпляр Jaeger v2 и OpenTelemetry Collector не являются специфичными для service mesh: одна пара Jaeger v2 и OpenTelemetry Collector (по умолчанию развёрнутая в пространстве имён jaeger-system) может обслуживать как Service Mesh, так и другие рабочие нагрузки в кластере. В этом разделе рассматривается только конфигурация, специфичная для Service Mesh; сведения о базовых шагах установки см. в документации Alauda Distributed Tracing.
Предварительные требования
-
Установлен Alauda Build of OpenTelemetry v2 Operator. См. Установка Alauda Build of OpenTelemetry v2 Operator.
-
Развёрнут экземпляр Jaeger v2. См. Развёртывание Alauda Build of Jaeger v2 с Elasticsearch или Развёртывание Alauda Build of Jaeger v2 с OpenSearch.
INFOПеременная
JAEGER_ES_INDEX_PREFIX, указанная в процедуре установки, определяет префикс индексов Elasticsearch, в которых хранятся данные трассировки. Значение по умолчанию,acp-${CLUSTER_NAME}, подходит для развертывания в одном кластере. Для развертывания service mesh выберите префикс в соответствии с топологией mesh:- Для service mesh в одном кластере мы рекомендуем завершать префикс именем кластера, например
acp-cluster-1. - Для multi-cluster service mesh трассы из всех кластеров должны храниться в одном семействе индексов; мы рекомендуем завершать префикс значением meshID, например
acp-mesh-1. Используйте одинаковыйJAEGER_ES_INDEX_PREFIXпри выполнении процедуры установки в каждом кластере mesh, чтобы интерфейс Jaeger UI мог сопоставлять spans между кластерами.
- Для service mesh в одном кластере мы рекомендуем завершать префикс именем кластера, например
-
Развёрнут OpenTelemetry Collector. См. Развёртывание OpenTelemetry Collector.
-
Создан экземпляр Istio.
-
Создан экземпляр Istio CNI.
Порядок действий
(Необязательно) Присвойте пространству имён jaeger-system метку, если mesh использует discovery selectors
Если mesh ограничивает пространства имён, которые отслеживает control plane, с помощью discoverySelectors в ресурсе Istio, пространство имён, в котором размещён OpenTelemetry Collector (по умолчанию это пространство имён jaeger-system), также должно соответствовать одному из этих селекторов. В противном случае control plane не отправит Service Collector на sidecar-прокси, и прокси не смогут экспортировать в него spans.
Примените к пространству имён jaeger-system метку, которой соответствуют ваши discoverySelectors. Например, если селекторы соответствуют метке istio-discovery=enabled:
Пропустите этот шаг, если mesh не использует discoverySelectors. По умолчанию control plane обнаруживает каждое пространство имён, поэтому Collector уже видим и дополнительная метка не требуется. Добавление метки при отсутствии discovery selectors не даёт эффекта.
Дополнительные сведения о discovery selectors см. в разделе Использование DiscoverySelectors для режима sidecar и в разделе Discovery selectors в ambient-режиме для ambient-режима.
Обновите ресурс Istio, чтобы включить tracing и определить provider трассировки OpenTelemetry
Пример: включение tracing через meshConfig
- Поле
service— это FQDN сервиса OpenTelemetry Collector. Значение по умолчанию указывает на Collector, развёрнутый в пространстве имёнjaeger-system, как описано в Развёртывание OpenTelemetry Collector. Замените его на фактический адрес Collector, если вы развернули Collector в другом пространстве имён или под другим именем экземпляра.
Чтобы применить эту конфигурацию, выполните patch ресурса Istio:
Эта команда использует JSON merge patch, который заменяет весь массив meshConfig.extensionProviders. Если ресурс Istio уже определяет другие extension providers, они будут перезаписаны. Чтобы сохранить их, отредактируйте ресурс с помощью kubectl edit istio default и добавьте запись otel вручную либо используйте JSON Patch (--type=json), который добавляет элемент в /spec/values/meshConfig/extensionProviders/-.
Обновите ресурс Telemetry, чтобы включить provider трассировки, определённый в meshConfig:
Пример ресурса Istio Telemetry
Чтобы применить эту конфигурацию, выполните patch ресурса Telemetry:
После того как вы убедитесь, что трассы отображаются, уменьшите значение randomSamplingPercentage, чтобы сократить количество запросов.
Удаление distributed tracing
Если вам больше не нужна интеграция distributed tracing с Service Mesh, удалите конфигурацию в указанном ниже порядке.
Удаление конфигурации tracing для Service Mesh
Перед удалением базовых компонентов отключите mesh от OpenTelemetry Collector, чтобы Istio перестал отправлять spans.
-
Отредактируйте ресурс
Telemetryи удалите записьtracingproviders, которая ссылается на providerotel:Либо удалите конфигурацию
tracingбез интерактивного режима с помощьюkubectl patch: -
Отредактируйте ресурс
Istioи удалите записьmeshConfig.extensionProvidersс именемotelлибо установитеmeshConfig.enableTracingвfalse:Либо установите
meshConfig.enableTracingвfalseбез интерактивного режима с помощьюkubectl patch:
Удаление OpenTelemetry Collector и Jaeger v2
Пропустите этот шаг, если другие рабочие нагрузки в кластере по-прежнему зависят от OpenTelemetry Collector или экземпляра Jaeger v2.
Инструкции по удалению экземпляра OpenTelemetry Collector, экземпляра Jaeger v2 и, при необходимости, Alauda Build of OpenTelemetry v2 Operator см. в разделе Удаление Alauda Distributed Tracing.