Azure Container Apps 環境で OpenTelemetry データ エージェントを使用すると、次の方法によって監視データを OpenTelemetry 形式で送信できます。
エージェントから目的のエンドポイントへのデータのパイプ処理。 宛先オプションには、Azure Monitor Application Insights、Datadog、OpenTelemetry Protocol (OTLP) と互換性のあるエンドポイントが含まれます。
データの出力方法を再構成する必要がなく、宛先エンドポイントを簡単に変更できます。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 アプリケーションインサイト
- Datadog
- 任意の OTLP エンドポイント (例: New Relic または Honeycomb のどちらか)
注
Microsoft では、Azure Monitor Application Insights に送信されるデータのサポートを提供しています。 データが Microsoft 以外のシステムに格納されると、データ関連のサポートはエンドポイントの組織の責任となります。
次の表に、各宛先に送信できるデータの種類を示します。
| 到着地 | ログ | メトリック | トレース |
|---|---|---|---|
| Azure App Insights | はい | いいえ | はい |
| Datadog | はい | はい | はい |
| OpenTelemetry プロトコル (OTLP) で構成されたエンドポイント | はい | はい | はい |
Azure Monitor アプリケーションインサイト
Application Insights に必要な構成の詳細は、接続文字列のみです。 接続文字列を取得したら、コンテナー アプリの ARM テンプレート、Azure CLI コマンド、または Terraform を使用してエージェントを構成できます。
接続文字列にはインストルメンテーション キーが含まれています。これは、テレメトリを特定の Application Insights リソースに関連付けるために使用される一意識別子です。 インストルメンテーション キーはセキュリティ トークンやセキュリティ キーではなく、シークレットと見なされません。
Application Insights リソースを不正使用から保護する場合は、「Application Insights 用 Microsoft Entra 認証」を参照してください。 ただし、OpenTelemetry データ エージェントからデータを受信するには、Application Insights リソースでローカル認証を許可する必要があります。
このテンプレートをデプロイする前に、<PLACEHOLDERS> を実際の値に置き換えてください。
{
...
"properties": {
"appInsightsConfiguration ": {
"connectionString": "<APP_INSIGHTS_CONNECTION_STRING>"
}
"openTelemetryConfiguration": {
...
"tracesConfiguration":{
"destinations": ["appInsights"]
},
"logsConfiguration": {
"destinations": ["appInsights"]
}
}
}
}
Datadog
環境に対してマネージド OpenTelemetry エージェントを有効にした場合、コンテナー アプリで Datadog エージェントを実行する必要はありません。
OpenTelemetry エージェントの構成には、Datadog インスタンスからの site と key の値が必要です。 次の表に従って、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"]
}
}
}
}
リソースをデプロイするには、<PLACEHOLDERS> を実際の値に置き換えて次の Azure CLI コマンドを実行します。
az deployment group create \
--resource-group <RESOURCE_GROUP> \
--template-file <ARM_TEMPLATE_FILE> \
--parameters <PARAMETER_FILE>
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"]
}
}
}
}
| 名前 | 説明 |
|---|---|
resource-group |
リソース グループの名前。
az configure --defaults group=<NAME> を使用して、既定のグループを構成できます。 |
name |
コンテナー アプリ環境の名前。 |
otlp-name |
OTLP 構成のエンドポイントを識別するために選択する名前。 |
endpoint |
収集されたデータを受信する宛先の URL。 |
insecure |
既定値は true です。 エクスポーターの gRPC 接続に対してクライアント トランスポート セキュリティを有効にするかどうかを定義します。 false の場合は、headers パラメーターが必要です。 |
headers |
'キー=値' 形式のスペース区切りの値。これは、OTLP エンドポイントのセキュリティに必要な情報を提供します。 例: "api-key=key other-config-value=value". |
データ変換先を構成する
エージェントを構成するには、destinations 配列を使用して、アプリケーションがデータを送信するエージェントを定義します。 有効なキーは、appInsights、dataDog、またはカスタム OTLP エンドポイントの名前です。 エージェントの動作は、データ型とエンドポイント関連のオプションに基づいて制御できます。
データ型に基づく場合
| オプション | 例 |
|---|---|
| データ型を選択します。 | ログ、メトリック、トレースを個別に構成できます。 |
| 任意のデータ型を有効または無効にします。 | トレースのみを送信し、他のデータは送信しない場合に選択できます。 |
| 1 つのデータ型を複数のエンドポイントに送信します。 | DataDog と OTLP で構成されたエンドポイントの両方にログを送信できます。 |
| 異なるデータ型をさまざまな場所に送信します。 | トレースを OTLP エンドポイントに送信し、メトリックを DataDog に送信できます。 |
| すべてのデータ型の送信を無効にします。 | OpenTelemetry エージェントを介してデータを送信しないことを選択できます。 |
エンドポイントに基づく場合
- 一度に設定できる Application Insights エンドポイントと Datadog エンドポイントは 1 つだけです。
- 複数の 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 エージェントでは、実行時に一連の環境変数をアプリケーションに自動的に挿入します。
最初の 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 エージェント間でデータをルーティングする方法を制御できます。
| 名前 | 説明 | 例 |
|---|---|---|
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.5 GB RAM
- レプリカ: 単一レプリカ (構成できません)
これらのリソースは Microsoft によって管理され、課金またはリソース消費のメトリックには表示されません。
既知の制限事項
- システム ログや Container Apps 標準メトリックなどのシステム データは、OpenTelemetry エージェントに送信できません。
- Application Insights エンドポイントはメトリックを受け入れません。
- 構成設定は、環境レベルで実行されます。 異なるデータ型を異なる宛先に送信できますが、アプリごとにデータを分割することはできません。 たとえば、同じアプリでメトリックを Datadog に送信し、トレースを App Insights に送信できます。
- マネージド エージェントは、テレメトリ データの gRPC トランスポート プロトコルのみをサポートします。
- マネージド OpenTelemetry エージェントは 1 つのレプリカとして実行され、高可用性のためにスケーリングまたは構成することはできません。
- エージェントの状態と正常性のメトリックは、Azure portal や監視 API では現在公開されていません。
- シークレット (API キーなど) は、テンプレートで直接指定する必要があります。エージェント構成に対する Azure Key Vault 統合は現在サポートされていません。
よく寄せられる質問
コードで OpenTelemetry SDK を参照する必要がありますか?
はい。 SDK はテレメトリ データを作成し、マネージド エージェントはデータのルーティングのみを担当します。
listコマンドが null を返す理由az containerapp env telemetry otlp listを実行すると、値が保護を必要とする機密性の高いトークンである場合、応答はnullされます。OpenTelemetry エージェントのコンピューティング リソースに対して課金されますか?
No. Microsoft は、追加のコンピューティング コストなしでエージェント インフラストラクチャをプロビジョニングおよび管理します。 テレメトリ データを受信する宛先サービスに対してのみ課金されます。
OpenTelemetry エージェントをスケーリングするか、複数のレプリカを実行できますか?
No. マネージド エージェントは現在、固定リソース割り当て (0.5 CPU、1.5 GB RAM) を持つ単一のレプリカとして実行されます。 高可用性構成は現在サポートされていません。
OpenTelemetry エージェントの正常性と状態を監視するにはどうすればよいですか?
エージェントの状態と正常性のメトリックは現在公開されていません。 この機能は、将来のリリースで予定されています。