다음을 통해 공유


Azure Container Apps에서 OpenTelemetry 데이터 수집 및 읽기

Azure Container Apps 환경에서 OpenTelemetry 데이터 에이전트를 사용하면 다음을 통해 OpenTelemetry 형식으로 관찰성 데이터를 보내도록 선택할 수 있습니다.

  • 에이전트의 데이터를 원하는 엔드포인트로 파이핑합니다. 대상 옵션에는 Azure Monitor Application Insights, Datadog 및 OTLP(OpenTelemetry Protocol) 호환 엔드포인트가 포함됩니다.

  • 데이터를 내보내는 방법을 다시 구성하지 않고도 OpenTelemetry 에이전트를 수동으로 실행하지 않고도 대상 엔드포인트를 쉽게 변경할 수 있습니다.

이 문서에서는 컨테이너 앱에 대해 OpenTelemetry 에이전트를 설정하고 구성하는 방법을 보여 줍니다.

OpenTelemetry 에이전트 구성

OpenTelemetry 에이전트는 컨테이너 앱 환경 내에 있습니다. ARM 템플릿이나 환경에 대한 Bicep 호출, CLI 또는 Terraform(AzAPI 공급자를 통해)을 통해 에이전트 설정을 구성합니다.

각 엔드포인트 유형(Azure Monitor Application Insights, DataDog 및 OTLP)에는 특정 구성 요구 사항이 있습니다.

필수 구성 요소

사용자 환경에 대해 관리되는 OpenTelemetry 에이전트를 사용하도록 설정해도 에이전트가 데이터를 수집한다는 의미는 아닙니다. 에이전트는 구성 설정에 따라 데이터를 보내고 코드를 올바르게 계측합니다.

소스 코드 구성

OpenTelemetry SDK를 설치하여 데이터를 수집하도록 애플리케이션을 준비하고 OpenTelemetry 지침에 따라 메트릭, 로그 또는 추적을 계측합니다.

엔드포인트 초기화

컬렉션 대상으로 데이터를 보내려면 먼저 대상 서비스의 인스턴스를 만들어야 합니다. 예를 들어 Azure Monitor Application Insights에 데이터를 보내려면 Application Insights 인스턴스를 미리 만들어야 합니다.

관리되는 OpenTelemetry 에이전트는 다음 대상을 허용합니다.

  • Azure Monitor Application Insights
  • 데이터독
  • 모든 OTLP 엔드포인트(예: New Relic 또는 Honeycomb)

참고

Microsoft는 Azure Monitor Application Insights로 전송되는 데이터에 대한 지원을 제공합니다. 데이터가 Microsoft가 아닌 시스템에 저장되면 데이터 관련 지원은 엔드포인트 조직의 책임입니다.

다음 표에서는 각 대상에 보낼 수 있는 데이터 형식을 보여줍니다.

대상 로그 메트릭 흔적
Azure App Insights 아니요
Datadog
OTLP(OpenTelemetry 프로토콜) 구성 엔드포인트

Azure Monitor Application Insights

Application Insights에서 필요한 유일한 구성 세부 정보는 연결 문자열입니다. 연결 문자열이 있으면 컨테이너 앱의 ARM 템플릿, Azure CLI 명령 또는 Terraform을 통해 에이전트를 구성할 수 있습니다.

연결 문자열에는 원격 분석을 특정 Application Insights 리소스에 연결하는 데 사용하는 고유 식별자인 계측 키가 포함되어 있습니다. 계측 키는 보안 토큰 또는 보안 키가 아니며 비밀로 간주되지 않습니다.

Application Insights 리소스를 오용으로부터 보호하려면 Application Insights에 대한 Microsoft Entra 인증을 참조하세요. 그러나 Application Insights 리소스는 로컬 인증이 OpenTelemetry 데이터 에이전트에서 데이터를 수신하도록 허용해야 합니다.

이 템플릿을 배포하기 전에 <PLACEHOLDERS>를 원하는 값으로 바꿉니다.

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

데이터독

사용자 환경에 대해 관리형 OpenTelemetry 에이전트를 사용하도록 설정하는 경우 컨테이너 앱에서 Datadog 에이전트를 실행할 필요가 없습니다.

OpenTelemetry 에이전트 구성을 위해서는 Datadog 인스턴스에서 sitekey 값이 필요합니다. 다음 표에 따라 Datadog 인스턴스에서 이러한 값을 수집합니다.

Datadog 인스턴스 속성 OpenTelemetry 에이전트 구성 속성
DD_SITE site
DD_API_KEY key

Azure Portal에서 Datadog 인스턴스를 만든 경우 자세한 내용은 API 키를 참조하세요.

이러한 구성 세부 정보가 있으면 컨테이너 앱의 ARM 또는 Bicep 템플릿 또는 Azure CLI 명령을 통해 에이전트를 구성할 수 있습니다.

프로덕션 환경에서 직접 Datadog API 키와 같은 비밀 값을 지정하지 마세요. 대신 Azure Key Vault에 저장된 비밀에 대한 참조를 사용합니다.

템플릿 배포에 키 자격 증명 모음을 사용하도록 설정해야 합니다. 템플릿 배포를 사용하도록 설정하려면 enabledForTemplateDeployment 속성을 사용하도록 설정된 키 자격 증명 모음을 만들거나 다음 Azure CLI 명령을 실행하여 <KEY_VAULT_NAME>을(를) 원하는 값으로 바꿉니다.

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

자세한 내용은 다음을 참조하세요.

Azure Key Vault에서 Datadog API 키를 검색하는 매개 변수 파일을(를) 만듭니다.

다음 파일을 배포하기 전에 <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>"
      }
    }
  }
}

이제 ARM 템플릿에서 datadogapikey 매개 변수를 참조할 수 있습니다.

{
  ...
  "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 엔드포인트

OTLP(OpenTelemetry 프로토콜) 엔드포인트는 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 Container Apps 환경의 이름입니다.
otlp-name OTLP로 구성된 엔드포인트를 식별하기 위해 선택한 이름입니다.
endpoint 수집된 데이터를 받는 대상의 URL입니다.
insecure 기본값 true 내보내기 gRPC 연결에 클라이언트 전송 보안을 사용할지 여부를 정의합니다. false이면 headers 매개 변수가 필요합니다.
headers OTLP 엔드포인트의 보안에 필요한 정보를 제공하는 'key=value' 형식에서 공백으로 구분된 값입니다. 예: "api-key=key other-config-value=value".

데이터 대상 구성

에이전트를 구성하려면 destinations 배열을 사용하여 애플리케이션에서 데이터를 보내는 에이전트를 정의합니다. 유효한 키는 appInsights, dataDog 또는 사용자 지정 OTLP 엔드포인트의 이름입니다. 데이터 형식 및 엔드포인트 관련 옵션에 따라 에이전트가 동작하는 방식을 제어할 수 있습니다.

데이터 형식별

옵션 예제
데이터 형식을 선택합니다. 로그, 메트릭 및/또는 추적을 개별적으로 구성할 수 있습니다.
데이터 형식을 사용하거나 사용하지 않도록 설정합니다. 추적만 보내도록 선택할 수 있으며 다른 데이터는 보낼 수 없습니다.
하나의 데이터 형식을 여러 엔드포인트로 보냅니다. DataDog 및 OTLP로 구성된 엔드포인트 모두에 로그를 보낼 수 있습니다.
다른 위치에 다른 데이터 형식을 보냅니다. 추적을 OTLP 엔드포인트로 보내고 메트릭을 DataDog에 보낼 수 있습니다.
모든 데이터 형식 전송을 사용하지 않도록 설정합니다. OpenTelemetry 에이전트를 통해 데이터를 보내지 않도록 선택할 수 있습니다.

엔드포인트별

  • 한 번에 하나의 Application Insights 및 Datadog 엔드포인트만 설정할 수 있습니다.
  • 둘 이상의 OTLP 구성 엔드포인트를 정의할 수 있지만 각 엔드포인트에는 고유한 이름이 있어야 합니다.

다음 예제 ARM 템플릿이 customDashboard(으)로 명명된 OTLP 엔드포인트를 사용하는 방법을 보여줍니다. 다음을 보냅니다.

  • 앱 인사이트에 대한 추적 및 customDashboard
  • 앱 인사이트에 대한 로그 및 customDashboard
  • DataDog 및 customDashboard에 대한 메트릭
{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

시스템 구성 요소 OpenTelemetry 신호 내보내기

OpenTelemetry API 버전 2024-08-02-preview에서 시스템 구성 요소 OpenTelemetry 신호를 데이터 대상으로 내보내도록 컨테이너 앱 환경을 구성할 수 있습니다.

다음 구성을 사용하여 Dapr 추적 및 KEDA 메트릭을 내보냅니다.

Dapr 추적

다음 ARM 템플릿 예는 Dapr 추적을 추적 대상으로 내보내는 방법을 보여 줍니다.

{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ],
        "includeDapr": true
      }
    }
  }
}

컨테이너 앱에서 Dapr을 사용하는 방법에 대한 자세한 내용은 Dapr 개요를 참조하세요.

KEDA 메트릭

다음 ARM 템플릿 예제에서는 KEDA 메트릭을 메트릭 대상으로 내보내는 방법을 보여 줍니다.

{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ],
        "includeKeda": true
      }
    }
  }
}

Container Apps의 KEDA 지원에 대한 자세한 내용은 크기 조정 규칙 설정을 참조하세요.

OpenTelemetry 구성 예제

다음 예제 템플릿은 Azure Monitor Application Insights, Datadog 및 customDashboard로(으로) 명명된 사용자 지정 OTLP 에이전트를 사용하여 원격 분석 데이터를 수집하도록 컨테이너 앱을 구성하는 방법을 보여 줍니다.

이 예제는 Azure Key Vault에서 Datadog API 키를 검색하는 데 사용되는 매개 변수 파일과 함께 작동합니다.

이 템플릿을 배포하기 전에 <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 에이전트는 다음 절차를 사용하여 데이터 복원력을 지원합니다.

  • 메모리 내 버퍼링 및 재시도: 에이전트는 메모리에 데이터를 보관하고 최대 5분 동안 다시 시도(백오프 포함)를 유지합니다.
  • 데이터 삭제: 버퍼링된 큐가 채워지거나 재시도 후에도 엔드포인트가 계속 다운된 경우 에이전트는 메모리 부족이 발생하지 않도록 가장 오래된 일괄 처리를 삭제합니다.

환경 변수

OpenTelemetry 에이전트는 런타임에 애플리케이션에 환경 변수 집합을 자동으로 삽입합니다.

처음 두 환경 변수는 표준 OpenTelemetry 내보내기 구성을 따르며 OTLP 표준 소프트웨어 개발 키트에 사용됩니다. 컨테이너 앱 사양에서 환경 변수를 명시적으로 설정하면 값이 자동으로 삽입된 값을 덮어씁니다.

OTLP 내보내기 구성에 대한 자세한 내용은 OTLP 내보내기 구성을 참조하세요.

이름 설명
OTEL_EXPORTER_OTLP_ENDPOINT 선택적으로 지정된 포트 번호가 있는 모든 신호 형식에 대한 기본 엔드포인트 URL입니다. 이 설정은 동일한 엔드포인트에 둘 이상의 신호를 보내고 하나의 환경 변수가 엔드포인트를 제어하도록 할 때 유용합니다. 예: http://otel.service.k8se-apps:4317/
OTEL_EXPORTER_OTLP_PROTOCOL 모든 원격 분석 데이터에 사용되는 OTLP 전송 프로토콜을 지정합니다. 관리되는 에이전트는 grpc만 지원합니다. 값: grpc.

다른 세 가지 환경 변수는 Azure Container Apps와 관련이 있으며 항상 삽입됩니다. 이러한 변수는 각 특정 데이터 형식(로그, 메트릭, 추적)에 대한 에이전트의 엔드포인트 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 에이전트 비용

관리형 OpenTelemetry 에이전트는 추가 컴퓨팅 비용 없이 실행됩니다. Microsoft는 Container Apps 환경 내에서 에이전트 인프라를 프로비전하고 관리합니다.

그러나 원격 분석 데이터를 보내는 대상 서비스에서 적용되는 요금에 대한 책임은 사용자에게 있습니다. 청구 구조 및 약관은 대상 서비스를 참조하세요. 예를 들어 Azure Monitor Application Insights와 Datadog 모두에 데이터를 보내는 경우 두 서비스에서 적용되는 요금에 대한 책임이 있습니다.

에이전트 리소스 할당

관리되는 OpenTelemetry 에이전트는 다음과 같은 고정 리소스를 사용하여 프로비전됩니다.

  • CPU: 0.5 vCPU 코어
  • 메모리: 1.5GB RAM
  • 복제본: 단일 복제본(구성할 수 없음)

이러한 리소스는 Microsoft에서 관리하며 청구 또는 리소스 소비 메트릭에 표시되지 않습니다.

알려진 제한 사항

  • 시스템 로그 또는 Container Apps 표준 메트릭과 같은 시스템 데이터는 OpenTelemetry 에이전트로 보낼 수 없습니다.
  • Application Insights 엔드포인트는 메트릭을 허용하지 않습니다.
  • 구성 설정은 환경 수준에서 라이브로 설정됩니다. 다른 데이터 형식을 다른 대상으로 보낼 수 있지만 앱별로 데이터를 분할할 수는 없습니다. 예를 들어 동일한 앱에서 Datadog에 메트릭을 보내고 App Insights에 추적을 보낼 수 있습니다.
  • 관리되는 에이전트는 원격 분석 데이터에 대한 gRPC 전송 프로토콜만 지원합니다.
  • 관리형 OpenTelemetry 에이전트는 단일 복제본으로 실행되며 고가용성을 위해 크기를 조정하거나 구성할 수 없습니다.
  • 에이전트 상태 및 상태 메트릭은 현재 Azure Portal 또는 모니터링 API를 통해 노출되지 않습니다.
  • 비밀(예: API 키)은 템플릿에서 직접 지정해야 합니다. 에이전트 구성에 대한 Azure Key Vault 통합은 현재 지원되지 않습니다.

자주 묻는 질문

  • 내 코드에서 OpenTelemetry SDK를 참조해야 하나요?

    예. SDK는 원격 분석 데이터를 만들고 관리되는 에이전트는 데이터 라우팅만 담당합니다.

  • 명령이 null을 반환하는 list 이유는 무엇인가요?

    실행할 az containerapp env telemetry otlp list 때 값이 보호가 필요한 중요한 토큰인 경우, 응답은 null입니다.

  • OpenTelemetry 에이전트의 컴퓨팅 리소스에 대한 요금이 청구되는가요?

    아니요. Microsoft는 추가 컴퓨팅 비용 없이 에이전트 인프라를 프로비전하고 관리합니다. 원격 분석 데이터를 수신하는 대상 서비스에 대해서만 요금이 청구됩니다.

  • OpenTelemetry 에이전트의 크기를 조정하거나 여러 복제본을 실행할 수 있나요?

    아니요. 관리되는 에이전트는 현재 고정 리소스 할당(0.5 CPU, 1.5GB RAM)이 있는 단일 복제본으로 실행됩니다. 고가용성 구성은 현재 지원되지 않습니다.

  • OpenTelemetry 에이전트의 상태 및 상태를 모니터링하려면 어떻게 해야 하나요?

    에이전트 상태 및 상태 메트릭은 현재 노출되지 않습니다. 이 기능은 향후 릴리스를 위해 계획되어 있습니다.

다음 단계