Anwendungsüberwachung für Azure App Service und Python (Vorschau)

Wichtig

Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.

Überwachen Sie Ihre Python-Webanwendungen in Azure App Services, ohne den Code zu ändern. In diesem Handbuch erfahren Sie, wie Sie Azure Monitor Application Insights aktivieren und erhalten Tipps für die Automatisierung umfangreicher Bereitstellungen.

Die Integration instrumentiert beliebte Python-Bibliotheken in Ihrem Code, so dass Sie automatisch Abhängigkeiten, Protokolle und Metriken erfassen und korrelieren können. Nach der Instrumentierung sammeln Sie Aufrufe und Metriken aus diesen Python-Bibliotheken:

Instrumentation Unterstützter Bibliotheksname Unterstützte Versionen
OpenTelemetry Django Instrumentation django Link.
OpenTelemetry FastApi Instrumentation fastapi Link.
OpenTelemetry Flask Instrumentation flask Link.
OpenTelemetry Psycopg2 Instrumentation psycopg2 Link.
OpenTelemetry-Anforderungsinstrumentation requests Link.
OpenTelemetry UrlLib Instrumentation urllib Alle
OpenTelemetry UrlLib3 Instrumentation urllib3 Link.

Hinweis

Wenn Sie Django verwenden, lesen Sie den zusätzlichen Django Instrumentation-Abschnitt in diesem Artikel.

Die Protokollierungs-Telemetrie wird auf der Ebene des Stammprotokollierers erfasst. Weitere Informationen zur nativen Protokollierungshierarchie von Python finden Sie in der Python-Protokollierungsdokumentation.

Voraussetzungen

  • Python Version 3.11 oder früher.
  • Der App Service muss als Code bereitgestellt werden. Benutzerdefinierte Container werden nicht unterstützt.

Aktivieren von Application Insights

Die einfachste Möglichkeit zum Überwachen von Python-Anwendungen in Azure App Services ist das Azure-Portal.

Die Aktivierung der Überwachung im Azure-Portal instrumentiert Ihre Anwendung automatisch mit Application Insights und erfordert keine Codeänderungen.

Hinweis

Sie sollten Autoinstrumentation nur für App Service verwenden, wenn Sie keine manuelle Instrumentierung von OpenTelemetry in Ihrem Code verwenden, z. B. den Azure Monitor OpenTelemetry Distro oder den Azure Monitor OpenTelemetry Exporter. Dadurch wird verhindert, dass doppelte Daten gesendet werden. Weitere Informationen dazu finden Sie im Abschnitt zur Problembehandlung in diesem Artikel.

Automatische Instrumentierung über das Azure-Portal

Eine vollständige Liste der unterstützten Szenarien für die automatische Instrumentierung finden Sie unter Unterstützte Umgebungen, Sprachen und Ressourcenanbieter.

Schalten Sie die Überwachung für Ihre Python-Apps in Azure App Service ein, ohne dass Codeänderungen erforderlich sind.

Application Insights for Python lässt sich in codebasierte Linux Azure App Service integrieren.

Die Integration befindet sich in der öffentlichen Vorschau. Es fügt das Python SDK hinzu, das sich in GA befindet.

  1. Wählen Sie Application Insights im Azure-Kontrollpanel für Ihren App-Dienst aus und wählen Sie dann Aktivieren.

    Screenshot: Application Insights-Registerkarte mit ausgewählter Option „Aktivieren“

  2. Erstellen Sie eine neue Ressource, oder wählen Sie eine vorhandene Application Insights-Ressource für diese Anwendung aus.

    Hinweis

    Wenn Sie OK wählen, um die neue Ressource zu erstellen, werden Sie Überwachungseinstellungen Anwenden aufgefordert. Wenn Sie Weiter wählen, wird Ihre neue Application Insights-Ressource mit Ihrer App Service-Instanz verknüpft, und außerdem wird ein Neustart Ihrer App Service-Instanz ausgelöst.

    Screenshot mit Dropdown-Menü

  3. Sie geben die Ressource an, und schon ist es einsatzbereit.

    Screenshot von dem Instrument ihrer Anwendung.

Konfiguration

Sie können es mit OpenTelemetry-Umgebungsvariablen konfigurieren, z. B.:

Umgebungsvariable Beschreibung
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES Gibt die Ihrer Anwendung zugeordneten OpenTelemetry-Ressourcenattribute an. Sie können alle Ressourcenattribute mit OTEL_RESOURCE_ATTRIBUTES festlegen oder OTEL_SERVICE_NAME verwenden, um nur service.namefestzulegen.
OTEL_LOGS_EXPORTER Wenn diese Eigenschaft auf None festgelegt ist, wird die Sammlung und der Export der Protokollierungs-Telemetrie deaktiviert.
OTEL_METRICS_EXPORTER Wenn diese Eigenschaft auf None festgelegt ist, wird die Sammlung und der Export der Metrik-Telemetrie deaktiviert.
OTEL_TRACES_EXPORTER Wenn diese Eigenschaft auf None festgelegt ist, wird die Sammlung und der Export der Telemetrie der verteilten Ablaufverfolgung deaktiviert.
OTEL_BLRP_SCHEDULE_DELAY Gibt das Protokollierungsexportintervall in Millisekunden an. Diese wird standardmäßig auf 5000 festgelegt.
OTEL_BSP_SCHEDULE_DELAY Gibt das Exportintervall für verteilte Ablaufverfolgungen in Millisekunden an. Diese wird standardmäßig auf 5000 festgelegt.
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS Gibt an, welche OpenTelemetry-Instrumentatierungen deaktiviert werden sollen. Wenn deaktiviert, werden Instrumentatierungen nicht als Teil der automatischen Instrumentierung ausgeführt. Akzeptiert eine durch Komma getrennte Liste von Bibliotheksnamen in Kleinbuchstaben. Legen Sie es beispielsweise auf "psycopg2,fastapi" fest, um die Psycopg2- und FastAPI-Instrumentierungen zu deaktivieren. Standardmäßig wird eine leere Liste verwendet, sodass alle unterstützten Instrumentierungen aktiviert werden.

Hinzufügen einer Community-Instrumentierungsbibliothek

Sie können automatisch mehr Daten sammeln, wenn Sie Instrumentierungsbibliotheken aus der OpenTelemetry-Community einschließen.

Achtung

Community-Instrumentierungsbibliotheken werden von uns nicht unterstützt und wir übernehmen keine Garantie für ihre Qualität. Wenn Sie einen Vorschlag für unsere Distribution machen möchten, posten Sie ihn in unserer Feedback-Community oder geben Sie dort ein Up-Vote ab. Beachten Sie, dass einige auf experimentellen OpenTelemetry-Spezifikationen basieren und möglicherweise zukünftige grundlegende Änderungen einführen.

Um die Community OpenTelemetry Instrumentation Library hinzuzufügen, installieren Sie sie über die requirements.txt-Datei Ihrer Anwendung. Die OpenTelemetry-Autoinstrumentierung nimmt automatisch alle installierten Bibliotheken auf und instrumentiert sie. Hier finden Sie die Liste der Communitybibliotheken.

Automatisieren der Überwachung

Um die Sammlung von Telemetriedaten mit Application Insights zu aktivieren, müssen nur die folgenden Anwendungseinstellungen festgelegt werden:

Screenshot: Anwendungseinstellungen des App Service mit den verfügbaren Einstellungen für Application Insights

Definitionen von Anwendungseinstellungen

Name der App-Einstellung Definition Wert
APPLICATIONINSIGHTS_CONNECTION_STRING Verbindungszeichenfolge für Ihre Application Insights-Ressource Beispiel: abcd1234-ab12-cd34-abcd1234abcd
ApplicationInsightsAgent_EXTENSION_VERSION Die Haupterweiterung, die die Laufzeitüberwachung steuert. ~3

Hinweis

Profiler und Momentaufnahmedebugger sind für Python-Anwendungen nicht verfügbar

App Service-Anwendungseinstellungen mit Azure Resource Manager

Sie können die Azure App Service-Anwendungseinstellungen mit Azure Resource Manager-Vorlagen verwalten und konfigurieren. Sie können diese Methode wählen, wenn Sie neue App Service-Ressourcen mit Resource Manager-Automatisierung bereitstellen oder die Einstellungen vorhandener Ressourcen ändern.

Die grundlegende Struktur der JSON-Anwendungseinstellungen für eine App Service-Ressource sieht folgendermaßen aus:

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

Ein Beispiel für eine Resource Manager-Vorlage mit Anwendungseinstellungen für Application Insights finden Sie in dieser Vorlage. Sehen Sie sich insbesondere den in Zeile 238 beginnenden Abschnitt an.

Um eine Resource Manager-Vorlage mit den Standardeinstellungen für Application Insights zu erstellen, beginnen Sie den Prozess so, als ob Sie eine neue Web-App mit aktivierten Application Insights erstellen würden.

  1. Erstellen Sie eine neue App Service-Ressource mit den gewünschten Web-App-Informationen. Aktivieren Sie Application Insights auf der Registerkarte Überwachung.

  2. Klicken Sie auf Überprüfen + erstellen. Wählen Sie dann Vorlage für Automatisierung herunterladen aus.

    Screenshot des Menüs zum Erstellen von App Service-Web-Apps

    Mit dieser Option wird die aktuellste Resource Manager-Vorlage mit allen erforderlichen Einstellungen generiert.

    Screenshot einer App Service-Web-App-Vorlage

Ersetzen Sie im folgenden Beispiel alle Instanzen von AppMonitoredSite durch Ihren Websitenamen:

Hinweis

Wenn Sie Windows verwenden, legen Sie ApplicationInsightsAgent_EXTENSION_VERSION auf ~2 fest. Wenn Sie Linux verwenden, legen Sie ApplicationInsightsAgent_EXTENSION_VERSION auf ~3 fest.

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

Aktivieren über PowerShell

Zum Aktivieren der Anwendungsüberwachung über PowerShell müssen nur die zugrunde liegenden Anwendungseinstellungen geändert werden. Das folgende Beispiel ermöglicht die Anwendungsüberwachung für eine Website namens AppMonitoredSite in der Ressourcengruppe AppMonitoredRG. Damit werden die Daten konfiguriert, die an den Instrumentierungsschlüssel 012345678-abcd-ef01-2345-6789abcd gesendet werden sollen.

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren des Azure Az PowerShell-Moduls. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Hinweis

Wenn Sie Windows verwenden, legen Sie ApplicationInsightsAgent_EXTENSION_VERSION auf ~2 fest. Wenn Sie Linux verwenden, legen Sie ApplicationInsightsAgent_EXTENSION_VERSION auf ~3 fest.

$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-Instrumentierung

Um die OpenTelemetry Django-Instrumentierung zu verwenden, müssen Sie die DJANGO_SETTINGS_MODULE-Umgebungsvariable in den App Service-Einstellungen so festlegen, dass sie von Ihrem App-Ordner auf Ihr Einstellungsmodul verweisen. Weitere Informationen finden Sie in der Django-Dokumentation.

Häufig gestellte Fragen

Was ist der Unterschied zwischen Standardmetriken von Application Insights und Azure App Service-Metriken?

Application Insights sammelt Telemetriedaten für die Anforderungen, die bis zur Anwendung gelangt sind. Wenn der Fehler in WebApps/WebServer auftritt und die Anforderung die Benutzeranwendung nicht erreicht hat, hat Application Insights keine Telemetriedaten dazu.

Die von Application Insights berechnete Dauer für serverresponsetime stimmt nicht unbedingt mit der von Web-Apps beobachteten Serverantwortzeit überein. Dies liegt daran, dass Application Insights nur die Dauer zählt, bis die Anforderung tatsächlich die Benutzeranwendung erreicht. Wenn die Anforderung in WebServer hängen bleibt oder in die Warteschlange gestellt wird, ist diese Wartezeit in den Web-App-Metriken enthalten, in den Application Insights-Metriken jedoch nicht.

Problembehandlung

Hier finden Sie unser Handbuch zur Problembehandlung für die Überwachung von Python-Anwendungen in Azure App Services mithilfe der automatischen Instrumentierung.

Doppelte Telemetrie

Sie sollten Autoinstrumentation nur für App Service verwenden, wenn Sie keine manuelle Instrumentierung von OpenTelemetry in Ihrem Code verwenden, z. B. den Azure Monitor OpenTelemetry Distro oder den Azure Monitor OpenTelemetry Exporter. Die Verwendung der automatischen Instrumentierung zusätzlich zur manuellen Instrumentierung könnte zu doppelter Telemetrie führen und Ihre Kosten erhöhen. Um die App Service OpenTelemetry-Autoinstrumentierung zu verwenden, entfernen Sie zunächst die manuelle Instrumentierung von OpenTelemetry aus Ihrem Code.

Fehlende Telemetrie

Wenn Ihnen Telemetriedaten fehlen, führen Sie die folgenden Schritte aus, um sicherzustellen, dass die automatische Instrumentierung korrekt aktiviert ist.

Schritt 1: Überprüfen Sie das Application Insights Blatt auf Ihrer App Service Ressource

Vergewissern Sie sich, dass die automatische Instrumentierung im Blatt Application Insights in Ihrer App Service-Ressource aktiviert ist:

Screenshot: Application Insights-Registerkarte mit ausgewählter Option „Aktivieren“

Schritt 2: Bestätigen Sie, dass Ihre App-Einstellungen korrekt sind

Vergewissern Sie sich, dass die ApplicationInsightsAgent_EXTENSION_VERSION-App-Einstellung auf einen Wert ~3 festgelegt ist und dass APPLICATIONINSIGHTS_CONNECTION_STRING auf die entsprechende Application Insights-Ressource zeigt.

Screenshot: Anwendungseinstellungen des App Service mit den verfügbaren Einstellungen für Application Insights

Schritt 3: Überprüfen der Diagnose und Statusprotokolle der automatischen Instrumentierung

Navigieren Sie zu /var/log/applicationinsights/ und öffnen Sie status_*.json.

Vergewissern Sie sich, dass AgentInitializedSuccessfully auf true gesetzt sind und IKey einen gültigen iKey hat.

Hier sehen Sie ein Beispiel für eine JSON-Datei:

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

Die applicationinsights-extension.log-Datei im selben Ordner kann andere hilfreiche Diagnosen anzeigen.

Django-Apps

Wenn Ihre App Django verwendet und entweder nicht startet oder falsche Einstellungen verwendet, stellen Sie sicher, dass Sie die DJANGO_SETTINGS_MODULE-Umgebungsvariable festlegen. Weitere Informationen finden Sie im Abschnitt Django-Instrumentatierung.


Testen der Konnektivität zwischen Ihrem Anwendungshost und dem Erfassungsdienst

Application Insights SDKs und -Agents senden Telemetriedaten, die als REST-Aufrufe unserer Erfassungsendpunkte erfasst werden sollen. Sie können die Konnektivität Ihres Webservers oder Anwendungshostcomputers mit den Endpunkten des Erfassungsdiensts testen, indem Sie unformatierte REST-Clients über PowerShell- oder cURL-Befehle verwenden. Weitere Informationen finden Sie unter Problembehandlung bei fehlender Anwendungstelemetrie in Azure Monitor Application Insights.

Informationen zu den neuesten Updates und Fehlerbehebungen finden Sie in den Versionshinweisen. -->

Nächste Schritte