Azure Container Apps で OpenTelemetry Elastic をエクスポートする

この構成ガイドでは、マネージド OpenTelemetry エージェントを使用してログ、トレース、メトリックを Elastic に転送するようにAzure Container Appsを構成する方法について説明します。

マネージド OpenTelemetry エージェントの詳細については、Azure Container Apps の OpenTelemetry エージェント を参照してください。

このガイドでは、以下の方法について説明します。

  • Elastic インジェストトークンを作成する。
  • Bicepまたは Azure ポータルを使用して Elastic OTLP 変換先を構成します。
  • 必要なアプリ環境変数を構成します。
  • 既存の Container Apps 環境とアプリに構成の更新を適用します。
  • Elastic でテレメトリを確認します。

Prerequisites

  • Azure サブスクリプション
  • Elastic アカウントと、OTLP 取り込みに対応した対象のデプロイまたはプロジェクト。
  • 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"

これで、テレメトリを Elastic に送信するようにコンテナー アプリが構成されました。

Elastic でテレメトリを確認する

構成後、ログ、トレース、メトリックがアプリケーションから到着したことを確認し、予想されるサービス ID にマップします。

ワークフローに合ったエラスティック ビューを使用します。

Elastic での探索と分析の詳細については、 Elastic Observability のドキュメントを参照してください