• Русский
  • Варианты инструментирования

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

    WARNING

    Сборка OpenTelemetry v2 Operator от Alauda обеспечивает механизм автоматической инъекции для инструментирования, но не включает предустановленные библиотеки инструментирования или контейнерные образы. Вам необходимо самостоятельно создавать образы инструментирования или использовать образы, предоставленные сообществом.

    Базовая конфигурация инструментирования

    Пользовательский ресурс Instrumentation (CR) определяет, как собираются телеметрические данные из ваших приложений. Он предоставляет настройки для конечной точки экспортера, распространения контекста, выборки и инструментирования, специфичного для языка.

    apiVersion: opentelemetry.io/v1alpha1
    kind: Instrumentation
    metadata:
      name: my-instrumentation
    spec:
      env:
        - name: OTEL_EXPORTER_OTLP_TIMEOUT
          value: "20"
      exporter:
        endpoint: 'http://otel-collector.otel-collector.svc:4317'
      propagators:
        - tracecontext
        - baggage
        - b3multi
      sampler:
        type: parentbased_traceidratio
        argument: "0.25"
      python:
        env:
          - name: OTEL_EXPORTER_OTLP_ENDPOINT
            value: 'http://otel-collector.otel-collector.svc:4318'
      dotnet:
        env:
          - name: OTEL_EXPORTER_OTLP_ENDPOINT
            value: 'http://otel-collector.otel-collector.svc:4318'
      go:
        env:
          - name: OTEL_EXPORTER_OTLP_ENDPOINT
            value: 'http://otel-collector.otel-collector.svc:4318'
    1. Конечная точка экспортера, куда Collector получает телеметрию. Протокол по умолчанию — gRPC на порту 4317.
    2. Форматы распространения контекста. Поддерживаемые значения включают tracecontext, baggage, b3, b3multi, jaeger, ottrace и none.
    3. Конфигурация выборщика для контроля объема данных трассировки. Тип parentbased_traceidratio с аргументом 0.25 означает, что 25% новых корневых трасс выбираются для сбора.
    4. Автоматическое инструментирование Python по умолчанию использует otlp/http. Конечная точка должна указывать на HTTP-порт 4318 Collector.
    5. Автоматическое инструментирование .NET по умолчанию использует otlp/http. Конечная точка должна указывать на HTTP-порт 4318 Collector.
    6. Автоматическое инструментирование Go по умолчанию использует otlp/http. Конечная точка должна указывать на HTTP-порт 4318 Collector.

    Параметры CR Instrumentation

    В следующей таблице описаны параметры, которые можно настроить в пользовательском ресурсе Instrumentation.

    ПараметрОписаниеЗначения
    envОбщие переменные окружения, используемые всеми типами инструментирования.
    exporterКонфигурация экспортера для доставки телеметрии.
    propagatorsКонфигурация распространения контекста между процессами.tracecontext, baggage, b3, b3multi, jaeger, ottrace, none
    resourceКонфигурация атрибутов ресурса для идентификации телеметрии.
    samplerКонфигурация выборки для контроля объема телеметрии.
    apacheHttpdНастройки инструментирования Apache HTTP Server.
    dotnetНастройки инструментирования .NET.
    goНастройки инструментирования Go.
    javaНастройки инструментирования Java.
    nodejsНастройки инструментирования Node.js.
    pythonНастройки инструментирования Python.

    Протоколы автоинструментирования по умолчанию

    Каждый язык автоинструментирования использует протокол по умолчанию для экспорта телеметрии в Collector. В таблице перечислены протоколы по умолчанию.

    АвтоинструментированиеПротокол по умолчанию
    Java 1.xotlp/grpc
    Java 2.xotlp/http
    Pythonotlp/http
    .NETotlp/http
    Gootlp/http
    Apache HTTP Serverotlp/grpc
    NOTE

    Вы можете настроить переменные окружения в CR Instrumentation. Однако после того, как Operator внедрит эти переменные в контейнер приложения, их нельзя удалить простым обновлением или удалением CR Instrumentation. Для удаления внедренных переменных окружения необходимо перезапустить или пересоздать соответствующие поды.

    Инъекция на основе аннотаций

    Чтобы включить автоинструментирование для вашего приложения, добавьте соответствующую аннотацию к вашему поду или namespace:

    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp
      annotations:
        instrumentation.opentelemetry.io/inject-java: "true"
    spec:
      containers:
      - name: app
        image: myapp:latest

    Инъекция, специфичная для языка

    Формат аннотации: instrumentation.opentelemetry.io/inject-<language>, где <language> может быть:

    • apache-httpd — для Apache HTTP Server
    • dotnet — для приложений .NET
    • go — для приложений Go
    • java — для приложений Java
    • nodejs — для приложений Node.js
    • python — для приложений Python

    Инъекция переменных SDK

    Вы можете использовать аннотацию instrumentation.opentelemetry.io/inject-sdk, чтобы указать OpenTelemetry Operator внедрить переменные окружения SDK в ваш под.

    TIP

    Аннотация inject-sdk полезна, когда нужно внедрить переменные окружения SDK без включения автоинструментирования, специфичного для языка. Это особенно удобно для приложений, которые уже содержат зависимости OpenTelemetry SDK, но требуют централизованного управления конфигурацией.

    Поддерживаемые значения для аннотаций инъекции

    ЗначениеОписание
    "true"Внедряет ресурс Instrumentation с именем по умолчанию из текущего namespace
    "false"Не внедряет ресурс Instrumentation
    "<instrumentation_name>"Указывает имя ресурса Instrumentation для внедрения из текущего namespace
    "<namespace>/<instrumentation_name>"Указывает имя ресурса Instrumentation для внедрения из другого namespace

    Инструментирование на уровне namespace

    Вы можете применить инструментирование ко всем подам в namespace, добавив аннотацию к самому namespace:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: production
      annotations:
        instrumentation.opentelemetry.io/inject-java: "true"
    TIP

    Аннотации на уровне namespace предоставляют удобный способ включить инструментирование для всех приложений в среде без изменения спецификаций отдельных подов.

    Конфигурация ресурсов

    Вы можете указать запросы и лимиты ресурсов для init-контейнера инструментирования:

    spec:
      resource:
        limits:
          cpu: 500m
          memory: 128Mi
        requests:
          cpu: 100m
          memory: 64Mi

    Внедрение переменных окружения

    CR Instrumentation позволяет внедрять дополнительные переменные окружения в инструментируемые контейнеры:

    spec:
      env:
        - name: OTEL_TRACES_EXPORTER
          value: otlp
        - name: OTEL_METRICS_EXPORTER
          value: otlp
        - name: OTEL_LOGS_EXPORTER
          value: otlp

    Эти переменные окружения автоматически добавляются в контейнер приложения при внедрении инструментирования.

    Выборочное инструментирование

    Вы можете контролировать, какие контейнеры в многоконтейнерном поде получают инструментирование, используя аннотации, специфичные для контейнеров:

    metadata:
      annotations:
        instrumentation.opentelemetry.io/inject-java: "true"
        instrumentation.opentelemetry.io/container-names: "app,sidecar"

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

    NOTE

    Если аннотация container-names не указана, инструментирование по умолчанию применяется к первому контейнеру в поде.

    Ссылка на Instrumentation

    Чтобы сослаться на конкретный CR Instrumentation, вы можете использовать полный формат ссылки в аннотации:

    metadata:
      annotations:
        instrumentation.opentelemetry.io/inject-java: "namespace/instrumentation-name"

    Это позволяет использовать разные конфигурации инструментирования для различных приложений в одном namespace.