Поделиться через


Сбор и чтение данных OpenTelemetry в azure Container Apps (предварительная версия)

Используя агент данных OpenTelemetry с средой Azure Container Apps, вы можете отправить данные о наблюдаемости в формате OpenTelemetry следующим образом:

  • Передача данных из агента в нужную конечную точку. Варианты назначения включают Аналитика приложения Azure Monitor, Datadog и любую конечную точку, совместимую с OpenTelemetry Protocol (OTLP).

  • Легко изменять конечные точки назначения без необходимости перенастройки способа их выдачи и без необходимости вручную запускать агент OpenTelemetry.

В этой статье показано, как настроить и настроить агент OpenTelemetry для приложения контейнера.

Настройка агента OpenTelemetry

Агенты OpenTelemetry живут в среде приложения контейнера. Параметры агента настраивается с помощью шаблона ARM или вызовов Bicep к среде или через ИНТЕРФЕЙС командной строки.

Каждый тип конечной точки (приложение Azure Monitor Аналитика, DataDog и OTLP) имеет определенные требования к конфигурации.

Необходимые компоненты

Включение управляемого агента OpenTelemetry в среду не означает, что агент собирает данные автоматически. Агенты отправляют данные только на основе параметров конфигурации и правильного инструментирования кода.

Настройка исходного кода

Подготовьте приложение для сбора данных путем установки пакета SDK OpenTelemetry и следуйте рекомендациям по OpenTelemetry для инструментирования метрик, журналов или трассировок.

Инициализация конечных точек

Прежде чем отправлять данные в место назначения коллекции, сначала необходимо создать экземпляр целевой службы. Например, если вы хотите отправить данные в приложение Azure Monitor Аналитика, необходимо заранее создать экземпляр приложения Аналитика.

Управляемый агент OpenTelemetry принимает следующие назначения:

  • Azure Monitor Application Insights
  • Datadog
  • Любая конечная точка OTLP (например, New Relic или Honeycomb)

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

Назначение Журналы Метрики Трассировки
приложение Azure Аналитика Да No Да
Datadog No Да Да
Настроенная конечная точка протокола OpenTelemetry (OTLP) Да Да Да

Azure Monitor Application Insights

Единственными сведениями о конфигурации, необходимыми для приложения Аналитика, является строка подключения. После строка подключения агент можно настроить с помощью шаблона ARM приложения контейнера или с помощью команд Azure CLI.

Перед развертыванием этого шаблона замените заполнители, окруженные значениями <> .

{
  ...
  "properties": {
    "appInsightsConfiguration ": {  
      "connectionString": "<YOUR_APP_INSIGHTS_CONNECTION_STRING>"
    }
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration":{
        "destinations": ["appInsights"]
      },
      "logsConfiguration": {
        "destinations": ["appInsights"]
      }
    }
  }
}

Datadog

Для конфигурации агента Datadog требуется значение для site экземпляра Datadog и key из нее. Соберите эти значения из экземпляра Datadog в соответствии с этой таблицей:

Свойство агента Datadog Свойство конфигурации container Apps
DD_SITE site
DD_API_KEY key

После получения этих сведений о конфигурации агент можно настроить с помощью шаблона ARM приложения контейнера или с помощью команд Azure CLI.

Перед развертыванием этого шаблона замените заполнители, окруженные значениями <> .

{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "destinationsConfiguration":{
        ...
        "dataDogConfiguration":{
          "site": "<YOUR_DATADOG_SUBDOMAIN>.datadoghq.com",
          "key": "<YOUR_DATADOG_KEY>"
        }
      },
      "tracesConfiguration":{
        "destinations": ["dataDog"]
      },
      "metricsConfiguration": {
        "destinations": ["dataDog"]
      }
    }
  }
}

Конечная точка OTLP

Конечная точка протокола OpenTelemetry (OTLP) — это назначение данных телеметрии, использующее данные OpenTelemetry. В конфигурации приложения можно добавить несколько конечных точек OTLP. В следующем примере добавляются две конечные точки и отправляются следующие данные в эти конечные точки.

Имя конечной точки Данные, отправленные в конечную точку
oltp1 Метрики и (или) трассировки
oltp2 Журналы и /или трассировки

Хотя вы можете настроить столько конечных точек, настроенных OTLP, сколько вам нравится, каждая конечная точка должна иметь отдельное имя.

{
  "properties": {
    "appInsightsConfiguration": {},
    "openTelemetryConfiguration": {
      "destinationsConfiguration":{
        "otlpConfigurations": [
          {
            "name": "otlp1",
            "endpoint": "ENDPOINT_URL_1",
            "insecure": false,
            "headers": "api-key-1=key"
          },
          {
            "name": "otlp2",
            "endpoint": "ENDPOINT_URL_2",
            "insecure": true
          }
        ]
      },
      "logsConfiguration": { 
        "destinations": ["otlp2"]
      },
      "tracesConfiguration":{
        "destinations": ["otlp1", "otlp2"]
      },
      "metricsConfiguration": {
        "destinations": ["otlp1"]
      }
    }
  }
}

Имя Описание
name Имя, выбранное для идентификации конечной точки, настроенной OTLP.
endpoint URL-адрес назначения, получающего собранные данные.
insecure Значение true по умолчанию. Определяет, следует ли включить безопасность транспорта клиента для подключения gRPC экспортера. Если значение false, headers параметр является обязательным.
headers Разделенные пробелами значения в формате key=value, которые предоставляют необходимые сведения для безопасности конечных точек OTLP. Пример: "api-key=key other-config-value=value".

Настройка назначений данных

Чтобы настроить агент, используйте destinations массив для определения агентов, которые приложение отправляет данные. Допустимые ключи — это appInsightsdataDogлибо имя пользовательской конечной точки OTLP. Вы можете управлять поведением агента на основе типов данных и параметров, связанных с конечной точкой.

По типу данных

Вариант Пример
Выберите тип данных. Журналы, метрики и (или) трассировки можно настроить по отдельности.
Включите или отключите любой тип данных. Вы можете отправлять только трассировки и никакие другие данные.
Отправьте один тип данных нескольким конечным точкам. Журналы можно отправлять как в DataDog, так и в настраиваемую конечную точку OTLP.
Отправка разных типов данных в разные расположения. Трассировки можно отправлять в конечную точку OTLP и метрики в DataDog.
Отключите отправку всех типов данных. Вы можете не отправлять данные через агент OpenTelemetry.

По конечной точке

  • Вы можете настроить только одну конечную точку приложения Аналитика и Datadog каждый раз.
  • Хотя можно определить несколько конечных точек, настроенных OTLP, каждое из них должно иметь отдельное имя.

В следующем примере показано, как использовать конечную точку OTLP с именем customDashboard. Он отправляет:

  • трассировки для аналитики приложений и customDashboard
  • журналы для аналитики приложений и customDashboard
  • метрики DataDog и customDashboard
{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

## Example OpenTelemetry configuration

The following example ARM template shows how you might configure your container app to collect telemetry data using Azure Monitor Application Insights, Datadog, and with a custom OTLP agent named `customDashboard`.

Before you deploy this template, replace placeholders surrounded by `<>` with your values.

```json
{
  "location": "eastus",
  "properties": {
    "appInsightsConfiguration": {
      "connectionString": "<APP_INSIGHTS_CONNECTION_STRING>"
    },
    "openTelemetryConfiguration": {
      "destinationsConfiguration": {
        "dataDogConfiguration": {
          "site": "datadoghq.com",
          "key": "<YOUR_DATADOG_KEY>"
        },
        "otlpConfigurations": [
          {
            "name": "customDashboard",
            "endpoint": "<OTLP_ENDPOINT_URL>",
            "insecure": true
          }
        ]
      },
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

Переменные среды

Агент OpenTelemetry автоматически внедряет набор переменных среды в приложение во время выполнения.

Первые две переменные среды соответствуют стандартной конфигурации экспортера OpenTelemetry и используются в пакетах разработки программного обеспечения OTLP уровня "Стандартный". Если вы явно задали переменную среды в спецификации приложения контейнера, значение перезаписывает автоматически введенное значение.

Сведения о конфигурации экспортера OTLP см. в разделе "Конфигурация экспортера OTLP".

Имя Описание
OTEL_EXPORTER_OTLP_ENDPOINT URL-адрес базовой конечной точки для любого типа сигнала с необязательным номером порта. Этот параметр полезен при отправке нескольких сигналов в одну конечную точку и требуется, чтобы одна переменная среды контролировала конечную точку. Пример: http://otel.service.k8se-apps:4317/
OTEL_EXPORTER_OTLP_PROTOCOL Указывает транспортный протокол OTLP, используемый для всех данных телеметрии. Управляемый агент поддерживает только grpc. Значение: grpc.

Другие три переменные среды относятся к приложениям контейнеров Azure и всегда внедряются. Эти переменные содержат URL-адреса конечной точки агента для каждого конкретного типа данных (журналы, метрики, трассировки).

Эти переменные необходимы только при использовании управляемого агента OpenTelemetry и другого агента OpenTelemetry. С помощью этих переменных вы можете управлять маршрутизацией данных между различными агентами OpenTelemetry.

Имя Описание: Пример
CONTAINERAPP_OTEL_TRACING_GRPC_ENDPOINT URL-адрес конечной точки только для данных трассировки. http://otel.service.k8se-apps:43178/v1/traces/
CONTAINERAPP_OTEL_LOGGING_GRPC_ENDPOINT URL-адрес конечной точки только для данных журнала. http://otel.service.k8se-apps:43178/v1/logs/
CONTAINERAPP_OTEL_METRIC_GRPC_ENDPOINT URL-адрес конечной точки только для данных метрик. http://otel.service.k8se-apps:43178/v1/metrics/

Затраты на агент OpenTelemetry

Плата взимается за базовые вычислительные ресурсы агента.

Сведения о целевой службе для структуры выставления счетов и условий. Например, если вы отправляете данные в приложение Azure Monitor Аналитика и Datadog, вы несете ответственность за расходы, применяемые обеими службами.

Известные ограничения

  • Агенты OpenTelemetry находятся в предварительной версии.
  • Системные данные, такие как системные журналы или стандартные метрики контейнеров, недоступны для отправки агенту OpenTelemetry.
  • Конечная точка приложения Аналитика не принимает метрики.
  • Конечная точка Datadog не принимает журналы.

Следующие шаги