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:

Instrumentación Nombre de la biblioteca compatible Versiones compatibles
Instrumentación de OpenTelemetry para Django django vínculo
Instrumentación de OpenTelemetry para FastApi fastapi vínculo
Instrumentación de OpenTelemetry para Flask flask vínculo
Instrumentación de OpenTelemetry para Psycopg2 psycopg2 vínculo
Instrumentación de OpenTelemetry para Requests requests vínculo
Instrumentación de OpenTelemetry para UrlLib urllib All
Instrumentación de OpenTelemetry para UrlLib3 urllib3 vínculo

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.

  1. Seleccione Application Insights en el panel de control de Azure del servicio de aplicaciones y, después, seleccione Habilitar.

    Captura de pantalla de la pestaña

  2. 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.

    Captura de pantalla de la lista desplegable Cambiar el recurso.

  3. Especifique el recurso y estará listo para su uso.

    Captura de pantalla de la instrumentación de la aplicación.

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:

Captura de pantalla de la configuración de la aplicación de App Service con la configuración de Application Insights disponible.

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.

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.

  1. 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.

  2. Seleccione Revisar + crear. Seleccione Descargar una plantilla para la automatización.

    Captura de pantalla que muestra el menú de creación de aplicaciones web de App Service.

    Esta opción genera la plantilla de Azure Resource Manager más reciente con toda la configuración necesaria establecida.

    Captura de pantalla que muestra una plantilla de aplicación web de App Service.

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:

Captura de pantalla de la pestaña

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.

Captura de pantalla de la configuración de la aplicación de App Service con la configuración de Application Insights disponible.

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