• Русский
  • Параметры Instrumentation

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

    WARNING

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

    Базовая конфигурация Instrumentation

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

    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. Endpoint экспортера, на который Collector получает данные телеметрии. Протокол по умолчанию — gRPC на порту 4317.
    2. Форматы распространения контекста. Поддерживаемые значения: tracecontext, baggage, b3, b3multi, jaeger, ottrace и none.
    3. Конфигурация семплера для управления объемом trace-данных. Тип parentbased_traceidratio с аргументом 0.25 означает, что семплируются 25% новых корневых trace.
    4. Автоинструментирование Python по умолчанию использует otlp/http. Endpoint должен указывать на HTTP-порт 4318 Collector.
    5. Автоинструментирование .NET по умолчанию использует otlp/http. Endpoint должен указывать на HTTP-порт 4318 Collector.
    6. Автоинструментирование Go по умолчанию использует otlp/http. Endpoint должен указывать на HTTP-порт 4318 Collector.

    Параметры CR Instrumentation

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

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

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

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

    Auto-instrumentationDefault Protocol
    Java 1.xotlp/grpc
    Java 2.xotlp/http
    Pythonotlp/http
    .NETotlp/http
    Gootlp/http
    Apache HTTP Serverotlp/grpc
    NOTE

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

    Внедрение на основе аннотаций

    Чтобы включить автоинструментирование для вашего приложения, добавьте соответствующую аннотацию к вашему pod или 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 в ваш pod.

    TIP

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

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

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

    Instrumentation на уровне namespace

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

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

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

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

    Вы можете указать requests и limits ресурсов для init container instrumentation:

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

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

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

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

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

    Выборочное instrumentation

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

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

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

    NOTE

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

    Справочник по Instrumentation

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

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

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