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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Azure Monitor Application Insights

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

Строка подключения содержит ключ инструментирования, который является уникальным идентификатором, используемым для связывания телеметрии с определенным ресурсом Application Insights. Ключи инструментирования не являются маркерами безопасности или ключами безопасности и не считаются секретами.

Если вы хотите защитить ресурс Application Insights от неправильного использования, ознакомьтесь с проверкой подлинности Microsoft Entra для Application Insights.

Перед развертыванием этого шаблона замените <PLACEHOLDERS> значения.

{
  ...
  "properties": {
    "appInsightsConfiguration ": {  
      "connectionString": "<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 или Bicep приложения контейнера или с помощью команд Azure CLI.

Избегайте указания значения секрета, например ключа API Datadog, непосредственно в рабочей среде. Вместо этого используйте ссылку на секрет, хранящийся в Azure Key Vault.

Необходимо включить хранилище ключей для развертывания шаблона. Для этого создайте хранилище ключей с enabledForTemplateDeployment включенным свойством или выполните следующую команду Azure CLI, заменив <KEY_VAULT_NAME> значение:

az keyvault update --name <KEY_VAULT_NAME> --enabled-for-template-deployment true

Дополнительные сведения см. в разделе:

Создайте файл параметров для получения ключа API Datadog из Azure Key Vault.

Перед развертыванием следующих файлов замените <PLACEHOLDERS> значения.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "datadogapikey": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT_NAME>"
        },
        "secretName": "<KEY_VAULT_SECRET_NAME>"
      }
    }
  }
}

Теперь вы можете ссылаться на datadogapikey параметр в шаблоне ARM.

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

Чтобы развернуть ресурс, выполните следующую команду Azure CLI, заменив <PLACEHOLDERS> значения своими значениями.

az deployment group create \
  --resource-group <RESOURCE_GROUP> \
  --template-file <ARM_TEMPLATE_FILE> \
  --parameters <PARAMETER_FILE>

Конечная точка 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"]
      }
    }
  }
}

Имя Описание
resource-group Имя группы ресурсов. Вы можете настроить расположение по умолчанию с помощью az configure --defaults group=<NAME>.
name Имя среды приложений-контейнеров.
otlp-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.

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

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

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

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

Пример конфигурации OpenTelemetry

В следующем примере шаблона показано, как настроить приложение-контейнер для сбора данных телеметрии с помощью Azure Monitor Application Insights, Datadog и пользовательского агента OTLP с именем customDashboard.

В этом примере используется файл параметров, используемый для извлечения ключа API Datadog из Azure Key Vault.

Перед развертыванием этого шаблона замените <PLACEHOLDERS> значения.

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

Дополнительные сведения см. в Microsoft.App/managedEnvironments.

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

Агент 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 Application Insights и Datadog, вы несете ответственность за расходы, применяемые обеими службами.

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

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

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