• Русский
  • Настройка платформы распределённой трассировки с 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

    Вы можете интегрировать 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 между кластерами.
    • Развёрнут 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:

    kubectl label namespace jaeger-system istio-discovery=enabled
    NOTE

    Пропустите этот шаг, если mesh не использует discoverySelectors. По умолчанию control plane обнаруживает каждое пространство имён, поэтому Collector уже видим и дополнительная метка не требуется. Добавление метки при отсутствии discovery selectors не даёт эффекта.

    Дополнительные сведения о discovery selectors см. в разделе Использование DiscoverySelectors для режима sidecar и в разделе Discovery selectors в ambient-режиме для ambient-режима.

    Обновите ресурс Istio, чтобы включить tracing и определить provider трассировки OpenTelemetry

    Пример: включение tracing через meshConfig

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
      # ...
    spec:
      namespace: istio-system
      # ...
      values:
        meshConfig:
          enableTracing: true
          extensionProviders:
          - name: otel
            opentelemetry:
              port: 4317
              service: otel-collector.jaeger-system.svc.cluster.local
    1. Поле service — это FQDN сервиса OpenTelemetry Collector. Значение по умолчанию указывает на Collector, развёрнутый в пространстве имён jaeger-system, как описано в Развёртывание OpenTelemetry Collector. Замените его на фактический адрес Collector, если вы развернули Collector в другом пространстве имён или под другим именем экземпляра.

    Чтобы применить эту конфигурацию, выполните patch ресурса Istio:

    kubectl patch istio default --type=merge -p '
    spec:
      values:
        meshConfig:
          enableTracing: true
          extensionProviders:
          - name: otel
            opentelemetry:
              port: 4317
              service: otel-collector.jaeger-system.svc.cluster.local
    '
    WARNING

    Эта команда использует 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

    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: asm-default
      namespace: istio-system
      # ...
    spec:
      # ...
      tracing:
        - providers:
            - name: otel
          randomSamplingPercentage: 100

    Чтобы применить эту конфигурацию, выполните patch ресурса Telemetry:

    kubectl -n istio-system patch telemetry asm-default --type=merge -p '
    spec:
      tracing:
        - providers:
            - name: otel
          randomSamplingPercentage: 100
    '
    NOTE

    После того как вы убедитесь, что трассы отображаются, уменьшите значение randomSamplingPercentage, чтобы сократить количество запросов.

    Удаление distributed tracing

    Если вам больше не нужна интеграция distributed tracing с Service Mesh, удалите конфигурацию в указанном ниже порядке.

    Удаление конфигурации tracing для Service Mesh

    Перед удалением базовых компонентов отключите mesh от OpenTelemetry Collector, чтобы Istio перестал отправлять spans.

    1. Отредактируйте ресурс Telemetry и удалите запись tracing providers, которая ссылается на provider otel:

      kubectl -n istio-system edit telemetry asm-default

      Либо удалите конфигурацию tracing без интерактивного режима с помощью kubectl patch:

      kubectl -n istio-system patch telemetry asm-default --type=json -p='[{"op": "remove", "path": "/spec/tracing"}]'
    2. Отредактируйте ресурс Istio и удалите запись meshConfig.extensionProviders с именем otel либо установите meshConfig.enableTracing в false:

      kubectl edit istio default

      Либо установите meshConfig.enableTracing в false без интерактивного режима с помощью kubectl patch:

      kubectl patch istio default --type=merge -p='{"spec":{"values":{"meshConfig":{"enableTracing":false}}}}'

    Удаление OpenTelemetry Collector и Jaeger v2

    Пропустите этот шаг, если другие рабочие нагрузки в кластере по-прежнему зависят от OpenTelemetry Collector или экземпляра Jaeger v2.

    Инструкции по удалению экземпляра OpenTelemetry Collector, экземпляра Jaeger v2 и, при необходимости, Alauda Build of OpenTelemetry v2 Operator см. в разделе Удаление Alauda Distributed Tracing.