Supervisión de aplicaciones para Azure App Service y Python (versión preliminar)
Importante
Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.
Supervise sus aplicaciones web de Python en Azure App Services sin modificar el código. En esta guía se muestra cómo habilitar Application Insights de Azure Monitor y se ofrecen sugerencias para automatizar implementaciones a gran escala.
Los instrumentos de integración implementan las bibliotecas de Python populares en el código, lo que le permite recopilar y correlacionar automáticamente las dependencias, los registros y las métricas. Después de instrumentar, recopilará las llamadas y las métricas de estas bibliotecas de Python:
Nota:
Si usa Django, consulte la sección adicional Instrumentación de Django de este artículo.
La telemetría de registro se recopila en el nivel del registrador raíz. Para obtener más información sobre la jerarquía de registro nativo de Python, consulte la documentación de registro de Python.
Requisitos previos
- Python, versión 3.11 o anterior.
- App Service debe implementarse como código. No se admiten contenedores personalizados.
Habilitación de Application Insights
La manera más fácil de supervisar las aplicaciones de Python en Azure App Services es mediante Azure Portal.
Al activar la supervisión de aplicaciones en Azure Portal, la aplicación se instrumenta automáticamente con Application Insights y no requiere ningún cambio de código.
Nota:
Solo debe usar la instrumentación automática en App Service si no usa la instrumentación manual de OpenTelemetry en el código, como la distribución de OpenTelemetry de Azure Monitor o el exportador de OpenTelemetry de Azure Monitor. Esto es para evitar que se envíen datos duplicados. Para más información sobre este tema, consulte la sección de solución de problemas en este artículo.
Instrumentación automática desde Azure Portal
Para obtener una lista completa de escenarios de instrumentación automática compatibles, consulte Entornos, lenguajes y proveedores de recursos admitidos.
Active la supervisión de las aplicaciones de Python en Azure App Service sin necesidad de realizar cambios en el código.
Application Insights para Python se integra con Azure App Service para Linux basado en código.
La integración se encuentra en versión preliminar pública. Agrega el SDK de Python, que se encuentra en disponibilidad general.
Seleccione Application Insights en el panel de control de Azure del servicio de aplicaciones y, después, seleccione Habilitar.
Cree un nuevo recurso o seleccione un recurso de Application Insights existente para esta aplicación.
Nota
Al seleccionar Aceptar para crear el recurso, se le pedirá Aplicar la configuración de supervisión. Con la selección de Continuar se vinculará el nuevo recurso de Application Insights a su servicio de aplicaciones. Al hacerlo, también se desencadenará un reinicio del servicio de aplicaciones.
Especifique el recurso y estará listo para su uso.
Configuración
Puede configurar con variables de entorno de OpenTelemetry como las siguientes:
Variable de entorno | Descripción |
---|---|
OTEL_SERVICE_NAME , OTEL_RESOURCE_ATTRIBUTES |
Especifica los atributos de recursos de OpenTelemetry asociados con la aplicación. Puede establecer cualquier atributo de recurso con OTEL_RESOURCE_ATTRIBUTES o usar OTEL_SERVICE_NAME para establecer solo service.name . |
OTEL_LOGS_EXPORTER |
Si se establece en None , deshabilita la recopilación y exportación de la telemetría de registros. |
OTEL_METRICS_EXPORTER |
Si se establece en None , deshabilita la recopilación y exportación de la telemetría de métricas. |
OTEL_TRACES_EXPORTER |
Si se establece en None , deshabilita la recopilación y exportación de la telemetría de seguimiento distribuido. |
OTEL_BLRP_SCHEDULE_DELAY |
Especifica el intervalo de exportación de registros en milisegundos. Tiene como valor predeterminado 5000. |
OTEL_BSP_SCHEDULE_DELAY |
Especifica el intervalo de exportación del seguimiento distribuido en milisegundos. Tiene como valor predeterminado 5000. |
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS |
Especifica qué instrumentaciones de OpenTelemetry se deben deshabilitar. Cuando se deshabilita, las instrumentaciones no se ejecutan como parte de la instrumentación automática. Acepta una lista separada por comas de nombres de biblioteca en minúscula. Por ejemplo, establézcalo en "psycopg2,fastapi" para deshabilitar las instrumentaciones de Psycopg2 y FastAPI. El valor predeterminado es una lista vacía, lo que habilita todas las instrumentaciones admitidas. |
Adición de una biblioteca de instrumentación de la comunidad
Puede recopilar más datos automáticamente al incluir bibliotecas de instrumentación de la comunidad de OpenTelemetry.
Precaución
No se admite ni garantiza la calidad de las bibliotecas de instrumentación de la comunidad. Para sugerir una para nuestra distribución, publique o vote en nuestra comunidad de comentarios. Tenga en cuenta que algunos se basan en especificaciones de OpenTelemetry experimentales y pueden introducir cambios importantes en el futuro.
Para agregar la biblioteca de instrumentación de OpenTelemetry de la comunidad, instálela usando el archivo requirements.txt
de la aplicación. La instrumentación automática de OpenTelemetry recopila e instrumenta automáticamente todas las bibliotecas instaladas. Busque la lista de bibliotecas de la comunidad aquí.
Automatización de la supervisión
Para habilitar la recopilación de datos de telemetría con Application Insights, solo es necesario configurar los valores siguientes de la aplicación:
Definiciones de los valores de configuración de la aplicación
Nombre del valor de configuración de la aplicación | Definición | Valor |
---|---|---|
APPLICATIONINSIGHTS_CONNECTION_STRING | Cadena de conexión para el recurso de Application Insights | Ejemplo: abcd1234-ab12-cd34-abcd1234abcd |
ApplicationInsightsAgent_EXTENSION_VERSION | Extensión principal; controla la supervisión en el entorno en tiempo de ejecución. | ~3 |
Nota:
Profiler y Snapshot Debugger no están disponibles para aplicaciones de Python.
Configuración de aplicaciones de App Service con Azure Resource Manager
La configuración de las aplicaciones de Azure App Service se puede administrar y definir con plantillas de Azure Resource Manager. Use este método para implementar nuevos recursos de App Service con la automatización de Resource Manager o para modificar la configuración de los recursos actuales.
La estructura básica de JSON de la configuración de la aplicación para un recurso de App Service:
"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"
}
}
]
Para ver un ejemplo de una plantilla de Resource Manager con la configuración de la aplicación establecida para Application Insights, le puede resultar útil esta plantilla. En concreto, vea la sección que comienza en la línea 238.
Automatización de la creación de un recurso de Application Insights y vínculo al recurso de App Service recién creado
Para crear una plantilla de Resource Manager con la configuración predeterminada de Application Insights, comienza el proceso como si fueses a crear una aplicación web con Application Insights habilitado.
Cree un nuevo recurso de App Service con la información de la aplicación web deseada. Habilite Application Insights en la pestaña Supervisión.
Seleccione Revisar + crear. Seleccione Descargar una plantilla para la automatización.
Esta opción genera la plantilla de Azure Resource Manager más reciente con toda la configuración necesaria establecida.
En el ejemplo siguiente, reemplace todas las instancias de AppMonitoredSite
por el nombre del sitio:
Nota:
Si usas Windows, establece ApplicationInsightsAgent_EXTENSION_VERSION
en ~2
. Si usas Linux, establece ApplicationInsightsAgent_EXTENSION_VERSION
en ~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"
}
Habilitación mediante Powershell
Para habilitar la supervisión de la aplicación a través de PowerShell, solo debe cambiar la configuración de la aplicación subyacente. En el ejemplo siguiente, se habilita la supervisión de aplicaciones para un sitio web denominado AppMonitoredSite
en el grupo de recursos AppMonitoredRG
. Configura los datos que se enviarán a la clave de instrumentación 012345678-abcd-ef01-2345-6789abcd
.
Nota
Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.
Nota:
Si usas Windows, establece ApplicationInsightsAgent_EXTENSION_VERSION en ~2
. Si usa Linux, establezca ApplicationInsightsAgent_EXTENSION_VERSION en ~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
Instrumentación de Django
Para usar la instrumentación de OpenTelemetry para Django, debe establecer la variable de entorno DJANGO_SETTINGS_MODULE
en la configuración de App Service para que apunte desde la carpeta de la aplicación al módulo de configuración. Para obtener más información, consulte la documentación de Django.
Preguntas más frecuentes
¿Cuál es la diferencia entre las métricas estándar de Application Insights y las métricas de Azure App Service?
Application Insights recopila datos de telemetría de las solicitudes que se enviaron a la aplicación. Si el error se produjo en Web Apps o en el servidor web, y la solicitud no llegó a la aplicación de usuario, Application Insights no tendrá ningún dato de telemetría sobre él.
La duración de serverresponsetime
calculada por Application Insights no coincidirá necesariamente con el tiempo de respuesta del servidor observado por Web Apps. Esto se debe a que Application Insights solo cuenta la duración cuando la solicitud llega realmente a la aplicación de usuario. Si la solicitud se bloquea o se pone en cola en el servidor web, ese tiempo de espera se incluirá en las métricas de Web Apps, pero no en las métricas de Application Insights.
Solución de problemas
Aquí se proporciona nuestra guía de solución de problemas para la supervisión de aplicaciones de Python en Azure App Services mediante la instrumentación automática.
Telemetría duplicada
Solo debe usar la instrumentación automática en App Service si no usa la instrumentación manual de OpenTelemetry en el código, como la distribución de OpenTelemetry de Azure Monitor o el exportador de OpenTelemetry de Azure Monitor. El uso de la instrumentación automática además de la instrumentación manual podría provocar la duplicación de la telemetría y aumentar el costo. Para usar la instrumentación automática de OpenTelemetry en App Service, quite primero la instrumentación manual de OpenTelemetry del código.
Telemetría faltante
Si falta telemetría, siga estos pasos para confirmar que la instrumentación automática está habilitada correctamente.
Paso 1: Comprobación de la hoja de Application Insights en el recurso de App Service
Confirme que la instrumentación automática está habilitada en la hoja de Application Insights en el recurso de App Service:
Paso 2: Confirmación de la configuración correcta de la aplicación
Confirme que la configuración de ApplicationInsightsAgent_EXTENSION_VERSION
de la aplicación está establecida en un valor ~3
y que APPLICATIONINSIGHTS_CONNECTION_STRING
apunta al recurso de Application Insights adecuado.
Paso 3: Comprobación de los registros de estado y los diagnósticos de instrumentación automática
Vaya a /var/log/applicationinsights/ y abra status_*.json.
Confirme que AgentInitializedSuccessfully
está establecido en true y que IKey
tiene un iKey válido.
Este es un archivo JSON de ejemplo:
"AgentInitializedSuccessfully":true,
"AppType":"python",
"MachineName":"c89d3a6d0357",
"PID":"47",
"IKey":"00000000-0000-0000-0000-000000000000",
"SdkVersion":"1.0.0"
El archivo applicationinsights-extension.log
de la misma carpeta puede mostrar otros diagnósticos útiles.
Aplicaciones de Django
Si su aplicación usa Django y no se puede iniciar o usa una configuración incorrecta, asegúrese de establecer la variable de entorno DJANGO_SETTINGS_MODULE
. Consulte la sección Instrumentación de Django para obtener más información.
Prueba de la conectividad entre el host de la aplicación y el servicio de ingesta
Los SDK y agentes de Application Insights envían telemetría para ingerirse como llamadas REST a nuestros puntos de conexión de ingesta. Puede probar la conectividad desde el servidor web o la máquina host de la aplicación a los puntos de conexión del servicio de ingesta mediante clientes REST sin procesar con comandos de PowerShell o curl. Consulte Solución de problemas de telemetría de aplicaciones que faltan en Application Insights de Azure Monitor.
Para obtener las actualizaciones y correcciones de errores más recientes, consulte las notas de la versión. -->
Pasos siguientes
- Habilite el envío de diagnósticos de Azure a Application Insights.
- Supervise las métricas del estado del servicio para asegurarse de que el servicio está disponible y responde adecuadamente.
- Reciba notificaciones de alerta cada vez que se produzcan eventos de operaciones o que las métricas traspasen un umbral.
- Información general de disponibilidad