Surveillance des applications pour Azure App Service et Python (préversion)
Important
Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.
Surveillez vos applications web Python sur Azure App Services sans modifier le code. Ce guide vous montre comment activer Azure Monitor Application Insights et offre des conseils pour automatiser les déploiements à grande échelle.
Les outils d’intégration mettent en place des bibliothèques Python populaires dans votre code, ce qui vous permet de collecter et de mettre automatiquement en corrélation les dépendances, les journaux et les métriques. Après l’instrumentation, vous collectez des appels et des métriques à partir de ces bibliothèques Python :
Instrumentation | Nom de la bibliothèque prise en charge | Versions prises en charge |
---|---|---|
Instrumentation OpenTelemetry Django | django |
ici. |
Instrumentation OpenTelemetry FastApi | fastapi |
ici. |
Instrumentation OpenTelemetry Flask | flask |
ici. |
Instrumentation OpenTelemetry Psycopg2 | psycopg2 |
ici. |
Instrumentation OpenTelemetry Requests | requests |
ici. |
Instrumentation OpenTelemetry UrlLib | urllib |
Tous |
Instrumentation OpenTelemetry UrlLib3 | urllib3 |
ici. |
Remarque
Si vous utilisez Django, consultez la section supplémentaire Instrumentation Django dans cet article.
La télémétrie de journalisation est collectée au niveau de l’enregistreur d’événements racine. Pour en savoir plus sur la hiérarchie de journalisation native de Python, consultez la documentation de journalisation Python.
Prérequis
- Python version 3.11 ou antérieure.
- App Service doit être déployé en tant que code. Les conteneurs personnalisés ne sont pas pris en charge.
Activer Application Insights
Le moyen le plus simple de surveiller les applications Python sur Azure App Services est via le portail Azure.
L’activation de la surveillance dans le portail Azure instrumente automatiquement votre application avec Application Insights et ne nécessite aucune modification du code.
Remarque
Vous ne devez utiliser l’auto-instrumentation sur App Service que si vous n’utilisez pas d’instrumentation manuelle d’OpenTelemetry dans votre code, comme la distribution OpenTelemetry d’Azure Monitor ou l’exportateur OpenTelemetry. Cela évite que des données en double soient envoyées. Pour en savoir plus, consultez la section de résolution des problèmes dans cet article.
Instrumentation automatique à travers le Portail Azure
Pour obtenir la liste complète des scénarios d’instrumentation automatique pris en charge, consultez Environnements, langages et fournisseurs de ressources pris en charge.
Activez la surveillance de vos applications Python dans Azure App Service sans aucune modification du code requise.
Application Insights pour Python s’intègre à Linux Azure App Service basé sur le code.
L’intégration est en préversion publique. Il ajoute le Kit de développement logiciel (SDK) Python, qui est en disponibilité générale.
Sélectionnez Application Insights dans le panneau de configuration Azure de votre service d’application, puis sélectionnez Activer.
Choisissez de créer une nouvelle ressource, ou sélectionnez une ressource Application Insights existante pour cette application.
Notes
Quand vous sélectionnez OK pour créer la ressource, vous êtes invité à Appliquer les paramètres de supervision. Si vous sélectionnez Continuer, votre nouvelle ressource Application Insights est liée à votre service d’application et déclenche un redémarrage de votre service d’application.
Vous spécifiez la ressource et elle est prête à être utilisée.
Configuration
Vous pouvez configurer avec des variables d’environnement OpenTelemetry telles que :
Variable d’environnement | Description |
---|---|
OTEL_SERVICE_NAME , OTEL_RESOURCE_ATTRIBUTES |
Spécifie les attributs de ressource OpenTelemetry associés à votre application. Vous pouvez définir n’importe quel attribut de ressource avec OTEL_RESOURCE_ATTRIBUTES ou utiliser OTEL_SERVICE_NAME pour définir uniquement le service.name . |
OTEL_LOGS_EXPORTER |
Si la valeur est None , désactive la collecte et l’exportation de la télémétrie de journalisation. |
OTEL_METRICS_EXPORTER |
Si la valeur est None , désactive la collecte et l’exportation de données de télémétrie de métriques. |
OTEL_TRACES_EXPORTER |
Si la valeur est définie sur None , désactive la collecte et l’exportation des données de télémétrie de suivi distribuées. |
OTEL_BLRP_SCHEDULE_DELAY |
Spécifie l’intervalle d’exportation de journalisation en millisecondes. La valeur par défaut est 5 000. |
OTEL_BSP_SCHEDULE_DELAY |
Spécifie l’intervalle d’exportation de suivi distribué en millisecondes. La valeur par défaut est 5 000. |
OTEL_TRACES_SAMPLER_ARG |
Spécifie le ratio de télémétrie de suivi distribué à échantillonné. Les valeurs acceptées sont comprises entre 0 et 1. La valeur par défaut est 1.0, ce qui signifie qu’aucune télémétrie n’est échantillonnées. |
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS |
Spécifie les instrumentations OpenTelemetry à désactiver. En cas de désactivation, les instrumentations ne sont pas exécutées dans le cadre de l’auto-instrumentation. Accepte une liste séparée par des virgules de noms de bibliothèques en minuscules. Par exemple, définissez-le sur "psycopg2,fastapi" pour désactiver les instrumentations Psycopg2 et FastAPI. Il est défini par défaut sur une liste vide, ce qui active toutes les instrumentations prises en charge. |
Ajouter une bibliothèque d’instrumentation de communauté
Vous pouvez collecter automatiquement davantage de données lorsque vous incluez des bibliothèques d’instrumentation de la communauté OpenTelemetry.
Attention
Nous ne prenons pas en charge et ne garantissons la qualité des bibliothèques d’instrumentation de la communauté. Pour en suggérer une pour notre distribution, publier ou voter dans nos commentaires de la communauté. N’oubliez pas que certaines sont basées sur des spécifications OpenTelemetry expérimentales et peuvent introduire des changements cassants futurs.
Pour ajouter la bibliothèque communautaire d'instrumentation OpenTelemetry, installez-la dans le fichier requirements.txt
de votre application. L’auto- instrumentation OpenTelemetry récupère et instrumente automatiquement toutes les bibliothèques installées. Recherchez la liste des bibliothèques de communauté ici.
Automatiser la supervision
Pour activer la collecte de données de télémétrie avec Application Insights, il vous suffit de définir les paramètres suivants de l’application :
Définitions des paramètres d’application
Nom du paramètre d’application | Définition | Valeur |
---|---|---|
APPLICATIONINSIGHTS_CONNECTION_STRING | Chaîne de connexions pour votre ressource Application Insights | Exemple : abcd1234-ab12-cd34-abcd1234abcd |
ApplicationInsightsAgent_EXTENSION_VERSION | Extension principale, qui contrôle la supervision runtime. | ~3 |
Remarque
Le profileur et le débogueur d’instantanés ne sont pas disponibles pour les applications Python
Paramètres d’application App Service avec Azure Resource Manager
Les paramètres d’application pour Azure App Services peuvent être gérés et configurés à l’aide de modèles Azure Resource Manager. Vous pouvez utiliser cette méthode au moment de déployer de nouvelles ressources App Service avec l’automatisation Resource Manager ou modifiez les paramètres des ressources existantes.
La structure de base des paramètres d’application JSON pour une ressource App Service :
"resources": [
{
"name": "appsettings",
"type": "config",
"apiVersion": "2015-08-01",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
],
"tags": {
"displayName": "Application Insights Settings"
},
"properties": {
"key1": "value1",
"key2": "value2"
}
}
]
Pour obtenir un exemple de modèle Resource Manager où les paramètres d’application sont configurés pour Application Insights, consultez ce modèle. Plus précisément, consultez la section qui commence à la ligne 238.
Automatisez la création d’une ressource Application Insights et créez un lien vers votre nouvelle ressource App Service
Pour créer un modèle Resource Manager avec les paramètres Application Insights par défaut, commencez le processus comme si vous alliez créer une nouvelle application web avec Application Insights activé.
Créez une ressource App Service avec les informations d’application web souhaitées. Activez Application Insights sous l’onglet Supervision.
Sélectionnez Revoir + créer. Sélectionnez ensuite Télécharger un modèle pour automation.
Cette option génère le dernier modèle Resource Manager configuré avec tous les paramètres nécessaires.
Dans l’exemple suivant, remplacez toutes les instances de AppMonitoredSite
par le nom de votre site :
Remarque
Si vous travaillez sous Windows, définissez ApplicationInsightsAgent_EXTENSION_VERSION
sur ~2
. Si vous travaillez sous Linux, définissez ApplicationInsightsAgent_EXTENSION_VERSION
sur ~3
.
{
"resources": [
{
"name": "[parameters('name')]",
"type": "Microsoft.Web/sites",
"properties": {
"siteConfig": {
"appSettings": [
{
"name": "APPINSIGHTS_INSTRUMENTATIONKEY",
"value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
},
{
"name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
"value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
},
{
"name": "ApplicationInsightsAgent_EXTENSION_VERSION",
"value": "~2"
}
]
},
"name": "[parameters('name')]",
"serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
"hostingEnvironment": "[parameters('hostingEnvironment')]"
},
"dependsOn": [
"[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
"microsoft.insights/components/AppMonitoredSite"
],
"apiVersion": "2016-03-01",
"location": "[parameters('location')]"
},
{
"apiVersion": "2016-09-01",
"name": "[parameters('hostingPlanName')]",
"type": "Microsoft.Web/serverfarms",
"location": "[parameters('location')]",
"properties": {
"name": "[parameters('hostingPlanName')]",
"workerSizeId": "[parameters('workerSize')]",
"numberOfWorkers": "1",
"hostingEnvironment": "[parameters('hostingEnvironment')]"
},
"sku": {
"Tier": "[parameters('sku')]",
"Name": "[parameters('skuCode')]"
}
},
{
"apiVersion": "2015-05-01",
"name": "AppMonitoredSite",
"type": "microsoft.insights/components",
"location": "West US 2",
"properties": {
"ApplicationId": "[parameters('name')]",
"Request_Source": "IbizaWebAppExtensionCreate"
}
}
],
"parameters": {
"name": {
"type": "string"
},
"hostingPlanName": {
"type": "string"
},
"hostingEnvironment": {
"type": "string"
},
"location": {
"type": "string"
},
"sku": {
"type": "string"
},
"skuCode": {
"type": "string"
},
"workerSize": {
"type": "string"
},
"serverFarmResourceGroup": {
"type": "string"
},
"subscriptionId": {
"type": "string"
}
},
"$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0"
}
Activer par le biais de PowerShell
Pour activer la supervision d’application via PowerShell, seuls les paramètres d’application sous-jacents doivent être modifiés. L’exemple suivant active la supervision d’application pour un site web appelé AppMonitoredSite
dans le groupe de ressources AppMonitoredRG
. Il configure les données à envoyer à la clé d’instrumentation 012345678-abcd-ef01-2345-6789abcd
.
Notes
Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour bien démarrer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.
Remarque
Si vous travaillez sous Windows, définissez ApplicationInsightsAgent_EXTENSION_VERSION sur ~2
. Si vous utilisez Linux, définissez ApplicationInsightsAgent_EXTENSION_VERSION sur ~3
.
$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop
Instrumentation Django
Pour utiliser OpenTelemetry Django Instrumentation, vous devez définir la variable d’environnement DJANGO_SETTINGS_MODULE
dans les paramètres App Service pour qu’elle pointe de votre dossier d’application vers votre module de paramètres. Pour plus d’informations, consultez la documentation Django.
Forum aux questions
Quelles sont les différences entre les métriques standard d’Application Insights et les métriques d’Azure App Service ?
Application Insights collecte des données de télémétrie pour les requêtes qui les ont transmises à l’application. Si l'échec se produit dans WebApps/WebServer et que la requête n'a pas atteint l'application utilisateur, Application Insights n'a aucune télémétrie à ce sujet.
La durée calculée pour serverresponsetime
par Application Insights ne correspond pas nécessairement au temps de réponse du serveur observé par Web Apps. Ce comportement est dû au fait qu’Application Insights compte uniquement la durée nécessaire à la requête pour atteindre l’application utilisateur. Si la requête est bloquée ou mise en file d'attente dans WebServer, le temps d'attente est inclus dans les indicateurs de performance Web Apps mais pas dans les métriques Application Insights.
Dépannage
Ici, nous fournissons notre guide de résolution des problèmes pour la surveillance des applications Python sur Azure App Services à l’aide de l’auto-instrumentation.
Données de télémétrie dupliquées
Vous ne devez utiliser l’auto-instrumentation sur App Service que si vous n’utilisez pas d’instrumentation manuelle d’OpenTelemetry dans votre code, comme la distribution OpenTelemetry d’Azure Monitor ou l’exportateur OpenTelemetry. L’utilisation de l’auto-instrumentation au-dessus de l’instrumentation manuelle peut entraîner des données de télémétrie en double et augmenter votre coût. Pour utiliser l’auto-instrumentation d’App Service OpenTelemetry, commencez par supprimer l’instrumentation manuelle d’OpenTelemetry de votre code.
Données de télémétrie manquantes
Si vous ne disposez pas de données de télémétrie, procédez comme suit pour vérifier que l’auto-instrumentation est activée correctement.
Étape 1 : Vérifier le panneau Application Insights sur votre ressource App Service
Vérifiez que la saisie automatique est activée dans le panneau Application Insights de votre ressource App Service :
Étape 2 : Vérifier que les paramètres de votre application sont corrects
Vérifiez que le paramètre d’application ApplicationInsightsAgent_EXTENSION_VERSION
est défini sur une valeur de ~3
et que votre APPLICATIONINSIGHTS_CONNECTION_STRING
pointe vers la ressource Application Insights appropriée.
Étape 3 : Vérifier les diagnostics d’auto-instrumentation et les journaux d’état
Accédez à /var/log/applicationinsights/ et ouvrez status_*.json.
Vérifiez que AgentInitializedSuccessfully
a la valeur true et IKey
avoir une clé iKey valide.
Voici un exemple de fichier JSON :
"AgentInitializedSuccessfully":true,
"AppType":"python",
"MachineName":"c89d3a6d0357",
"PID":"47",
"IKey":"00000000-0000-0000-0000-000000000000",
"SdkVersion":"1.0.0"
Le fichier applicationinsights-extension.log
dans le même dossier peut afficher d’autres diagnostics utiles.
Applications Django
Si votre application utilise Django et ne parvient pas à démarrer ou à utiliser des paramètres incorrects, veillez à définir la variable d’environnement DJANGO_SETTINGS_MODULE
. Pour plus d’informations, consultez la section Instrumentation Django.
Tester la connectivité entre votre hôte d’application et le service d’ingestion
Les SDK et les agents Application Insights envoient de la télémétrie à ingérer en tant qu’appels REST à nos points de terminaison d’ingestion. Vous pouvez tester la connectivité de votre serveur web ou de votre machine hôte d’application vers les points de terminaison de service d’ingestion en utilisant des clients du Representational State Transfer (REST) bruts à partir de commandes PowerShell ou curl. Consultez Résoudre les problèmes de données de télémétrie d’application manquantes dans Azure Monitor Application Insights.
Pour obtenir les mises à jour et correctifs de bogues les plus récents, consultez les notes de publication. -->
Étapes suivantes
- Autorisation de l’envoi de diagnostics Azure vers Application Insights
- Analyse des mesures d’intégrité du service pour vous assurer que votre service est disponible et réactif
- Réceptions de notifications d’alerte lorsque des événements opérationnels se produisent ou que des mesures dépassent un seuil
- Vue d’ensemble de la disponibilité