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.

  1. Sélectionnez Application Insights dans le panneau de configuration Azure de votre service d’application, puis sélectionnez Activer.

    Capture d’écran de l’onglet Application Insights avec l’option Activer sélectionnée.

  2. 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.

    Capture d’écran de la liste déroulante Modifier votre ressource.

  3. Vous spécifiez la ressource et elle est prête à être utilisée.

    Capture d’écran de l’instrumentation de votre application.

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_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 :

Capture d’écran de Paramètres d’application App Service avec les paramètres Application Insights disponibles.

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.

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é.

  1. Créez une ressource App Service avec les informations d’application web souhaitées. Activez Application Insights sous l’onglet Supervision.

  2. Sélectionnez Revoir + créer. Sélectionnez ensuite Télécharger un modèle pour automation.

    Capture d’écran montrant le menu de création d’application web App Service.

    Cette option génère le dernier modèle Resource Manager configuré avec tous les paramètres nécessaires.

    Capture d’écran montrant un modèle d’application web App Service.

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 commencer, 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 :

Capture d’écran de l’onglet Application Insights avec l’option Activer sélectionnée.

É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.

Capture d’écran de Paramètres d’application App Service avec les paramètres Application Insights disponibles.

É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