Azure Container Apps Dynatrace로 OpenTelemetry 데이터 내보내기

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

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

학습 내용

  • 필요한 권한 범위를 포함한 Dynatrace 인제스트 토큰을 만듭니다.
  • Bicep 또는 Azure 포털을 사용하여 OTLP(Dynatrace OpenTelemetry Protocol) 대상을 구성합니다.
  • 메트릭 내보내기를 위해 필요한 앱 환경 변수를 구성합니다.
  • 기존 Container Apps 환경 및 앱에 구성 업데이트를 적용합니다.
  • Dynatrace에서 텔레메트리를 확인하세요.

사전 요구 사항

  • 리소스 그룹을 만들고 Azure Container Apps 리소스를 배포할 수 있는 Azure 구독입니다.
  • Dynatrace SaaS 환경입니다.
  • Azure CLI가 설치되고 로그인되었습니다.
  • Azure Container Apps CLI 확장이 설치되었습니다.
az extension add --name containerapp --upgrade

Dynatrace 수집 토큰 만들기

다음 범위를 사용하여 Dynatrace API 토큰을 만듭니다.

  • logs.ingest
  • metrics.ingest
  • openTelemetryTrace.ingest

토큰 만들기 단계 및 권한 세부 정보는 Dynatrace OTLP 인증 지침을 참조하세요.

OpenTelemetry 대상 구성

다음 옵션 중 하나를 사용하여 컨테이너 앱 환경에서 Dynatrace를 OpenTelemetry 엔드포인트로 구성합니다.

Important

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

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

$RESOURCE_GROUP = "<RESOURCE_GROUP_NAME>"
$DYNATRACE_OTLP_ENDPOINT = "https://<TENANT>.live.dynatrace.com/api/v2/otlp"
$DYNATRACE_API_TOKEN = "<DYNATRACE_INGEST_TOKEN>"

OTLP 기본 엔드포인트(/api/v2/otlp)만 사용합니다. /v1/traces, /v1/metrics 또는 /v1/logs를 추가하지 마세요. 관리형 에이전트가 신호 경로를 자동으로 추가합니다.

var dynatraceEndpoint = 'https://<TENANT>.live.dynatrace.com/api/v2/otlp'
var dynatraceApiKey = '<DYNATRACE_INGEST_TOKEN>'
var dynatraceAuthHeader = 'Api-Token ${dynatraceApiKey}'
var dynatraceOtlpDestinationName = 'dynatrace-otlp'

resource environment 'Microsoft.App/managedEnvironments@2024-10-02-preview' = {
  name: '<managed-environment-name>'
  location: '<region>'
  properties: {
    openTelemetryConfiguration: {
      destinationsConfiguration: {
        otlpConfigurations: [
          {
            name: dynatraceOtlpDestinationName
            endpoint: dynatraceEndpoint
            protocol: 'http'
            insecure: false
            headers: [
              {
                key: 'Authorization'
                value: dynatraceAuthHeader
              }
            ]
          }
        ]
      }
      tracesConfiguration: {
        destinations: [
          dynatraceOtlpDestinationName
        ]
      }
      logsConfiguration: {
        destinations: [
          dynatraceOtlpDestinationName
        ]
      }
      metricsConfiguration: {
        destinations: [
          dynatraceOtlpDestinationName
        ]
      }
    }
  }
}

필요한 환경 변수를 설정하려면 다음 예제와 같이 컨테이너 앱 리소스 블록을 사용합니다.

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_PROTOCOL'
              value: 'http/protobuf'
            }
            {
              name: 'OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE'
              value: 'DELTA'
            }
          ]
        }
      ]
    }
  }
}

Dynatrace는 OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=DELTA 메트릭을 수집해야 합니다.

프로덕션 배포의 경우 비밀 하드 코딩 대신 보안 Bicep 매개 변수 또는 Key Vault 통해 토큰 값을 전달합니다.

템플릿을 업데이트한 후 리포지토리 루트에서 Bicep 구성을 배포합니다.

az deployment group create `
  --resource-group $RESOURCE_GROUP `
  --template-file infra/main.bicep `
  --parameters @infra/main.parameters.json `
  dynatraceEndpoint="$DYNATRACE_OTLP_ENDPOINT" `
  dynatraceApiKey="$DYNATRACE_API_TOKEN"

OTLP 기본 엔드포인트 형식을 포함하여 이 가이드의 앞부분에 표시된 것과 동일한 엔드포인트 및 토큰 값을 사용합니다.

이제 컨테이너 앱이 Dynatrace에 원격 분석을 보내도록 구성되었습니다.

Dynatrace에서 OpenTelemetry 데이터 확인

구성을 완료한 후 컨테이너 앱은 관리형 OpenTelemetry 에이전트를 통해 Dynatrace에 원격 분석을 보내기 시작해야 합니다. 애플리케이션에서 메트릭, 로그 및 추적이 모두 도착하는지 확인하는 가장 빠른 방법은 Dynatrace에서 서비스 앱을 여는 것입니다. 서비스 앱은 한 곳에서 서비스에 대한 세 가지 원격 분석 신호의 유효성을 검사할 수 있는 단일 화면을 제공합니다.

텔레메트리를 확인하려면 다음을 수행하세요:

  1. Dynatrace에서 서비스 앱을 엽니다.
  2. Container App Service를 찾아 예상 서비스 또는 환경 컨텍스트에 대한 메트릭, 로그 및 추적이 있는지 확인합니다.

OpenTelemetry 데이터를 Dynatrace로 수집하는 방법에 대한 배경 지식이 필요한 경우 OpenTelemetry 시작 가이드를 참조하세요.

원격 분석이 누락되었거나 예상대로 표시되지 않는 경우 OpenTelemetry 문제 해결 가이드를 참조하세요.