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"]
}
}
}
}
名前 | 説明 |
---|---|
resource-group |
リソース グループの名前。 az configure --defaults group=<NAME> を使用して、既定のグループを構成できます。 |
name |
コンテナー アプリ環境の名前。 |
otlp-name |
OTLP 構成のエンドポイントを識別するために選択する名前。 |
endpoint |
収集されたデータを受信する宛先の URL。 |
insecure |
既定値は true です。 エクスポーターの gRPC 接続に対してクライアント トランスポート セキュリティを有効にするかどうかを定義します。 false の場合は、headers パラメーターが必要です。 |
headers |
OTLP エンドポイントのセキュリティに必要な情報を提供する、'key=value' 形式のスペース区切り値。 例: "api-key=key other-config-value=value" 。 |
データ変換先を構成する
エージェントを構成するには、destinations
配列を使用して、アプリケーションがデータを送信するエージェントを定義します。 有効なキーは、appInsights
、dataDog
、またはカスタム 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 エンドポイントはログを受け入れません。