Azure App Service - Code Windows
Présentation
L’extension Datadog pour Azure App Service fournit des fonctionnalités de surveillance en complément de l’intégration Datadog-Azure, qui fournit des métriques et des logs.
- Traçage APM entièrement distribué grâce à l’instrumentation automatique.
- Vues personnalisées des services et des traces APM affichant les métriques et les métadonnées pertinentes d’Azure App Service.
- Prise en charge de l’instrumentation APM manuelle pour personnaliser les spans.
Trace_ID injection dans les logs d’application.- Prise en charge de la soumission de métriques personnalisées à l’aide de DogStatsD.
L'extension prend en charge les éléments suivants :
Pour toute fonction Azure non-.NET ou toute configuration .NET sur un plan autre que Dedicated/Premium, vous devez utiliser la couche de compatibilité Serverless.
Vous souhaitez obtenir la prise en charge d’autres types de ressources ou environnements d’exécution App Service ? Inscrivez-vous pour être averti lorsqu’une version préliminaire sera disponible.
Environnements d’exécution pris en charge
Les extensions APM Datadog pour .NET, Java et Node.js prennent en charge les environnements d’exécution suivants :
| Framework | Environnements d’exécution pris en charge |
|---|
| .NET | ASPNET:V3.5, ASPNET:V4.8, dotnet:8, dotnet:9, dotnet:10 |
| Java | JAVA:8, JAVA:11, JAVA:17, JAVA:21, TOMCAT:9.0-java8, TOMCAT:9.0-java11, TOMCAT:9.0-java17, TOMCAT:9.0-java21, TOMCAT:10.1-java8, TOMCAT:10.1-java11, TOMCAT:10.1-java17, TOMCAT:10.1-java21, TOMCAT:11.0-java8, TOMCAT:11.0-java11, TOMCAT:11.0-java17, TOMCAT:11.0-java21 |
| Node.js | NODE:20LTS, NODE:22LTS |
Notes spécifiques à l’extension
L’instrumentation automatique de Datadog repose sur l’API de profilage .NET CLR. Cette API n’autorise qu’un seul abonné (par exemple, le traceur .NET de Datadog avec le profileur activé). Pour garantir une visibilité maximale, exécutez une seule solution APM au sein de votre environnement d’application.
De plus, si vous utilisez l’intégration Azure Native, vous pouvez utiliser la ressource Datadog dans Azure pour ajouter l’extension à vos applications .NET. Pour obtenir des instructions, consultez la section de l’extension App Service du guide d’intégration Azure Native de Datadog.
La prise en charge des applications Web Java est en préversion pour l’extension v2.4+.
Il n’y a aucune incidence sur la facturation pour le traçage des applications Web Java pendant cette période.
Installation
Datadog recommande d’effectuer des mises à jour régulières vers la dernière version de l’extension pour garantir des performances, une stabilité et une disponibilité optimales des fonctionnalités. Notez que l’installation initiale ainsi que les mises à jour ultérieures nécessitent que votre application Web soit complètement arrêtée pour s’installer/se mettre à jour correctement.
Si ce n’est pas déjà fait, configurez l’intégration Datadog-Azure. Vous pouvez vérifier que votre intégration Azure est correctement configurée en vous assurant que vous voyez les métriques azure.app_services.count ou azure.functions.count dans Datadog.
Cette étape est essentielle pour la corrélation métrique/trace et les vues fonctionnelles du panneau de trace, et améliore l'expérience globale d'utilisation de Datadog avec Azure App Services.
Localement
Installez la CLI Datadog
npm install -g @datadog/datadog-ci @datadog/datadog-ci-plugin-aas
Installez la CLI Azure et authentifiez-vous avec az login.
Ensuite, exécutez la commande suivante pour configurer le conteneur sidecar :
export DD_API_KEY=<DATADOG_API_KEY>
export DD_SITE=<DATADOG_SITE>
datadog-ci aas instrument -s <subscription-id> -g <resource-group-name> -n <app-service-name>
Définissez votre site Datadog sur . La valeur par défaut est datadoghq.com.
L’interface de ligne de commande Datadog déduira automatiquement l’environnement d’exécution de votre application et installera l’application correspondante. Si cela échoue pour une raison quelconque, vous pouvez remplacer ce comportement en spécifiant un environnement d’exécution avec l’indicateur --windows-runtime.
Des indicateurs supplémentaires, comme --service et --env, peuvent être utilisés pour définir les tags de service et d’environnement. Pour une liste complète des options, exécutez datadog-ci aas instrument --help.
datadog-ci aas instrument n’a besoin d’être exécuté qu’une seule fois pour configurer l’instrumentation. Vous n’avez pas besoin de le réexécuter à chaque déploiement de code, réexécutez-le uniquement pour modifier votre configuration Datadog.
Azure Cloud Shell
Pour utiliser la CLI Datadog dans Azure Cloud Shell, ouvrez un cloud shell, définissez votre clé d’API et votre site dans les variables d’environnement DD_API_KEY et DD_SITE, et utilisez npx pour exécuter la CLI directement :
export DD_API_KEY=<DATADOG_API_KEY>
export DD_SITE=<DATADOG_SITE>
npx @datadog/datadog-ci aas instrument -s <subscription-id> -g <resource-group-name> -n <app-service-name>
Le module Terraform Datadog pour les applications Web Windows enveloppe la ressource azurerm_windows_web_app et configure automatiquement votre application Web pour Datadog Serverless Monitoring en ajoutant les variables d’environnement requises et l’extension d’application Web Windows pour votre environnement d’exécution.
Si vous n’avez pas encore configuré Terraform, installez Terraform, créez un nouveau répertoire et créez un fichier appelé main.tf.
Ensuite, ajoutez ce qui suit à votre configuration Terraform, en la mettant à jour si nécessaire selon vos besoins :
variable "datadog_api_key" {
description = "Your Datadog API key"
type = string
sensitive = true
}
provider "azurerm" {
features {}
subscription_id = "00000000-0000-0000-0000-000000000000" // Replace with your subscription ID
}
resource "azurerm_service_plan" "my_asp" {
name = "my-app-service-plan" // Replace with your app service plan name
resource_group_name = "my-resource-group" // Replace with your resource group
os_type = "Windows"
location = "eastus"
sku_name = "P1v2"
}
module "my_web_app" {
source = "DataDog/web-app-datadog/azurerm//modules/windows"
version = "~> 1.0"
name = "my-web-app" // Replace with your web app name
resource_group_name = "my-resource-group" // Replace with your resource group
service_plan_id = azurerm_service_plan.my_asp.id
location = "eastus"
datadog_api_key = var.datadog_api_key
datadog_service = "my-service" // Replace with your service name
datadog_env = "prod" // Replace with your environment (e.g. prod, staging)
datadog_version = "0.0.0" // Replace with your application version
site_config = {
application_stack = {
node_version = "~22" // change for your specific runtime
}
}
app_settings = {
DD_TRACE_ENABLED = "true" // Example setting
}
}
Enfin, exécutez terraform apply et suivez les instructions.
Le module d’application Web Windows Datadog déploie uniquement la ressource et l’extension d’application Web, vous devez donc déployer votre code séparément.
Mettez à jour votre application Web existante pour inclure les paramètres d’application et l’extension Datadog nécessaires, comme suit :
// Version: 1.0.0
@secure()
param datadogApiKey string
resource webApp 'Microsoft.Web/sites@2025-03-01' = {
// ...
properties: {
// ...
siteConfig: {
// ...
appSettings: [
//... Your existing app settings
{ name: 'DD_API_KEY', value: datadogApiKey }
{ name: 'DD_SITE', value: 'datadoghq.com' } // Replace with your Datadog site
{ name: 'DD_SERVICE', value: 'my-service' } // Replace with your service name
{ name: 'DD_ENV', value: 'prod' } // Replace with your environment (e.g. prod, staging)
{ name: 'DD_VERSION', value: '0.0.0' } // Replace with your application version
// Add any additional options here
]
}
}
}
resource datadogExtension 'Microsoft.Web/sites/siteextensions@2025-03-01' = {
parent: webApp
// Uncomment the extension for your runtime:
// name: 'Datadog.AzureAppServices.Node.Apm'
// name: 'Datadog.AzureAppServices.DotNet'
// name: 'Datadog.AzureAppServices.Java.Apm'
}
Déployez votre modèle mis à jour :
az deployment group create --resource-group <RESOURCE GROUP> --template-file <TEMPLATE FILE>
Remarque : Vous devrez arrêter et démarrer l’application manuellement (ou via un script), sinon le traçage automatique ne fonctionnera pas. Pour les mises à jour, vous devez vous assurer que l’application est arrêtée avant de déployer le modèle, et redémarrée une fois le déploiement terminé.
Consultez l’Manualonglet pour obtenir les descriptions de toutes les variables d’environnement.
Mettez à jour votre application Web existante pour inclure les paramètres d’application Datadog et le sidecar nécessaires, comme suit :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": { "version": "1.0.0" },
"parameters": {
"webAppName": {
"type": "string"
},
// ...
"datadogApiKey": {
"type": "securestring"
}
},
"resources": {
"webApp": {
"type": "Microsoft.Web/sites",
"apiVersion": "2025-03-01",
"name": "[parameters('webAppName')]",
// ...
"properties": {
// ...
"siteConfig": {
// ...
"appSettings": [
//... Your existing app settings
{ "name": "DD_API_KEY", "value": "[parameters('datadogApiKey')]" },
{ "name": "DD_SITE", "value": "datadoghq.com" }, // Replace with your Datadog site
{ "name": "DD_SERVICE", "value": "my-service" }, // Replace with your service name
{ "name": "DD_ENV", "value": "prod" }, // Replace with your environment (e.g. prod, staging)
{ "name": "DD_VERSION", "value": "0.0.0" }, // Replace with your application version
// Add any additional options here
]
}
}
},
"datadogExtension": {
"type": "Microsoft.Web/sites/siteextensions",
"apiVersion": "2025-03-01",
// Uncomment the extension for your runtime:
// "name": "[concat(parameters('webAppName'), '/Datadog.AzureAppServices.Node.Apm')]"
// "name": "[concat(parameters('webAppName'), '/Datadog.AzureAppServices.DotNet')]"
// "name": "[concat(parameters('webAppName'), '/Datadog.AzureAppServices.Java.Apm')]"
}
}
}
Déployez votre modèle mis à jour :
az deployment group create --resource-group <RESOURCE GROUP> --template-file <TEMPLATE FILE>
Remarque : Vous devrez arrêter et démarrer l’application manuellement (ou via un script), sinon le traçage automatique ne fonctionnera pas. Pour les mises à jour, vous devez vous assurer que l’application est arrêtée avant de déployer le modèle, et redémarrée une fois le déploiement terminé.
Consultez l’Manualonglet pour obtenir les descriptions de toutes les variables d’environnement.
Dans votre portail Azure, accédez au dashboard de l’application Azure que vous souhaitez instrumenter avec Datadog.
Configurez les paramètres d’application suivants :
Variables d’environnement requises
DD_API_KEY- Valeur : Votre clé d’API Datadog.
Consultez Organization Settings > API Keys dans Datadog.
DD_SITE- Valeur : Votre site Datadog
Votre site Datadog. Par défaut datadoghq.com.
Unified Service Tagging
Datadog recommande de marquer votre application avec les tags env, service et version pour le unified service tagging.
DD_SERVICE- Valeur : Le nom de service de votre application.
DD_ENV- Valeur : Le nom d’environnement de votre application.
Il n’y a pas de valeur par défaut pour ce champ.
DD_VERSION- Valeur : La version de votre application.
Il n’y a pas de valeur par défaut pour ce champ.
Variables d’environnement supplémentaires
DD_LOGS_INJECTION- Valeur :
true (recommandé)
Active la corrélation trace-log en injectant des identifiants de trace dans les logs de votre application.
Cela vous permet de corréler les logs avec les traces dans l’interface utilisateur Datadog.
Cliquez sur Save. Cela redémarre votre application.
Arrêtez votre application en cliquant sur Stop.
Vous devez arrêter votre application pour installer Datadog avec succès.
Dans votre portail Azure, accédez à la page Extensions et sélectionnez l’extension Datadog APM.
Acceptez les conditions légales, cliquez sur OK et attendez que l’installation se termine.
Cette étape nécessite que votre application soit à l'arrêt.
Démarrez l’application principale, cliquez sur Start :
Vérifiez que l’extension est installée et en cours d’exécution en consultant la page Extensions dans votre portail Azure.
Do not set the following environment variables in your serverless environment. They should only be set in non-serverless environments.
DD_AGENT_HOSTDD_TRACE_AGENT_URL
Emplacements de déploiement
L'instrumentation des emplacements de déploiement est en préversion. Pendant la préversion, la télémétrie des emplacements apparaît sous l'application web principale. Pour distinguer la télémétrie des emplacements de celle de la production, configurez
unified service tagging avec des valeurs distinctes pour chaque emplacement.
Pour instrumenter un emplacement de déploiement au lieu de l’application web principale, utilisez l’une des méthodes suivantes.
À l’aide de Datadog CLI (v5.9.0+), ajoutez le flag --slot. Utilisez --service, --env et --version pour définir des valeurs de unified service tagging distinctes pour l’emplacement.
Pour trouver les noms de vos emplacements de déploiement, exécutez :
az webapp deployment slot list --query '[].name' -o tsv -g <resource-group> -n <web-app>
datadog-ci aas instrument -s <subscription-id> -g <resource-group-name> -n <app-service-name> \
--slot <slot-name> \
--service <service-name> --env <slot-env> --version <app-version>
Alternativement, fournissez l’ID de ressource complet de l’emplacement avec le flag --resource-id :
datadog-ci aas instrument --resource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<app-name>/slots/<slot-name> \
--service <service-name> --env <slot-env> --version <app-version>
Remarque : Lorsque vous transmettez --env, Datadog CLI marque automatiquement DD_ENV comme sticky setting, de sorte que votre tag env persiste lors des échanges d’emplacements.
Utilisez le module Datadog Windows Web App Slot :
module "my_web_app_slot" {
source = "DataDog/web-app-datadog/azurerm//modules/windows-slot"
version = "~> 1.0"
name = "staging" // Replace with your slot name
app_service_id = module.my_web_app.id // Reference to your main web app
resource_group_name = "my-resource-group" // Replace with your resource group
datadog_api_key = var.datadog_api_key
datadog_service = "my-service" // Replace with your service name
datadog_env = "staging" // Set a distinct value for each slot
datadog_version = "0.0.0" // Replace with your application version
site_config = {
application_stack = {
node_version = "~22" // change for your specific runtime
}
}
app_settings = {
DD_TRACE_ENABLED = "true" // Example setting
}
}
Exécutez terraform apply et suivez les instructions.
Remarque : Lorsque datadog_env est défini sur votre module d’application web principal, le module marque DD_ENV comme sticky setting, de sorte que votre tag env persiste lors des échanges d’emplacements.
Mettez à jour votre modèle pour cibler un emplacement de déploiement au lieu de l’application web principale :
// Version: 1.0.0
@secure()
param datadogApiKey string
param webAppName string
param slotName string
@description('Names of app settings already marked slot-sticky on this web app. Pass [] for a new app with no existing sticky settings. This template does a full replace of slotConfigNames — omitting an existing sticky setting name will de-sticky it.')
param existingStickyAppSettingNames array = []
resource webApp 'Microsoft.Web/sites@2025-03-01' existing = {
name: webAppName
}
resource slot 'Microsoft.Web/sites/slots@2025-03-01' = {
parent: webApp
name: slotName
// ...
properties: {
// ...
siteConfig: {
// ...
appSettings: [
//... Your existing app settings
{ name: 'DD_API_KEY', value: datadogApiKey }
{ name: 'DD_SITE', value: 'datadoghq.com' } // Replace with your Datadog site
{ name: 'DD_SERVICE', value: 'my-service' } // Replace with your service name
{ name: 'DD_ENV', value: 'staging' } // Set a distinct value for each slot
{ name: 'DD_VERSION', value: '0.0.0' } // Replace with your application version
// Add any additional options here
]
}
}
}
// Marks DD_ENV as slot-sticky so your `env` tag persists across slot swaps. Replaces the
// full slotConfigNames list — existingStickyAppSettingNames must include any settings already
// marked sticky or they will be de-stickied.
resource stickySettings 'Microsoft.Web/sites/config@2025-03-01' = {
parent: webApp
name: 'slotConfigNames'
properties: {
appSettingNames: union(existingStickyAppSettingNames, ['DD_ENV'])
}
dependsOn: [slot]
}
resource datadogExtension 'Microsoft.Web/sites/slots/siteextensions@2025-03-01' = {
parent: slot
// Uncomment the extension for your runtime:
// name: 'Datadog.AzureAppServices.Node.Apm'
// name: 'Datadog.AzureAppServices.DotNet'
// name: 'Datadog.AzureAppServices.Java.Apm'
}
Déployez votre modèle mis à jour :
az deployment group create --resource-group <RESOURCE GROUP> --template-file <TEMPLATE FILE>
Remarque : Vous devez arrêter et démarrer l’emplacement (et non l’application principale) pour que l’extension prenne effet.
Remarque : Les paramètres d’application Azure sont échangés entre les emplacements par défaut. La ressource slotConfigNames ci-dessus marque DD_ENV comme sticky setting, de sorte que votre tag env persiste lors des échanges d’emplacements.
La ressource slotConfigNames effectue un remplacement complet de la liste des sticky settings. Transmettez tous les paramètres déjà marqués comme sticky dans existingStickyAppSettingNames, ou [] pour une nouvelle application. Tout nom omis cesse d’être sticky.
Mettez à jour votre modèle pour cibler un emplacement de déploiement au lieu de l’application web principale :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": { "version": "1.0.0" },
"parameters": {
"webAppName": {
"type": "string"
},
"slotName": {
"type": "string"
},
// ...
"datadogApiKey": {
"type": "securestring"
},
"existingStickyAppSettingNames": {
"type": "array",
"defaultValue": [],
"metadata": { "description": "Names of app settings already marked slot-sticky on this web app. Pass [] for a new app with no existing sticky settings. This template does a full replace of slotConfigNames — omitting an existing sticky setting name will de-sticky it." }
}
},
"resources": {
"slot": {
"type": "Microsoft.Web/sites/slots",
"apiVersion": "2025-03-01",
"name": "[concat(parameters('webAppName'), '/', parameters('slotName'))]",
// ...
"properties": {
// ...
"siteConfig": {
// ...
"appSettings": [
//... Your existing app settings
{ "name": "DD_API_KEY", "value": "[parameters('datadogApiKey')]" },
{ "name": "DD_SITE", "value": "datadoghq.com" }, // Replace with your Datadog site
{ "name": "DD_SERVICE", "value": "my-service" }, // Replace with your service name
{ "name": "DD_ENV", "value": "staging" }, // Set a distinct value for each slot
{ "name": "DD_VERSION", "value": "0.0.0" }, // Replace with your application version
// Add any additional options here
]
}
}
},
"datadogExtension": {
"type": "Microsoft.Web/sites/slots/siteextensions",
"apiVersion": "2025-03-01",
// Uncomment the extension for your runtime:
// "name": "[concat(parameters('webAppName'), '/', parameters('slotName'), '/Datadog.AzureAppServices.Node.Apm')]"
// "name": "[concat(parameters('webAppName'), '/', parameters('slotName'), '/Datadog.AzureAppServices.DotNet')]"
// "name": "[concat(parameters('webAppName'), '/', parameters('slotName'), '/Datadog.AzureAppServices.Java.Apm')]"
},
// Marks DD_ENV as slot-sticky so your `env` tag persists across slot swaps. Replaces the
// full slotConfigNames list — existingStickyAppSettingNames must include any settings
// already marked sticky or they will be de-stickied.
"stickySettings": {
"type": "Microsoft.Web/sites/config",
"apiVersion": "2025-03-01",
"name": "[concat(parameters('webAppName'), '/slotConfigNames')]",
"properties": {
"appSettingNames": "[union(parameters('existingStickyAppSettingNames'), createArray('DD_ENV'))]"
},
"dependsOn": [
"[resourceId('Microsoft.Web/sites/slots', parameters('webAppName'), parameters('slotName'))]"
]
}
}
}
Déployez votre modèle mis à jour :
az deployment group create --resource-group <RESOURCE GROUP> --template-file <TEMPLATE FILE>
Remarque : Vous devez arrêter et démarrer l’emplacement (et non l’application principale) pour que l’extension prenne effet.
Remarque : Les paramètres d’application Azure sont échangés entre les emplacements par défaut. La ressource slotConfigNames ci-dessus marque DD_ENV comme sticky setting, de sorte que votre tag env persiste lors des échanges d’emplacements.
La ressource slotConfigNames effectue un remplacement complet de la liste des sticky settings. Transmettez tous les paramètres déjà marqués comme sticky dans existingStickyAppSettingNames, ou [] pour une nouvelle application. Tout nom omis cesse d’être sticky.
Vous utilisez Azure Functions ? Consultez
l'extension APM .NET pour Azure Functions pour obtenir des instructions d'installation spécifiques aux Function Apps, y compris des conseils pour éviter les échecs de verrouillage de fichiers lors de l'installation de l'extension.
Métriques personnalisées
L’extension Azure App Service inclut une instance de DogStatsD, le service d’agrégation de métriques de Datadog. Cela vous permet de soumettre des métriques personnalisées, des checks de service et des événements directement à Datadog depuis Azure Web Apps et Functions avec l’extension.
L’écriture de métriques personnalisées et de checks dans Azure App Service est similaire au processus utilisé pour une application sur un host exécutant le Datadog Agent. Contrairement au processus de configuration standard de DogStatsD, il n’est pas nécessaire de définir des ports ou un nom de serveur lors de l’initialisation de la configuration de DogStatsD. Il existe des variables d’environnement ambiantes dans Azure App Service qui déterminent la manière dont les métriques sont envoyées (nécessite la version 6.0.0+ du client DogStatsD).
Pour soumettre des métriques personnalisées à Datadog depuis Azure App Service à l’aide de l’extension :
- Add the DogStatsD NuGet package to your Visual Studio project.
- Initialize DogStatsD and write custom metrics in your application.
- Deploy your code to Azure App Service.
- If you have not already, install the Datadog App Service extension.
To send metrics, use this code:
// Configure your DogStatsd client and configure any tags
if (!DogStatsd.Configure(new StatsdConfig() { ConstantTags = new[] { "app:sample.mvc.aspnetcore" } }))
{
// `Configure` returns false if the necessary environment variables are not present.
// These environment variables are present in Azure App Service, but
// need to be set in order to test your custom metrics: DD_API_KEY:{api_key}, DD_AGENT_HOST:localhost
// Ignore or log the error as it suits you
Console.WriteLine("Cannot initialize DogstatsD.");
}
// Send a metric
DogStatsd.Increment("sample.startup");
- Ajoutez le client DogStatsD à votre projet.
- Initialisez DogStatsD et écrivez des métriques personnalisées dans votre application.
- Déployez votre code sur une Azure Web App prise en charge.
- Si ce n’est pas déjà fait, installez l’extension Datadog App Service.
Pour envoyer des métriques, utilisez ce code :
// Configure your DogStatsd client and configure any tags
StatsDClient client = new NonBlockingStatsDClientBuilder()
.constantTags("app:sample.service")
.build();
// Send a metric
client.Increment("sample.startup");
- Initialisez DogStatsD et écrivez des métriques personnalisées dans votre application.
- Déployez votre code sur une Azure Web App prise en charge.
- Si ce n’est pas déjà fait, installez l’extension Node.js Azure App Service de Datadog.
Vous n'avez pas besoin d'installer un client DogStatsD Node.js, car il est inclus dans le traceur Node.js (dd-trace) empaqueté dans l'extension Azure App Service.
Pour envoyer des métriques, utilisez ce code :
const tracer = require('dd-trace');
tracer.init();
tracer.dogstatsd.increment('example_metric.increment', 1, { environment: 'dev' });
tracer.dogstatsd.decrement('example_metric.decrement', 1, { environment: 'dev' });
Le Datadog Node.js tracer,
dd-trace, est empaqueté dans l'extension Azure App Service. Il est automatiquement ajouté au
NODE_PATH.
Vous n'avez pas besoin d'ajouter dd-trace en tant que dépendance dans package.json. L'ajout explicite de
dd-trace en tant que dépendance peut remplacer la version fournie par l'extension. Pour les tests locaux, consultez les
notes de version pour trouver la version appropriée du traceur Node.js pour votre version de l'extension Azure App Service.
Remarque : Pour envoyer uniquement des métriques personnalisées (tout en désactivant le traçage), définissez les variables suivantes dans la configuration de votre application :
- Définissez
DD_TRACE_ENABLED sur false. - Définissez
DD_AAS_ENABLE_CUSTOM_METRICS sur true.
En savoir plus sur les métriques personnalisées.
Journalisation
Journalisation des applications
You can send logs from your application in Azure App Service to Datadog in one of the following ways:
Both methods allow trace ID injection, making it possible to connect logs and traces in Datadog. To enable trace ID injection with the extension, add the application setting DD_LOGS_INJECTION:true.
L’envoi de logs depuis votre application dans Azure App Service vers Datadog nécessite la diffusion des logs vers Datadog directement depuis votre application. La soumission de logs avec cette méthode permet l’injection d’ID de trace, ce qui permet de connecter les logs et les traces dans Datadog.
L’envoi de logs depuis votre application dans Azure App Service vers Datadog nécessite la diffusion des logs vers Datadog directement depuis votre application. La soumission de logs avec cette méthode permet l’injection d’ID de trace, ce qui permet de connecter les logs et les traces dans Datadog.
Variables d’environnement pour la journalisation
Configurez ces variables d’environnement dans les paramètres de votre application Azure App Service pour une collecte optimale des logs :
| Variable | Description | Exemple |
|---|
DD_SERVICE | Nom du service de votre application | my-web-app |
DD_ENV | Environnement de votre application | production, staging, development |
DD_LOGS_INJECTION | Activer la corrélation trace-log | true |
Bonnes pratiques de journalisation
- Activer la corrélation de trace : Définissez
DD_LOGS_INJECTION=true pour corréler les logs avec les traces - Définissez des noms de service appropriés : utilisez
DD_SERVICE pour vous assurer que les logs apparaissent avec le nom de service correct - Utilisez la journalisation structurée : implémentez la journalisation structurée dans votre application pour un meilleur parsing des logs
Remarque : l’injection d’ID de trace se produit à l’intérieur de votre application. Les logs de ressources Azure sont générés par Azure dans le plan de gestion et n’incluent donc pas l’ID de trace.
Exemple de code : journalisation native Microsoft
Un exemple de configuration de la journalisation dans une application .NET à l’aide de Microsoft.Extensions.Logging :
using Microsoft.Extensions.Logging;
public class WeatherForecastController : ControllerBase
{
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IActionResult Get()
{
_logger.LogInformation("Processing weather forecast request");
// Your business logic here
var forecast = GetWeatherForecast();
_logger.LogInformation("Weather forecast retrieved for user: {UserId}", userId);
return Ok(forecast);
}
}
Configuration de Program.cs
using Microsoft.Extensions.Logging;
var builder = WebApplication.CreateBuilder(args);
// Configure logging
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
builder.Logging.AddDebug();
// Add structured logging with JSON format
builder.Logging.AddJsonConsole(options =>
{
options.JsonWriterOptions = new JsonWriterOptions
{
Indented = true
};
});
var app = builder.Build();
// ... rest of your application configuration
Configuration d’appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
},
"Console": {
"FormatterName": "json",
"FormatterOptions": {
"IncludeScopes": true,
"TimestampFormat": "yyyy-MM-dd HH:mm:ss "
}
}
}
}
Cette configuration inclut automatiquement la corrélation de trace lorsque DD_LOGS_INJECTION=true est défini dans les paramètres de votre application Azure App Service.
Consultez [Diffuser les logs directement vers l’Agent][1] pour configurer la journalisation des applications pour Java dans Azure App Service.
[1]: /logs/log_collection/java/ stream-logs-directly-to-the-agent
Gestion par programmation
Datadog fournit des scripts pour mettre à jour ou installer l’extension Azure App Service à l’aide de PowerShell. La gestion des extensions par script vous permet de mettre à jour les extensions en masse par groupe de ressources et de désigner l’installation de versions spécifiques de l’extension de site. Vous pouvez également utiliser des scripts pour ajouter l’extension par programmation dans les pipelines CI/CD, ainsi que pour découvrir et mettre à jour les extensions déjà installées.
Prérequis
Installation de l’extension pour la première fois
Le script d’installation ajoute la dernière version de l’extension à une application Azure Web App ou Azure Function App. Cela se produit par application, plutôt qu’au niveau du groupe de ressources.
Ouvrez l’interface de ligne de commande Azure (Azure CLI) ou Azure Cloud Shell.
Téléchargez le script d’installation à l’aide de la commande suivante :
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/DataDog/datadog-aas-extension/master/management-scripts/extension/install-latest-extension.ps1" -OutFile "install-latest-extension.ps1"
Exécutez la commande suivante en transmettant les arguments requis et facultatifs selon vos besoins.
.\install-latest-extension.ps1 -Username <USERNAME> -Password <PASSWORD> -SubscriptionId <SUBSCRIPTION_ID> -ResourceGroup <RESOURCE_GROUP_NAME> -SiteName <SITE_NAME> -DDApiKey <DATADOG_API_KEY> -DDSite <DATADOG_SITE> -DDEnv <DATADOG_ENV> -DDService <DATADOG_SERVICE> -DDVersion <DATADOG_VERSION> [-SlotName <SLOT_NAME>]
Remarque : Les arguments suivants sont requis pour la commande ci-dessus :
<USERNAME> : Votre nom d’utilisateur au niveau de l’utilisateur Azure.<PASSWORD> : Votre mot de passe au niveau de l’utilisateur Azure.<SUBSCRIPTION_ID> : Votre ID d’abonnement Azure.<RESOURCE_GROUP_NAME> : Le nom de votre groupe de ressources Azure.<SITE_NAME> : Le nom de votre application.<DATADOG_API_KEY> : Votre clé d’API Datadog.
Définissez également DATADOG_SITE sur votre site Datadog. DATADOG_SITE a pour valeur par défaut datadoghq.com. Votre site est : .
Pour cibler un emplacement de déploiement au lieu de l’application principale, ajoutez -SlotName <SLOT_NAME>. Sur les Azure Function Apps, cela applique également automatiquement le paramètre d’emplacement fixe WEBSITE_PRIVATE_EXTENSIONS=0 pour éviter les échecs d’installation de l’extension. Consultez l’extension APM .NET pour Azure Functions pour plus de détails.
Mise à jour de l’extension pour un groupe de ressources
Le script de mise à jour s’applique à un groupe de ressources entier. Ce script met à jour chaque Web App ou Function App sur laquelle l’extension est installée. Les applications App Service sur lesquelles l’extension Datadog n’est pas installée ne sont pas affectées.
Ouvrez l’interface de ligne de commande Azure (Azure CLI) ou Azure Cloud Shell.
Téléchargez le script de mise à jour à l’aide de la commande suivante :
$baseUri="https://raw.githubusercontent.com/DataDog/datadog-aas-extension/master/management-scripts/extension"; Invoke-WebRequest -Uri "$baseUri/update-all-site-extensions.ps1" -OutFile "update-all-site-extensions.ps1"; Invoke-WebRequest -Uri "$baseUri/install-latest-extension.ps1" -OutFile "install-latest-extension.ps1"
Exécutez la commande suivante. Tous les arguments sont obligatoires.
.\update-all-site-extensions.ps1 -SubscriptionId <SUBSCRIPTION_ID> -ResourceGroup <RESOURCE_GROUP_NAME> -Username <USERNAME> -Password <PASSWORD>
Installer une version spécifique de l’extension
L’interface utilisateur d’Azure App Service ne prend pas en charge la possibilité d’installer une version spécifique d’une extension. Vous pouvez le faire avec le script d’installation ou de mise à jour.
Installer une version spécifique sur une ressource unique
Pour installer une version spécifique sur une instance unique, suivez les instructions d’installation de l’extension pour la première fois et ajoutez le paramètre -ExtensionVersion à la commande d’installation.
.\install-latest-extension.ps1 -Username <USERNAME> -Password <PASSWORD> -SubscriptionId <SUBSCRIPTION_ID> -ResourceGroup <RESOURCE_GROUP_NAME> -SiteName <SITE_NAME> -DDApiKey <DATADOG_API_KEY> -ExtensionVersion <EXTENSION_VERSION>
Remplacez <EXTENSION_VERSION> par la version de l’extension que vous souhaitez installer. Par exemple, 1.4.0.
Installer une version spécifique sur un groupe de ressources entier
Pour installer une version spécifique pour un groupe de ressources, suivez les instructions de mise à jour de l’extension pour un groupe de ressources et ajoutez le paramètre -ExtensionVersion à la commande d’installation.
.\update-all-site-extensions.ps1 -SubscriptionId <SUBSCRIPTION_ID> -ResourceGroup <RESOURCE_GROUP_NAME> -Username <USERNAME> -Password <PASSWORD> -ExtensionVersion <EXTENSION_VERSION>
Remplacez <EXTENSION_VERSION> par la version de l’extension que vous souhaitez installer. Par exemple, 1.4.0.
Modèle ARM
De nombreuses organisations utilisent des modèles Azure Resource Management (ARM) pour mettre en œuvre la pratique de l’infrastructure en tant que code. Pour intégrer l’extension App Service dans ces modèles, incorporez les modèles d’installation de l’extension App Service de Datadog dans vos déploiements afin d’ajouter l’extension et de la configurer avec vos ressources App Service.
La prise en charge des applications Web Java est en préversion pour l'extension v2.4+. La gestion par programmation n'est pas disponible pour les applications Web Java.
Êtes-vous intéressé par la prise en charge d'autres types de ressources App Service ou de runtimes ?
Inscrivez-vous pour être averti lorsqu'une version préliminaire sera disponible.
Profilage
Datadog Continuous Profiler est disponible en version préliminaire pour .NET et Node.js sur Windows Azure App Service.
Pour activer le Continuous Profiler, définissez la variable d’environnement DD_PROFILING_ENABLED=true.
Déploiement
To update your Datadog instrumentation with zero downtime, use deployment slots. You can create a workflow that uses GitHub Action for Azure CLI.
See the sample GitHub workflow.
Dépannage
Il est probable que vous n’ayez pas configuré l’intégration Azure pour surveiller votre application. Une configuration appropriée améliore votre capacité à corréler les métriques, les traces et les logs dans la plateforme Datadog. Sans l’intégration Azure configurée, il vous manque un contexte critique pour vos traces. Pour corriger cela :
Accédez à la tuile d’intégration Azure.
Assurez-vous d’avoir installé l’intégration Azure pour l’abonnement Azure sur lequel votre application s’exécute.
Assurez-vous que toutes les règles de filtrage de plan App Service que vous avez appliquées incluent le plan App Service sur lequel l’application s’exécute. Si un plan App Service n’est pas inclus, toutes les applications et fonctions hébergées sur celui-ci ne sont pas incluses non plus. Les tags sur l’application elle-même ne sont pas utilisés pour le filtrage par Datadog.
Si les traces APM n’apparaissent pas dans Datadog
Vérifiez que vous avez défini DD_SITE et DD_API_KEY correctement.
Effectuez un arrêt complet et un redémarrage de votre application.
Si le problème n’est pas résolu, essayez de désinstaller l’extension et de la réinstaller (cela garantit également que vous utilisez la dernière version).
Remarque : Pour accélérer le processus d’investigation des erreurs d’application avec l’équipe de support, définissez DD_TRACE_DEBUG:true et ajoutez le contenu du répertoire des logs Datadog (%AzureAppServiceHomeDirectory%\LogFiles\datadog) à votre e-mail.
Besoin d’aide supplémentaire ? Contactez le support Datadog.
Si la mise à l’échelle automatique est activée sur le plan App Service et que vous voyez des traces sans rapport fusionnées, les sondes d’intégrité de la plateforme Azure (User-Agent: HttpScaleManager) pourraient transporter un contexte de trace W3C obsolète. Si tous les appelants de l’application sont instrumentés par Datadog, définissez DD_TRACE_PROPAGATION_STYLE_EXTRACT=datadog sur l’application concernée pour limiter l’extraction du contexte de trace au format de Datadog. Pour les applications dont les appelants ne sont pas instrumentés par Datadog, ce paramètre fait en sorte que Datadog ignore leur contexte de trace W3C, fragmentant ainsi ces requêtes en traces déconnectées au lieu de les fusionner avec la trace parente.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: