Сбор и чтение данных 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
Дополнительные сведения см. в разделе:
- Использование Azure Key Vault для передачи значения безопасного параметра во время развертывания
- Руководство по Интеграция с Azure Key Vault при развертывании шаблона ARM
Создайте файл параметров для получения ключа 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
массив для определения агентов, которые приложение отправляет данные. Допустимые ключи — это appInsights
dataDog
либо имя пользовательской конечной точки 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 не принимает журналы.