Share via


Toepassingsbewaking voor Azure-app Service en Python (preview)

Belangrijk

Raadpleeg de Aanvullende voorwaarden voor Microsoft Azure-previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.

Bewaak uw Python-webtoepassingen op Azure-app Services zonder de code te wijzigen. Deze handleiding laat zien hoe u Azure Monitor Application Insights inschakelt en tips biedt voor het automatiseren van grootschalige implementaties.

De integratieinstrumenten populaire Python-bibliotheken in uw code, zodat u automatisch afhankelijkheden, logboeken en metrische gegevens kunt verzamelen en correleren. Na het instrumenteren verzamelt u aanroepen en metrische gegevens uit deze Python-bibliotheken:

Instrumentatie Ondersteunde bibliotheeknaam Ondersteunde versies
OpenTelemetry Django Instrumentation django Link
OpenTelemetry FastApi Instrumentation fastapi Link
OpenTelemetry Flask Instrumentation flask Link
OpenTelemetry Psycopg2 Instrumentation psycopg2 Link
Instrumentatie voor OpenTelemetry-aanvragen requests Link
OpenTelemetry UrlLib Instrumentation urllib Alle
OpenTelemetry UrlLib3 Instrumentation urllib3 Link

Notitie

Als u Django gebruikt, raadpleegt u de aanvullende sectie Django Instrumentation in dit artikel.

Telemetriegegevens voor logboekregistratie worden verzameld op het niveau van de hoofdlogger. Ga naar de documentatie voor Python-logboekregistratie voor meer informatie over de systeemeigen logboekregistratiehiërarchie van Python.

Vereisten

  • Python-versie 3.11 of eerder.
  • App Service moet als code worden geïmplementeerd. Aangepaste containers worden niet ondersteund.

Application Insights inschakelen

De eenvoudigste manier om Python-toepassingen op Azure-app Services te bewaken, is via Azure Portal.

Als u bewaking in Azure Portal activeert, wordt uw toepassing automatisch aangepast met Application Insights en zijn er geen codewijzigingen vereist.

Notitie

Gebruik alleen auto-instrumentatie in App Service als u geen handmatige instrumentatie van OpenTelemetry gebruikt in uw code, zoals de Azure Monitor OpenTelemetry Distro of de Azure Monitor OpenTelemetry Exporter. Dit is om te voorkomen dat dubbele gegevens worden verzonden. Raadpleeg de sectie probleemoplossing in dit artikel voor meer informatie.

Automatische instrumentatie via Azure Portal

Zie Ondersteunde omgevingen, talen en resourceproviders voor een volledige lijst met ondersteunde auto-instrumentatiescenario's.

Schakel de controle voor uw Python-apps in Azure-app Service in zonder dat er codewijzigingen nodig zijn.

Application Insights voor Python kan worden geïntegreerd met op code gebaseerde Linux Azure-app Service.

De integratie is beschikbaar als openbare preview. Hiermee wordt de Python SDK toegevoegd, die zich in algemene beschikbaarheid bevindt.

  1. Selecteer Application Insights in het Configuratiescherm van Azure voor uw app-service en selecteer vervolgens Inschakelen.

    Schermopname van het tabblad Application Insights met Inschakelen geselecteerd.

  2. Kies ervoor om een nieuwe resource te maken of selecteer een bestaande Application Insights-resource voor deze toepassing.

    Notitie

    Wanneer u OK selecteert om de nieuwe resource te maken, wordt u gevraagd om bewakingsinstellingen toe te passen. Als u Doorgaan selecteert, wordt uw nieuwe Application Insights-resource aan uw app-service gekoppeld. Hierdoor wordt ook de app-service opnieuw opgestart.

    Schermopname van de vervolgkeuzelijst Resource wijzigen.

  3. U geeft de resource op en deze is klaar voor gebruik.

    Schermopname van het instrument van uw toepassing.

Configuratie

U kunt configureren met Omgevingsvariabelen van OpenTelemetry, zoals:

Omgevingsvariabele Beschrijving
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES Hiermee geeft u de OpenTelemetry Resource Attributes die aan uw toepassing zijn gekoppeld. U kunt resourcekenmerken instellen met OTEL_RESOURCE_ATTRIBUTES of OTEL_SERVICE_NAME gebruiken om alleen de service.name.
OTEL_LOGS_EXPORTER Als deze optie is ingesteld None, schakelt u het verzamelen en exporteren van logboektelemetrie uit.
OTEL_METRICS_EXPORTER Als deze optie is ingesteld None, schakelt u het verzamelen en exporteren van metrische telemetrie uit.
OTEL_TRACES_EXPORTER Als deze optie is ingesteld None, schakelt u het verzamelen en exporteren van gedistribueerde traceringstelemetrie uit.
OTEL_BLRP_SCHEDULE_DELAY Hiermee geeft u het exportinterval voor logboekregistratie in milliseconden op. De standaardwaarde is 5000.
OTEL_BSP_SCHEDULE_DELAY Hiermee geeft u het exportinterval voor gedistribueerde tracering in milliseconden op. De standaardwaarde is 5000.
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS Hiermee geeft u op welke OpenTelemetry-instrumentaties moeten worden uitgeschakeld. Als deze functie is uitgeschakeld, worden instrumentaties niet uitgevoerd als onderdeel van autoinstrumentatie. Accepteert een door komma's gescheiden lijst met bibliotheeknamen in kleine letters. Stel deze bijvoorbeeld in om "psycopg2,fastapi" de Psycopg2- en FastAPI-instrumentaties uit te schakelen. Deze wordt standaard ingesteld op een lege lijst, waardoor alle ondersteunde instrumentaties worden ingeschakeld.

Een bibliotheek voor community-instrumentatie toevoegen

U kunt automatisch meer gegevens verzamelen wanneer u instrumentatiebibliotheken van de OpenTelemetry-community opneemt.

Let op

We ondersteunen of garanderen de kwaliteit van community-instrumentatiebibliotheken niet. Als u een voor ons distributieprogramma wilt voorstellen, plaatst of stemt u in onze feedbackcommunity. Houd er rekening mee dat sommige zijn gebaseerd op experimentele OpenTelemetry-specificaties en kunnen toekomstige wijzigingen veroorzaken.

Als u de OpenTelemetry Instrumentation Library van de community wilt toevoegen, installeert u deze via het bestand van requirements.txt uw app. Automatische instrumentatie van OpenTelemetry haalt automatisch alle geïnstalleerde bibliotheken op en instrumenten. Zoek hier de lijst met communitybibliotheken.

Bewaking automatiseren

Als u telemetrieverzameling met Application Insights wilt inschakelen, moeten alleen de volgende toepassingsinstellingen worden ingesteld:

Schermopname van App Service Application Instellingen met beschikbare Application Insights-instellingen.

Definities van toepassingsinstellingen

Naam van de app-instelling Definitie Weergegeven als
APPLICATIONINSIGHTS_CONNECTION_STRING Verbinding maken ionstekenreeks voor uw Application Insights-resource Voorbeeld: abcd1234-ab12-cd34-abcd1234abcd
ApplicationInsightsAgent_EXTENSION_VERSION Belangrijkste extensie, waarmee runtime-bewaking wordt gecontroleerd. ~3

Notitie

Profiler en foutopsporingsprogramma voor momentopnamen zijn niet beschikbaar voor Python-toepassingen

App Service-toepassingsinstellingen met Azure Resource Manager

Toepassingsinstellingen voor Azure-app Service kunnen worden beheerd en geconfigureerd met Azure Resource Manager-sjablonen. U kunt deze methode gebruiken wanneer u nieuwe App Service-resources implementeert met Resource Manager-automatisering of de instellingen van bestaande resources wijzigt.

De basisstructuur van de JSON voor toepassingsinstellingen voor een App Service-resource:

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

Voor een voorbeeld van een Resource Manager-sjabloon met toepassingsinstellingen die zijn geconfigureerd voor Application Insights, kan deze sjabloon handig zijn. Zie de sectie die begint op regel 238.

Als u een Resource Manager-sjabloon wilt maken met de standaardinstellingen voor Application Insights, begint u het proces alsof u een nieuwe web-app wilt maken waarvoor Application Insights is ingeschakeld.

  1. Maak een nieuwe App Service-resource met de gewenste web-app-informatie. Schakel Application Insights in op het tabblad Bewaking .

  2. Selecteer Controleren + maken. Selecteer vervolgens Een sjabloon voor automatisering downloaden.

    Schermopname van het menu Voor het maken van een App Service-web-app.

    Met deze optie wordt de meest recente Resource Manager-sjabloon gegenereerd met alle vereiste instellingen geconfigureerd.

    Schermopname van een App Service-web-app-sjabloon.

Vervang in het volgende voorbeeld alle exemplaren van AppMonitoredSite uw sitenaam:

Notitie

Als u Windows gebruikt, stelt u deze optie in ApplicationInsightsAgent_EXTENSION_VERSION op ~2. Als u Linux gebruikt, stelt u deze optie in ApplicationInsightsAgent_EXTENSION_VERSION op ~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"
}

Inschakelen via PowerShell

Als u de toepassingscontrole via PowerShell wilt inschakelen, moeten alleen de onderliggende toepassingsinstellingen worden gewijzigd. In het volgende voorbeeld wordt toepassingsbewaking ingeschakeld voor een website die in de resourcegroep AppMonitoredRGwordt aangeroepenAppMonitoredSite. Hiermee worden gegevens geconfigureerd die naar de 012345678-abcd-ef01-2345-6789abcd instrumentatiesleutel moeten worden verzonden.

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Notitie

Als u Windows gebruikt, stelt u ApplicationInsightsAgent_EXTENSION_VERSION in op ~2. Als u Linux gebruikt, stelt u ApplicationInsightsAgent_EXTENSION_VERSION in op ~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

Als u de OpenTelemetry Django Instrumentation wilt gebruiken, moet u de DJANGO_SETTINGS_MODULE omgevingsvariabele instellen in de App Service-instellingen om vanuit uw app-map naar uw instellingenmodule te verwijzen. Zie de Django-documentatie voor meer informatie.

Veelgestelde vragen

Wat is het verschil tussen metrische standaardgegevens van Application Insights versus Azure-app Service-metrische gegevens?

Application Insights verzamelt telemetrie voor de aanvragen die deze naar de toepassing hebben verzonden. Als de fout optreedt in WebApps/WebServer en de aanvraag de gebruikerstoepassing niet heeft bereikt, heeft Application Insights er geen telemetrie over.

De duur voor serverresponsetime berekening door Application Insights komt niet noodzakelijkerwijs overeen met de reactietijd van de server die door Web Apps wordt waargenomen. Dit gedrag komt doordat Application Insights alleen de duur telt wanneer de aanvraag daadwerkelijk de gebruikerstoepassing bereikt. Als de aanvraag is vastgelopen of in de wachtrij is geplaatst in WebServer, wordt de wachttijd opgenomen in de metrische gegevens van Web Apps, maar niet in de metrische gegevens van Application Insights.

Probleemoplossing

Hier bieden we onze gids voor probleemoplossing voor het bewaken van Python-toepassingen op Azure-app Services met behulp van auto-instrumentatie.

Dubbele telemetrie

Gebruik alleen auto-instrumentatie in App Service als u geen handmatige instrumentatie van OpenTelemetry gebruikt in uw code, zoals de Azure Monitor OpenTelemetry Distro of de Azure Monitor OpenTelemetry Exporter. Het gebruik van automatische instrumentatie bovenop de handmatige instrumentatie kan leiden tot dubbele telemetrie en uw kosten verhogen. Als u App Service OpenTelemetry autoinstrumentation wilt gebruiken, verwijdert u eerst handmatige instrumentatie van OpenTelemetry uit uw code.

Ontbrekende telemetrie

Als u telemetrie mist, volgt u deze stappen om te controleren of auto-instrumentatie correct is ingeschakeld.

Stap 1: Controleer de blade Application Insights in uw App Service-resource

Controleer of auto-instrumentatie is ingeschakeld op de blade Application Insights in uw App Service-resource:

Schermopname van het tabblad Application Insights met Inschakelen geselecteerd.

Stap 2: controleer of uw app-Instellingen juist zijn

Controleer of de ApplicationInsightsAgent_EXTENSION_VERSION app-instelling is ingesteld op een waarde van ~3 en of uw APPLICATIONINSIGHTS_CONNECTION_STRING verwijst naar de juiste Application Insights-resource.

Schermopname van App Service Application Instellingen met beschikbare Application Insights-instellingen.

Stap 3: Diagnostische gegevens en statuslogboeken voor automatische instrumentatie controleren

Navigeer naar /var/log/applicationinsights/ en open status_*.json.

Bevestig dat deze AgentInitializedSuccessfully is ingesteld op waar en IKey of er een geldige iKey is.

Hier volgt een voorbeeld van een JSON-bestand:

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

Het applicationinsights-extension.log bestand in dezelfde map kan andere nuttige diagnostische gegevens bevatten.

Django-apps

Als uw app Django gebruikt en niet kan worden gestart of onjuiste instellingen gebruikt, moet u de DJANGO_SETTINGS_MODULE omgevingsvariabele instellen. Zie de sectie Django Instrumentation voor meer informatie.


Connectiviteit testen tussen uw toepassingshost en de opnameservice

Application Insights SDK's en agents verzenden telemetrie om opgenomen te worden als REST-aanroepen naar onze opname-eindpunten. U kunt de connectiviteit vanaf uw webserver of toepassingshostcomputer testen op de service-eindpunten voor opname met behulp van onbewerkte REST-clients uit PowerShell- of curl-opdrachten. Zie Problemen met ontbrekende toepassingstelemetrie oplossen in Azure Monitor Application Insights.

Raadpleeg de releaseopmerkingen voor de meest recente updates en bugfixes. -->

Volgende stappen