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.
Wählen Sie Application Insights im Azure-Kontrollpanel für Ihren App-Dienst aus und wählen Sie dann Aktivieren.
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.
Sie geben die Ressource an, und schon ist es einsatzbereit.
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.name festzulegen. |
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_TRACES_SAMPLER_ARG |
Gibt das Verhältnis der Telemetrie der verteilten Ablaufverfolgungs an, die analysiert werden soll. Zulässige Werte liegen zwischen 0 und 1. Der Standardwert ist 1,0, d. h. es werden keine Telemetriedaten abgerufen. |
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:
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.
Automatisieren der Erstellung einer Application Insights-Ressource und Verknüpfen Ihrer neu erstellten App Service-Ressource
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.
Erstellen Sie eine neue App Service-Ressource mit den gewünschten Web-App-Informationen. Aktivieren Sie Application Insights auf der Registerkarte Überwachung.
Klicken Sie auf Überprüfen + erstellen. Wählen Sie dann Vorlage für Automatisierung herunterladen aus.
Mit dieser Option wird die aktuellste Resource Manager-Vorlage mit allen erforderlichen Einstellungen generiert.
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 von Azure PowerShell. 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:
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.
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
- Ermöglichen des Sendens von Azure-Diagnosedaten an Application Insights
- Überwachen von Dienstintegritätsmetriken, um sicherzustellen, dass Ihr Dienst verfügbar und reaktionsfähig ist
- Empfangen von Warnbenachrichtigungen, wenn ein Vorgangsereignis auftritt oder Metriken einen Schwellenwert überschreiten
- Übersicht über die Verfügbarkeit
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für