Recueillir et lire des données OpenTelemetry dans Azure Container Apps (préversion)
À l’aide d’un agent de données OpenTelemetry avec votre environnement Azure Container Apps, vous pouvez choisir d’envoyer des données d’observabilité dans un format OpenTelemetry en :
Redirigeant les données d’un agent vers un point de terminaison souhaité. Les options de destination incluent Azure Monitor Application Insights, Datadog et tout point de terminaison compatible OTLP (OpenTelemetry Protocol).
Modifiant facilement les points de terminaison de destination sans avoir à reconfigurer la façon dont ils émettent les données et sans avoir à exécuter manuellement un agent OpenTelemetry.
Cet article explique comment installer et configurer un agent OpenTelemetry pour votre application conteneur.
Configurer un agent OpenTelemetry
Les agents OpenTelemetry résident dans votre environnement d’application conteneur. Vous configurez les paramètres d’agent au moyen d’un modèle ARM ou d’appels Bicep vers l’environnement, par le biais de l’interface CLI, ou par le biais de Terraform (via le fournisseur AzAPI).
Chaque type de point de terminaison (Azure Monitor Application Insights, Datadog et OTLP) est associé à des exigences de configuration spécifiques.
Prérequis
L’activation de l’agent OpenTelemetry managé dans votre environnement ne signifie pas automatiquement que l’agent collecte des données. Les agents envoient uniquement des données en fonction de vos paramètres de configuration et instrumentent correctement votre code.
Configurer le code source
Préparez votre application pour la collecte de données en installant le kit de développement logiciel (SDK) OpenTelemetry et suivez les instructions OpenTelemetry pour instrumenter les métriques, les journaux ou les traces.
Initialiser les points de terminaison
Avant de pouvoir envoyer des données à une destination de collecte, vous devez créer une instance du service de destination. Par exemple, si vous souhaitez envoyer des données à Azure Monitor Application Insights, vous devez créer au préalable une instance Application Insights.
L’agent OpenTelemetry managé accepte les destinations suivantes :
- Azure Monitor Application Insights
- Datadog
- Un point de terminaison OTLP (par exemple, New Relic ou Honeycomb)
Le tableau ci-dessous indique le type de données que vous pouvez envoyer à chaque destination :
Destination | Journaux d’activité | Métriques | Traces |
---|---|---|---|
Azure App Insights | Oui | No | Oui |
Datadog | Non | Oui | Oui |
Point de terminaison configuré avec le protocole OpenTelemetry (OTLP) | Oui | Oui | Oui |
Azure Monitor Application Insights
La chaîne de connexion est la seule information de configuration requise d’Application Insights. Une fois que vous disposez de la chaîne de connexion, vous pouvez configurer l’agent au moyen du modèle ARM de votre application conteneur, avec des commandes Azure CLI ou Terraform.
La chaîne de connexion contient une clé d’instrumentation, un identificateur unique utilisé pour associer la télémétrie à une ressource Application Insights spécifique. Les clés d’instrumentation ne sont pas des jetons de sécurité ni des clés de sécurité, et elles ne sont pas considérées comme des secrets.
Si vous souhaitez protéger votre ressource Application Insights contre une mauvaise utilisation, consultez Authentification Microsoft Entra pour Application Insights.
Avant de déployer ce modèle, remplacez les espaces réservés entourés de <>
par vos valeurs.
{
...
"properties": {
"appInsightsConfiguration ": {
"connectionString": "<APP_INSIGHTS_CONNECTION_STRING>"
}
"openTelemetryConfiguration": {
...
"tracesConfiguration":{
"destinations": ["appInsights"]
},
"logsConfiguration": {
"destinations": ["appInsights"]
}
}
}
}
Datadog
La configuration de l’agent Datadog nécessite une valeur pour site
et key
de votre instance Datadog. Collectez ces valeurs à partir de votre instance Datadog en fonction du tableau suivant :
Propriété de l’agent Datadog | Propriété de configuration Container Apps |
---|---|
DD_SITE |
site |
DD_API_KEY |
key |
Une fois que vous disposez de ces informations de configuration, vous pouvez configurer l’agent au moyen du modèle ARM de votre application conteneur ou de commandes Azure CLI.
Évitez de spécifier la valeur d’un secret, par exemple votre clé API Datadog, directement dans un environnement de production. Utilisez plutôt une référence à un secret stocké dans Azure Key Vault.
Vous devez activer le coffre de clés pour le déploiement de modèle. Pour ce faire, créez le coffre de clés avec la propriété enabledForTemplateDeployment
activée, ou exécutez la commande Azure CLI suivante, en remplaçant <KEY_VAULT_NAME>
par votre valeur :
az keyvault update --name <KEY_VAULT_NAME> --enabled-for-template-deployment true
Pour plus d’informations, consultez l’article suivant :
- Utiliser Azure Key Vault pour transmettre une valeur de paramètre sécurisée pendant le déploiement
- Tutoriel : Intégrer Azure Key Vault à votre déploiement de modèle ARM
Créez un fichier de paramètres pour récupérer votre clé API Datadog à partir d’un coffre de clés Azure.
Avant de déployer les fichiers suivants, remplacez les espaces réservés entourés par <>
par vos valeurs.
{
"$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>"
}
}
}
}
Vous pouvez maintenant référencer le paramètre datadogapikey
dans votre modèle ARM.
{
...
"parameters": {
"datadogapikey": {
"type": "securestring"
}
},
"properties": {
...
"openTelemetryConfiguration": {
...
"destinationsConfiguration":{
...
"dataDogConfiguration":{
"site": "<YOUR_DATADOG_SUBDOMAIN>.datadoghq.com",
"key": "<YOUR_DATADOG_KEY>"
}
},
"tracesConfiguration":{
"destinations": ["dataDog"]
},
"metricsConfiguration": {
"destinations": ["dataDog"]
}
}
}
}
Pour déployer la ressource, exécutez la commande Azure CLI suivante, en remplaçant les espaces réservés entourés par <>
par vos valeurs.
az deployment group create \
--resource-group <RESOURCE_GROUP> \
--template-file <ARM_TEMPLATE_FILE> \
--parameters <PARAMETER_FILE>
Point de terminaison OTLP
Un point de terminaison OTLP (OpenTelemetry Protocol) est une destination de données de télémétrie qui consomme des données OpenTelemetry. Dans la configuration de votre application, vous pouvez ajouter plusieurs points de terminaison OTLP. L’exemple ci-dessous ajoute deux points de terminaison et envoie les données suivantes à ces points de terminaison.
Nom du point de terminaison | Données envoyées au point de terminaison |
---|---|
oltp1 |
Métriques et/ou traces |
oltp2 |
Journaux et/ou traces |
Bien que vous puissiez configurer autant de points de terminaison OTLP que vous le souhaitez, chaque point de terminaison doit avoir un nom distinct.
{
"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"]
}
}
}
}
Nom | Description |
---|---|
resource-group |
Nom du groupe de ressources. Vous pouvez configurer le groupe par défaut en utilisant az configure --defaults group=<NAME> . |
name |
Nom de l’environnement Container Apps. |
otlp-name |
Nom que vous sélectionnez pour identifier votre point de terminaison OTLP. |
endpoint |
URL de la destination qui reçoit les données collectées. |
insecure |
La valeur par défaut est true. Indique s’il faut activer la sécurité du transport du client pour la connexion gRPC de l’exportateur. Si la valeur est false, le paramètre headers est obligatoire. |
headers |
Valeurs séparées par un espace, au format « clé=valeur », qui fournissent les informations requises pour la sécurité des points de terminaison OTLP. Exemple : "api-key=key other-config-value=value" . |
Configurer les destinations des données
Pour configurer un agent, utilisez le tableau destinations
pour définir les agents auxquels votre application envoie des données. Les clés valides sont appInsights
, dataDog
ou le nom de votre point de terminaison OTLP personnalisé. Vous pouvez contrôler le comportement d’un agent en fonction des options liées au type de données et au point de terminaison.
Par type de données
Option | Exemple |
---|---|
Sélectionnez un type de données. | Vous pouvez configurer des journaux, des métriques et/ou des traces de manière individuelle. |
Activer ou désactiver un type de données. | Vous pouvez choisir d’envoyer uniquement les traces et aucune autre donnée. |
Envoyer un type de données à plusieurs points de terminaison. | Vous pouvez envoyer les journaux à Datadog et à un point de terminaison OTLP. |
Envoyer différents types de données à différents emplacements. | Vous pouvez envoyer les traces à un point de terminaison OTLP et les métriques à Datadog. |
Désactiver l’envoi de tous les types de données. | Vous pouvez choisir de ne pas envoyer de données via l’agent OpenTelemetry. |
Par point de terminaison
- Vous ne pouvez configurer qu’un seul point de terminaison Application Insights et Datadog à la fois.
- Bien que vous puissiez définir plusieurs points de terminaison OTLP, chacun d’eux doit avoir un nom distinct.
L’exemple de modèle ARM suivant montre comment utiliser un point de terminaison OTLP nommé customDashboard
. Il envoie :
- les traces à App Insights et à
customDashboard
- les journaux à App Insights et à
customDashboard
- les métriques à Datadog et à
customDashboard
{
...
"properties": {
...
"openTelemetryConfiguration": {
...
"tracesConfiguration": {
"destinations": [
"appInsights",
"customDashboard"
]
},
"logsConfiguration": {
"destinations": [
"appInsights",
"customDashboard"
]
},
"metricsConfiguration": {
"destinations": [
"dataDog",
"customDashboard"
]
}
}
}
}
Exemple Configuration d’OpenTelemetry
L’exemple de modèle ARM suivant montre comment configurer votre application conteneur pour collecter des données de télémétrie à l’aide d’Azure Monitor Application Insights, Datadog et avec un agent OTLP personnalisé nommé customDashboard
.
Cet exemple fonctionne avec le fichier de paramètres utilisé pour récupérer la clé API Datadog à partir d’un coffre de clés Azure.
Avant de déployer ce modèle, remplacez les espaces réservés entourés de <>
par vos valeurs.
{
"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"
]
}
}
}
}
Pour plus d’informations, consultez Microsoft.App/managedEnvironments.
Variables d'environnement
L’agent OpenTelemetry injecte automatiquement un ensemble de variables d’environnement dans votre application au moment de l’exécution.
Les deux premières variables d’environnement suivent la configuration standard de l’exportateur OpenTelemetry et sont utilisées dans les kits de développement logiciel standard OTLP. Si vous définissez explicitement la variable d’environnement dans la spécification de l’application conteneur, votre valeur remplace la valeur injectée automatiquement.
Pour en savoir plus sur la configuration de l’exportateur OTLP, consultez cet article.
Nom | Description |
---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
URL de point de terminaison de base pour un type de signal, avec un numéro de port éventuellement spécifié. Ce paramètre est utile lorsque vous envoyez plusieurs signaux à un même point de terminaison et que vous souhaitez qu’une seule variable d’environnement contrôle le point de terminaison. Exemple : http://otel.service.k8se-apps:4317/ |
OTEL_EXPORTER_OTLP_PROTOCOL |
Spécifie le protocole de transport OTLP utilisé pour toutes les données de télémétrie. L’agent managé prend uniquement en charge grpc . Valeur : grpc . |
Les trois autres variables d’environnement sont spécifiques à Azure Container Apps et sont toujours injectées. Ces variables contiennent les URL des points de terminaison de l’agent pour chaque type de données spécifique (journaux, métriques, traces).
Ces variables ne sont nécessaires que si vous utilisez l’agent OpenTelemetry managé et un autre agent OpenTelemetry. L’utilisation de ces variables vous permet de contrôler l’acheminement des données entre les différents agents OpenTelemetry.
Nom | Description | Exemple |
---|---|---|
CONTAINERAPP_OTEL_TRACING_GRPC_ENDPOINT |
URL du point de terminaison pour les données de trace uniquement. | http://otel.service.k8se-apps:43178/v1/traces/ |
CONTAINERAPP_OTEL_LOGGING_GRPC_ENDPOINT |
URL du point de terminaison pour les données de journal uniquement. | http://otel.service.k8se-apps:43178/v1/logs/ |
CONTAINERAPP_OTEL_METRIC_GRPC_ENDPOINT |
URL du point de terminaison pour les données de métrique uniquement. | http://otel.service.k8se-apps:43178/v1/metrics/ |
Coûts de l’agent OpenTelemetry
Vous êtes facturé pour le calcul sous-jacent de l’agent.
Consultez le service de destination pour connaître la structure et les conditions de facturation correspondantes. Par exemple, si vous envoyez des données à Azure Monitor Application Insights et à Datadog, vous êtes redevable des frais appliqués par les deux services.
Limitations connues
- Les agents OpenTelemetry sont en préversion.
- Les données système, telles que les journaux système ou les métriques standard Container Apps, ne sont pas envoyées à l’agent OpenTelemetry.
- Le point de terminaison Application Insights n’accepte pas les métriques.
- Le point de terminaison Datadog n’accepte pas les journaux.