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.
Selecteer Application Insights in het Configuratiescherm van Azure voor uw app-service en selecteer vervolgens Inschakelen.
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.
U geeft de resource op en deze is klaar voor gebruik.
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:
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.
Het maken van een Application Insights-resource automatiseren en een koppeling maken naar uw zojuist gemaakte App Service-resource
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.
Maak een nieuwe App Service-resource met de gewenste web-app-informatie. Schakel Application Insights in op het tabblad Bewaking .
Selecteer Controleren + maken. Selecteer vervolgens Een sjabloon voor automatisering downloaden.
Met deze optie wordt de meest recente Resource Manager-sjabloon gegenereerd met alle vereiste instellingen geconfigureerd.
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 AppMonitoredRG
wordt 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:
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.
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
- Azure Diagnostics inschakelen om te worden verzonden naar Application Insights
- Metrische gegevens over de servicestatus controleren om ervoor te zorgen dat uw service beschikbaar is en reageert
- Waarschuwingsmeldingen ontvangen wanneer operationele gebeurtenissen plaatsvinden of metrische gegevens een drempelwaarde overschrijden
- Overzicht van beschikbaarheid