Azure Container Apps で OpenTelemetry データを収集して読み取る (プレビュー)

Azure Container Apps 環境で OpenTelemetry データ エージェントを使用すると、次の方法によって監視データを OpenTelemetry 形式で送信できます。

  • エージェントから目的のエンドポイントへのデータのパイプ処理。 宛先オプションには、Azure Monitor Application Insights、Datadog、OpenTelemetry Protocol (OTLP) と互換性のあるエンドポイントが含まれます。

  • データの出力方法を再構成する必要がなく、宛先エンドポイントを簡単に変更できます。OpenTelemetry エージェントを手動で実行する必要はありません。

この記事では、コンテナー アプリの OpenTelemetry エージェントを設定および構成する方法について説明します。

OpenTelemetry エージェントを構成する

OpenTelemetry エージェントは、コンテナー アプリ環境内に常駐しています エージェント設定は、ARM テンプレートまたは Bicep 呼び出しを介して環境に対して、または CLI を介して構成します。

各エンドポイントの種類 (Azure Monitor Application Insights、DataDog、OTLP) には、特定の構成要件があります。

前提条件

マネージド OpenTelemetry エージェントを環境に対して有効にしたからといって、エージェントがデータを必ず収集するわけではありません。 エージェントは、構成設定とコードの正しいインストルメント化に基づいてのみデータを送信します。

ソース コードを構成する

OpenTelemetry SDK をインストールしてデータを収集するアプリケーションを準備し、OpenTelemetry ガイドラインに従って、メトリックログ、またはトレースをインストルメント化します。

エンドポイントを初期化する

コレクションの宛先にデータを送信する前に、まず宛先サービスのインスタンスを作成する必要があります。 たとえば、Azure Monitor Application Insights にデータを送信する場合は、事前に Application Insights インスタンスを作成する必要があります。

マネージド OpenTelemetry エージェントは、次の宛先を受け入れます。

  • Azure Monitor Application Insights
  • Datadog
  • 任意の OTLP エンドポイント (例: New Relic または Honeycomb のどちらか)

次の表に、各宛先に送信できるデータの種類を示します。

宛先 ログ メトリック トレース
Azure App Insights はい いいえ はい
Datadog いいえ イエス はい
OpenTelemetry プロトコル (OTLP) で構成されたエンドポイント はい イエス はい

Azure Monitor Application Insights

Application Insights に必要な構成の詳細は、接続文字列のみです。 接続文字列を取得したら、コンテナー アプリの ARM テンプレートまたは Azure CLI コマンドを使用してエージェントを構成できます。

このテンプレートをデプロイする前に、<> で囲まれたプレースホルダーを実際の値で置き換えてください。

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

Datadog

Datadog エージェントの構成には、Datadog インスタンスに対する値 site と Datadog インスタンスからの値 key が必要です。 次の表に従って、Datadog インスタンスからこれらの値を収集します。

Datadog エージェント のプロパティ Container Apps 構成プロパティ
DD_SITE site
DD_API_KEY key

これらの構成の詳細を取得したら、コンテナー アプリの ARM テンプレートまたは Azure CLI コマンドを使用してエージェントを構成できます。

このテンプレートをデプロイする前に、<> で囲まれたプレースホルダーを実際の値で置き換えてください。

{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "destinationsConfiguration":{
        ...
        "dataDogConfiguration":{
          "site": "<YOUR_DATADOG_SUBDOMAIN>.datadoghq.com",
          "key": "<YOUR_DATADOG_KEY>"
        }
      },
      "tracesConfiguration":{
        "destinations": ["dataDog"]
      },
      "metricsConfiguration": {
        "destinations": ["dataDog"]
      }
    }
  }
}

OTLP エンドポイント

OpenTelemetry プロトコル (OTLP) エンドポイントは、OpenTelemetry データを使用するテレメトリ データの宛先です。 アプリケーション構成では、複数の OTLP エンドポイントを追加できます。 次の例では、2 つのエンドポイントを追加し、これらのエンドポイントに次のデータを送信します。

[エンドポイント名] エンドポイントに送信されるデータ
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"]
      }
    }
  }
}

名前 説明
name OTLP 構成のエンドポイントを識別するために選択する名前。
endpoint 収集されたデータを受信する宛先の URL。
insecure 既定値は true です。 エクスポーターの gRPC 接続に対してクライアント トランスポート セキュリティを有効にするかどうかを定義します。 false の場合は、headers パラメーターが必要です。
headers OTLP エンドポイントのセキュリティに必要な情報を提供する、'key=value' 形式のスペース区切り値。 例: "api-key=key other-config-value=value"

データ変換先を構成する

エージェントを構成するには、destinations 配列を使用して、アプリケーションがデータを送信するエージェントを定義します。 有効なキーは、appInsightsdataDog、またはカスタム OTLP エンドポイントの名前です。 エージェントの動作は、データ型とエンドポイント関連のオプションに基づいて制御できます。

データ型に基づく場合

オプション
データ型を選択します。 ログ、メトリック、トレースを個別に構成できます。
任意のデータ型を有効または無効にします。 トレースのみを送信し、他のデータは送信しない場合に選択できます。
1 つのデータ型を複数のエンドポイントに送信します。 DataDog と OTLP で構成されたエンドポイントの両方にログを送信できます。
異なるデータ型をさまざまな場所に送信します。 トレースを OTLP エンドポイントに送信し、メトリックを DataDog に送信できます。
すべてのデータ型の送信を無効にします。 OpenTelemetry エージェントを介してデータを送信しないことを選択できます。

エンドポイントに基づく場合

  • 一度に設定できる Application Insights エンドポイントと Datadog エンドポイントは 1 つだけです。
  • 複数の OTLP 構成エンドポイントを定義できますが、それぞれに個別の名前が必要です。

次の例は、customDashboard という名前の OTLP エンドポイントを使用する方法を示しています。 次を送信します。

  • アプリの分析情報と customDashboard にトレース
  • アプリの分析情報と customDashboard にログ
  • DataDog と customDashboard にメトリック
{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

## Example OpenTelemetry configuration

The following example ARM template shows how you might configure your container app to collect telemetry data using Azure Monitor Application Insights, Datadog, and with a custom OTLP agent named `customDashboard`.

Before you deploy this template, replace placeholders surrounded by `<>` with your values.

```json
{
  "location": "eastus",
  "properties": {
    "appInsightsConfiguration": {
      "connectionString": "<APP_INSIGHTS_CONNECTION_STRING>"
    },
    "openTelemetryConfiguration": {
      "destinationsConfiguration": {
        "dataDogConfiguration": {
          "site": "datadoghq.com",
          "key": "<YOUR_DATADOG_KEY>"
        },
        "otlpConfigurations": [
          {
            "name": "customDashboard",
            "endpoint": "<OTLP_ENDPOINT_URL>",
            "insecure": true
          }
        ]
      },
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

環境変数

OpenTelemetry エージェントでは、実行時に一連の環境変数をアプリケーションに自動的に挿入します。

最初の 2 つの環境変数は、標準の OpenTelemetry エクスポーター構成に従い、OTLP 標準ソフトウェア開発キットで使用されます。 コンテナー アプリの仕様で環境変数を明示的に設定すると、自動的に挿入された値が設定した値によって上書きされます。

OTLP エクスポーターの構成については、「OTLP エクスポーターの構成」を参照してください。

名前 説明
OTEL_EXPORTER_OTLP_ENDPOINT 任意の型のシグナルのベース エンドポイント URL。必要に応じて指定されたポート番号を使用します。 この設定は、同じエンドポイントに複数のシグナルを送信し、1 つの環境変数でエンドポイントを制御する場合に役立ちます。 例: http://otel.service.k8se-apps:4317/
OTEL_EXPORTER_OTLP_PROTOCOL すべてのテレメトリ データに使用される OTLP トランスポート プロトコルを指定します。 マネージド エージェントは、grpc のみをサポートします。 値: grpc

他の 3 つの環境変数は Azure Container Apps に固有であり、常に挿入されます。 これらの変数は、特定のデータ型 (ログ、メトリック、トレース) ごとにエージェントのエンドポイント URL を保持します。

これらの変数は、マネージド OpenTelemetry エージェントと別の OpenTelemetry エージェントの両方を使用している場合にのみ必要です。 これらの変数を使用すると、異なる OpenTelemetry エージェント間でデータをルーティングする方法を制御できます。

名前 Description
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 エージェントはプレビュー段階です。
  • システム ログや Container Apps 標準メトリックなどのシステム データは、OpenTelemetry エージェントに送信できません。
  • Application Insights エンドポイントはメトリックを受け入れません。
  • Datadog エンドポイントはログを受け入れません。

次のステップ