Programövervakning för Azure App Service och Python (förhandsversion)

Viktigt!

Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

Övervaka dina Python-webbprogram i Azure App Services utan att ändra koden. Den här guiden visar hur du aktiverar Azure Monitor Application Insights och ger tips för att automatisera storskaliga distributioner.

Integreringsinstrumenten populära Python-bibliotek i koden så att du automatiskt kan samla in och korrelera beroenden, loggar och mått. Efter instrumenteringen samlar du in anrop och mått från dessa Python-bibliotek:

Instrumentation Biblioteksnamn som stöds Versioner som stöds
OpenTelemetry Django Instrumentation django Länk
OpenTelemetry FastApi-instrumentation fastapi Länk
OpenTelemetry Flask Instrumentation flask Länk
OpenTelemetry Psycopg2 Instrumentation psycopg2 Länk
Instrumentation för OpenTelemetry-begäranden requests Länk
OpenTelemetry UrlLib Instrumentation urllib Alla
OpenTelemetry UrlLib3 Instrumentation urllib3 Länk

Kommentar

Om du använder Django kan du läsa mer i avsnittet Django Instrumentation i den här artikeln.

Loggningstelemetri samlas in på rotloggarens nivå. Mer information om Pythons interna loggningshierarki finns i dokumentationen för Python-loggning.

Förutsättningar

  • Python version 3.11 eller tidigare.
  • App Service måste distribueras som kod. Anpassade containrar stöds inte.

Aktivera Application Insights

Det enklaste sättet att övervaka Python-program på Azure App Services är via Azure-portalen.

När du aktiverar övervakning i Azure-portalen instrumenteras ditt program automatiskt med Application Insights och kräver inga kodändringar.

Kommentar

Du bör bara använda autoinstrumentation i App Service om du inte använder manuell instrumentering av OpenTelemetry i koden, till exempel Azure Monitor OpenTelemetry Distro eller Azure Monitor OpenTelemetry Exporter. Detta för att förhindra att dubbletter av data skickas. Mer information om detta finns i felsökningsavsnittet i den här artikeln.

Automatisk instrumentering via Azure-portalen

En fullständig lista över scenarier med automatisk instrumentering som stöds finns i Miljöer, språk och resursprovidrar som stöds.

Växla övervakning för dina Python-appar i Azure App Service utan att det krävs några kodändringar.

Application Insights för Python integreras med kodbaserad Linux Azure App Service.

Integreringen finns i en offentlig förhandsversion. Den lägger till Python SDK, som finns i GA.

  1. Välj Application Insights på Azure-kontrollpanelen för din apptjänst och välj sedan Aktivera.

    Skärmbild av fliken Application Insights med aktivera markerad.

  2. Välj att skapa en ny resurs eller välj en befintlig Application Insights-resurs för det här programmet.

    Kommentar

    När du väljer OK för att skapa den nya resursen uppmanas du att använda övervakningsinställningar. Om du väljer Fortsätt länkas din nya Application Insights-resurs till apptjänsten, vilket också utlöser en omstart av apptjänsten.

    Skärmbild av listrutan Ändra resurs.

  3. Du anger resursen och är redo att använda den.

    Skärmbild av instrumentera ditt program.

Konfiguration

Du kan konfigurera med OpenTelemetry-miljövariabler som:

Miljövariabel Beskrivning
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES Anger de OpenTelemetry-resursattribut som är associerade med ditt program. Du kan ange alla resursattribut med OTEL_RESOURCE_ATTRIBUTES eller använda OTEL_SERVICE_NAME för att endast ange service.name.
OTEL_LOGS_EXPORTER Om värdet är Noneinaktiveras insamling och export av loggningstelemetri.
OTEL_METRICS_EXPORTER Om värdet är Noneinställt på inaktiveras insamling och export av måtttelemetri.
OTEL_TRACES_EXPORTER Om värdet är Noneinaktiverar du insamling och export av distribuerad spårningstelemetri.
OTEL_BLRP_SCHEDULE_DELAY Anger loggningsexportintervallet i millisekunder. Standardvärdet är 5 000.
OTEL_BSP_SCHEDULE_DELAY Anger exportintervallet för distribuerad spårning i millisekunder. Standardvärdet är 5 000.
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS Anger vilka OpenTelemetry-instrumentationer som ska inaktiveras. När instrumenteringar är inaktiverade körs de inte som en del av autoinstrumentationen. Accepterar en kommaavgränsad lista med gemena biblioteksnamn. Ange den till exempel för "psycopg2,fastapi" att inaktivera Psycopg2- och FastAPI-instrumentationerna. Den är som standard en tom lista som aktiverar alla instrumentationer som stöds.

Lägga till ett bibliotek för communityinstrumentation

Du kan samla in mer data automatiskt när du inkluderar instrumentationsbibliotek från OpenTelemetry-communityn.

Varning

Vi stöder inte eller garanterar inte kvaliteten på communityinstrumentationsbibliotek. Att föreslå en för vår distribution, post eller up-vote i vår feedback community. Tänk på att vissa baseras på experimentella OpenTelemetry-specifikationer och kan introducera framtida icke-bakåtkompatibla ändringar.

Om du vill lägga till communityns OpenTelemetry Instrumentation Library installerar du det via appens requirements.txt fil. OpenTelemetry autoinstrumentation plockar automatiskt upp och instrumenterar alla installerade bibliotek. Hitta listan över communitybibliotek här.

Automatisera övervakning

För att aktivera telemetriinsamling med Application Insights behöver endast följande programinställningar anges:

Skärmbild av App Service Application Inställningar med tillgängliga Application Insights-inställningar.

Definitioner för programinställningar

Namn på appinställning Definition Värde
APPLICATIONINSIGHTS_CONNECTION_STRING Anslut ionssträng för din Application Insights-resurs Exempel: abcd1234-ab12-cd34-abcd1234abcd
ApplicationInsightsAgent_EXTENSION_VERSION Huvudtillägget, som styr körningsövervakning. ~3

Kommentar

Felsökare för profiler och ögonblicksbilder är inte tillgängliga för Python-program

App Service-programinställningar med Azure Resource Manager

Programinställningar för Azure App Service kan hanteras och konfigureras med Azure Resource Manager-mallar. Du kan använda den här metoden när du distribuerar nya App Service-resurser med Resource Manager-automatisering eller ändrar inställningarna för befintliga resurser.

Den grundläggande strukturen för JSON för programinställningar för en App Service-resurs:

      "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"
          }
        }
      ]

För ett exempel på en Resource Manager-mall med programinställningar som konfigurerats för Application Insights kan den här mallen vara till hjälp. Mer information finns i avsnittet som börjar på rad 238.

Om du vill skapa en Resource Manager-mall med standardinställningarna för Application Insights börjar du processen som om du skulle skapa en ny webbapp med Application Insights aktiverat.

  1. Skapa en ny App Service-resurs med önskad webbappsinformation. Aktivera Application Insights på fliken Övervakning .

  2. Välj Granska + skapa. Välj sedan Ladda ned en mall för automatisering.

    Skärmbild som visar menyn för att skapa App Service-webbappar.

    Det här alternativet genererar den senaste Resource Manager-mallen med alla nödvändiga inställningar konfigurerade.

    Skärmbild som visar en App Service-webbappmall.

I följande exempel ersätter du alla instanser av AppMonitoredSite med webbplatsnamnet:

Kommentar

Om du använder Windows anger du ApplicationInsightsAgent_EXTENSION_VERSION till ~2. Om du använder Linux anger du ApplicationInsightsAgent_EXTENSION_VERSION till ~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"
}

Aktivera via PowerShell

För att aktivera programövervakning via PowerShell måste endast de underliggande programinställningarna ändras. Följande exempel aktiverar programövervakning för en webbplats som heter AppMonitoredSite i resursgruppen AppMonitoredRG. Den konfigurerar data som ska skickas till instrumentationsnyckeln 012345678-abcd-ef01-2345-6789abcd .

Kommentar

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Kommentar

Om du använder Windows anger du ApplicationInsightsAgent_EXTENSION_VERSION till ~2. Om du använder Linux anger du ApplicationInsightsAgent_EXTENSION_VERSION till ~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

Django Instrumentation

För att kunna använda OpenTelemetry Django Instrumentation måste du ange DJANGO_SETTINGS_MODULE miljövariabeln i App Service-inställningarna så att den pekar från appmappen till inställningsmodulen. Mer information finns i Django-dokumentationen.

Vanliga frågor och svar

Vad är skillnaden mellan standardmått från Application Insights jämfört med Azure App Service-mått?

Application Insights samlar in telemetri för de begäranden som gjorde det till programmet. Om felet inträffar i WebApps/WebServer och begäran inte nådde användarprogrammet har Application Insights ingen telemetri om det.

Varaktigheten för serverresponsetime beräknad av Application Insights matchar inte nödvändigtvis serverns svarstid som observeras av Web Apps. Det här beteendet beror på att Application Insights bara räknar varaktigheten när begäran faktiskt når användarprogrammet. Om begäran har fastnat eller placerats i kö i WebServer inkluderas väntetiden i Web Apps-måtten men inte i Application Insights-mått.

Felsökning

Här tillhandahåller vi vår felsökningsguide för övervakning av Python-program i Azure App Services med automatisk instrumentering.

Duplicerad telemetri

Du bör bara använda autoinstrumentation i App Service om du inte använder manuell instrumentering av OpenTelemetry i koden, till exempel Azure Monitor OpenTelemetry Distro eller Azure Monitor OpenTelemetry Exporter. Om du använder autoinstrumentation ovanpå den manuella instrumentationen kan det orsaka duplicerad telemetri och öka kostnaden. Om du vill använda Autoinstrumentation för App Service OpenTelemetry tar du först bort manuell instrumentation av OpenTelemetry från koden.

Telemetri saknas

Om du saknar telemetri följer du de här stegen för att bekräfta att automatisk instrumentering är korrekt aktiverad.

Steg 1: Kontrollera Application Insights-bladet på din App Service-resurs

Bekräfta att autoinstrumentation är aktiverat på Application Insights-bladet på din App Service-resurs:

Skärmbild av fliken Application Insights med aktivera markerad.

Steg 2: Bekräfta att din app Inställningar är korrekt

Bekräfta att appinställningen ApplicationInsightsAgent_EXTENSION_VERSION är inställd på ett värde för ~3 och att dina APPLICATIONINSIGHTS_CONNECTION_STRING pekar på lämplig Application Insights-resurs.

Skärmbild av App Service Application Inställningar med tillgängliga Application Insights-inställningar.

Steg 3: Kontrollera diagnostik och statusloggar för automatisk instrumentering

Gå till /var/log/applicationinsights/ och öppna status_*.json.

Bekräfta att AgentInitializedSuccessfully är inställt på true och IKey att ha en giltig iKey.

Här är ett exempel på en JSON-fil:

    "AgentInitializedSuccessfully":true,
            
    "AppType":"python",
            
    "MachineName":"c89d3a6d0357",
            
    "PID":"47",
            
    "IKey":"00000000-0000-0000-0000-000000000000",
            
    "SdkVersion":"1.0.0"

Filen applicationinsights-extension.log i samma mapp kan visa annan användbar diagnostik.

Django-appar

Om din app använder Django och inte kan starta eller använda felaktiga inställningar måste du ange DJANGO_SETTINGS_MODULE miljövariabeln. Mer information finns i avsnittet Django Instrumentation .


Testa anslutningen mellan programvärden och inmatningstjänsten

Application Insights SDK:er och agenter skickar telemetri för att matas in som REST-anrop till våra inmatningsslutpunkter. Du kan testa anslutningen från webbservern eller programvärddatorn till slutpunkterna för inmatningstjänsten med hjälp av råa REST-klienter från PowerShell- eller curl-kommandon. Se Felsöka programtelemetri som saknas i Azure Monitor Application Insights.

De senaste uppdateringarna och felkorrigeringarna finns i viktig information. -->

Nästa steg