Azure Container Apps에서 OpenTelemetry를 Elastic으로 내보내기

이 구성 가이드에서는 관리형 OpenTelemetry 에이전트를 사용하여 로그, 추적 및 메트릭을 Elastic으로 전달하도록 Azure Container Apps 구성하는 방법을 보여 줍니다.

관리되는 OpenTelemetry 에이전트에 대한 자세한 내용은 Azure Container Apps의OpenTelemetry 에이전트를 참조하세요.

이 가이드에서는 다음 방법을 알아봅니다.

  • Elastic 수집 토큰을 생성합니다.
  • Bicep 또는 Azure 포털을 사용하여 Elastic OTLP 대상을 구성합니다.
  • 필요한 앱 환경 변수를 구성합니다.
  • 기존 Container Apps 환경 및 앱에 구성 업데이트를 적용합니다.
  • Elastic에서 원격 분석을 확인합니다.

사전 요구 사항

  • Azure 구독
  • OTLP 수집을 지원하는 Elastic 계정 및 대상 배포 또는 프로젝트.
  • Azure CLI Azure 계정에 설치되고 로그인되었습니다.
  • Azure Container Apps CLI 확장이 설치되었습니다(Bicep).
az extension add --name containerapp --upgrade

Elastic 수집 토큰 만들기

대상 배포를 위해 OpenTelemetry 데이터를 수집할 수 있는 Elastic API 키를 만듭니다.

필요한 권한은 다음 신호에 대한 원격 분석 데이터를 작성할 수 있도록 허용해야 합니다.

  • 로그 수집/쓰기
  • 수집/쓰기 추적
  • 메트릭 수집/쓰기

토큰 권한 및 API 키에 대한 공급자 지침은 Elastic API 키를 참조하세요.

OpenTelemetry 대상 구성

다음 옵션 중 하나를 사용하여 Container Apps 환경에서 Elastic을 OTel 엔드포인트로 구성합니다.

Important

관리형 OpenTelemetry 대상을 구성해도 원격 분석이 자동으로 생성되지는 않습니다. OpenTelemetry SDK를 사용하여 추적, 메트릭 및 로그를 내보내려면 애플리케이션을 이미 계측해야 합니다.

배포에 대한 CLI 변수를 설정합니다.

$RESOURCE_GROUP = "<RESOURCE_GROUP_NAME>"
$ELASTIC_OTLP_ENDPOINT = "https://<YOUR_ELASTIC_ENDPOINT>:443"
$ELASTIC_API_KEY = "<ELASTIC_API_KEY_WITHOUT_PREFIX>"

Elastic OTLP 기본 엔드포인트 형식을 사용합니다.

  • https://<YOUR_ELASTIC_ENDPOINT>:443

권한 부여 토큰 헤더 형식을 사용합니다.

  • 헤더 키: Authorization
  • 헤더 값: ApiKey <TOKEN>

이 관리되는 환경 리소스 예제를 사용하여 대상 라우팅을 구성합니다.

@secure()
param elasticApiKey string
param elasticOtlpEndpoint string = 'https://<YOUR_ELASTIC_ENDPOINT>:443'

var elasticDestinationName = 'elastic-otlp'
var elasticAuthHeaderValue = 'ApiKey ${elasticApiKey}'

resource environment 'Microsoft.App/managedEnvironments@2026-03-02-preview' = {
  name: '<MANAGED_ENVIRONMENT_NAME>'
  location: '<REGION>'
  properties: {
    openTelemetryConfiguration: {
      destinationsConfiguration: {
        otlpConfigurations: [
          {
            name: elasticDestinationName
            endpoint: elasticOtlpEndpoint
            protocol: 'http'
            insecure: false
            headers: [
              {
                key: 'Authorization'
                value: elasticAuthHeaderValue
              }
            ]
          }
        ]
      }
      tracesConfiguration: {
        destinations: [
          elasticDestinationName
        ]
      }
      logsConfiguration: {
        destinations: [
          elasticDestinationName
        ]
      }
      metricsConfiguration: {
        destinations: [
          elasticDestinationName
        ]
      }
    }
  }
}

이 앱 리소스 예제를 사용하여 필요한 앱 환경 변수를 설정합니다.

resource app 'Microsoft.App/containerApps@2023-05-01' = {
  name: '<CONTAINER_APP_NAME>'
  location: '<REGION>'
  properties: {
    managedEnvironmentId: environment.id
    template: {
      containers: [
        {
          name: '<CONTAINER_NAME>'
          image: '<IMAGE_NAME>'
          env: [
            {
              name: 'OTEL_SERVICE_NAME'
              value: '<SERVICE_NAME>'
            }
            {
              name: 'OTEL_TRACES_EXPORTER'
              value: 'otlp'
            }
            {
              name: 'OTEL_METRICS_EXPORTER'
              value: 'otlp'
            }
            {
              name: 'OTEL_LOGS_EXPORTER'
              value: 'otlp'
            }
            {
              name: 'OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE'
              value: 'cumulative'
            }
          ]
        }
      ]
    }
  }
}

리포지토리 루트에서 Bicep 구성을 적용합니다.

az deployment group create `
  --resource-group $RESOURCE_GROUP `
  --template-file infra/main.bicep `
  --parameters @infra/main.parameters.json `
  --parameters elasticOtlpEndpoint="$ELASTIC_OTLP_ENDPOINT" `
  --parameters elasticApiKey="$ELASTIC_API_KEY"

이제 Container App이 Elastic에 원격 분석을 보내도록 구성되었습니다.

Elastic에서 원격 분석 확인

구성 후 로그, 추적 및 메트릭이 애플리케이션에서 도착하는지 확인하고 예상 서비스 ID에 매핑합니다.

워크플로에 맞는 탄력적 보기를 사용합니다.

Elastic의 탐색 및 분석에 대한 자세한 내용은 Elastic Observability 설명서를 참조하세요.