Configuración de la supervisión para Azure Functions

Azure Functions se integra con Application Insights para permitirle supervisar mejor las aplicaciones de funciones. Application Insights, una característica de Azure Monitor, es un servicio de Application Performance Management (APM) extensible que recopila los datos generados por la aplicación de funciones, incluida la información que la aplicación escribe en los registros. La integración de Application Insights se suele habilitar al crear la aplicación de funciones. Si la aplicación no tiene establecida la clave de instrumentación, antes debe habilitar la integración de Application Insights.

Puede usar Application Insights sin ninguna configuración personalizada. La configuración predeterminada puede dar lugar a grandes volúmenes de datos. Si usa una suscripción de Visual Studio Azure, es posible que alcance su límite de datos para Application Insights. Para más información acerca de los costos de Application Insights, consulte Facturación de Application Insights. Para más información, consulte Soluciones con un gran volumen de telemetría.

Más adelante en este artículo verá cómo configurar y personalizar los datos que envían las funciones a Application Insights. La configuración de registro común se puede establecer en el archivo host.json. De forma predeterminada, estos ajustes también rigen los registros personalizados emitidos por el código, aunque en algunos casos este comportamiento se puede deshabilitar a favor de las opciones que le dan más control sobre el registro. Consulte Registros de aplicaciones personalizados para saber más.

Nota

Puede usar una configuración de la aplicación especialmente creada para representar valores específicos en un archivo host.json para un entorno específico. Esto le permitirá, de hecho, cambiar la configuración del archivo host.json sin tener que volver a publicar el archivo host.json en el proyecto. Para más información, consulte Invalidación de valores de host.json.

Registros de aplicaciones personalizados

De forma predeterminada, los registros de aplicaciones personalizados que escriba se envían al host de Functions, que luego los envía a Application Insights a través de la categoría "Trabajo". Algunas pilas de lenguaje le permiten en su lugar enviar los registros directamente a Application Insights, lo que le proporciona control total sobre cómo se emiten los registros que escribe. La canalización de registro cambia de worker -> Functions host -> Application Insights a worker -> Application Insights.

En la tabla siguiente se resumen las opciones disponibles para cada pila:

Pila de lenguajes Configuración de registros personalizados
.NET (modelo en proceso) host.json
.NET (modelo aislado) De forma predeterminada: host.json
Opción para enviar registros directamente: Configurar Application Insights en HostBuilder
Node.JS host.json
Python host.json
Java De forma predeterminada: host.json
Opción para enviar registros directamente: Configurar el agente de Java de Application Insights
PowerShell host.json

Cuando los registros de aplicaciones personalizados se envían directamente, el host ya no los emite y host.json ya no controla su comportamiento. Del mismo modo, las opciones expuestas por cada pila solo se aplican a los registros personalizados y no cambian el comportamiento de los demás registros en runtime descritos en este artículo. Para controlar el comportamiento de todos los registros, es posible que tenga que realizar cambios en ambas configuraciones.

Configuración de categorías

El registrador de Azure Functions incluye una categoría para cada registro. La categoría indica qué parte del código de tiempo de ejecución o del código de la función escribió el registro. Las categorías difieren entre la versión 1. x y las versiones posteriores.

Los nombres de categoría se asignan de forma diferente en Functions en comparación con otros marcos de .NET. Por ejemplo, cuando se usa ILogger<T> en ASP.NET, la categoría es el nombre del tipo genérico. Las funciones de C# también usan ILogger<T>, pero en lugar de establecer el nombre de tipo genérico como una categoría, el tiempo de ejecución asigna categorías basadas en el origen. Por ejemplo:

  • A las entradas relacionadas con la ejecución de una función se les asigna una categoría de Function.<FUNCTION_NAME>.
  • A las entradas creadas por código de usuario dentro de la función, como cuando se llama a logger.LogInformation(), se les asigna una categoría de Function.<FUNCTION_NAME>.User.

En el siguiente gráfico, se describen las categorías principales de registros que crea el entorno de ejecución:

Category Tabla Descripción
Function traces Incluye registros iniciados y completados de función para todas las ejecuciones de función. En el caso de ejecuciones correctas, estos registros son de nivel Information. Las excepciones se registran en el nivel Error. El entorno de ejecución también crea registros de nivel Warning; por ejemplo, cuando los mensajes en cola se envían a la cola de dudosos.
Function.<YOUR_FUNCTION_NAME> dependencies Los datos de dependencia se recopilan automáticamente para algunos servicios. En el caso de ejecuciones correctas, estos registros son de nivel Information. Para más información, consulte Dependencias. Las excepciones se registran en el nivel Error. El entorno de ejecución también crea registros de nivel Warning; por ejemplo, cuando los mensajes en cola se envían a la cola de dudosos.
Function.<YOUR_FUNCTION_NAME> customMetrics
customEvents
Los SDK de C# y JavaScript permiten recopilar métricas personalizadas y registrar eventos personalizados. Para más información, consulte Datos de telemetría personalizados.
Function.<YOUR_FUNCTION_NAME> traces Incluye registros de funciones iniciadas y completadas para ejecuciones de función específicas. En el caso de ejecuciones correctas, estos registros son de nivel Information. Las excepciones se registran en el nivel Error. El entorno de ejecución también crea registros de nivel Warning; por ejemplo, cuando los mensajes en cola se envían a la cola de dudosos.
Function.<YOUR_FUNCTION_NAME>.User traces Registros generados por el usuario, que pueden integrarse en cualquier nivel de registro. Para más información sobre cómo escribir en los registros desde las funciones, consulte Escritura en los registros.
Host.Aggregator customMetrics Estos registros generados en tiempo de ejecución proporcionan los recuentos y promedios de las invocaciones de función en un período de tiempo configurable. El período predeterminado es 30 segundos o 1000 resultados, lo que ocurra primero. Algunos ejemplos son el número de ejecuciones, la tasa de éxito y la duración. Todos estos registros se escriben en el nivel Information. Si filtra por Warning o superior, no verá ninguno de estos datos.
Host.Results requests Estos registros generados en tiempo de ejecución indican si una función se ha realizado correctamente o no. Todos estos registros se escriben en el nivel Information. Si filtra por Warning o superior, no verá ninguno de estos datos.
Microsoft traces Categoría de registro completa que refleja un componente del entorno de ejecución de .NET invocado por el host.
Worker traces Registros generados por el proceso de trabajo de los lenguajes que no son .NET. Los registros del rol de trabajo de lenguaje también se pueden registrar en una categoría Microsoft.*, como Microsoft.Azure.WebJobs.Script.Workers.Rpc.RpcFunctionInvocationDispatcher. Se escriben en el nivel Information.

Nota

En el caso de las funciones de la biblioteca de clases de .NET, estas categorías dan por supuesto que usa ILogger y no ILogger<T>. Para más información, consulte la documentación de ILogger de Functions.

En la columna Tabla se indica en qué tabla de Application Insights se escribe el registro.

Configuración de los niveles de registro

Se asigna un nivel de registro a cada registro. El valor es un número entero que indica la importancia relativa:

LogLevel Código Descripción
Seguimiento 0 Registros que contienen los mensajes más detallados. Estos mensajes pueden contener datos confidenciales de la aplicación. Estos mensajes están deshabilitados de forma predeterminada y nunca se deben habilitar en un entorno de producción.
Depurar 1 Registros que se usan para la investigación interactiva durante el desarrollo. Estos registros deben contener principalmente información útil para la depuración y no tienen ningún valor a largo plazo.
Información 2 Registros que realizan el seguimiento del flujo general de la aplicación. Estos registros deben tener un valor a largo plazo.
Advertencia 3 Registros que resaltan un evento anormal o inesperado en el flujo de la aplicación, pero que no hacen que se detenga la ejecución de la aplicación.
Error 4 Registros que resaltan en qué momento se detiene el flujo de ejecución actual debido a un error. Estos errores deben indicar un error en la actividad actual, no un error en toda la aplicación.
Crítico 5 Registros que describen una aplicación no recuperable o un bloqueo del sistema, o bien un error catastrófico que requiere atención inmediata.
None 6 Deshabilita el registro de la categoría especificada.

La configuración del archivo host.json determina la cantidad de registro que envía una aplicación de Functions a Application Insights.

Para cada categoría, debe indicar el nivel de registro mínimo para enviar. La configuración del archivo host.json varía en función de la versión del entorno de ejecución de Functions.

En los ejemplos siguientes se define el registro en función de las siguientes reglas:

  • El nivel de registro predeterminado se establece en Warning para evitar un nivel de registro excesivo para categorías imprevistas.
  • Host.Aggregator y Host.Results se establecen en niveles inferiores. Establecerlos en un nivel demasiado alto (especialmente superior a Information) puede dar lugar a la pérdida de métricas y datos de rendimiento.
  • El registro de las ejecuciones de funciones se establece en Information. Esto se puede invalidar en el desarrollo local en Debug o Trace, cuando sea necesario.
{
  "logging": {
    "fileLoggingMode": "debugOnly",
    "logLevel": {
      "default": "Warning",
      "Host.Aggregator": "Trace",
      "Host.Results": "Information",
      "Function": "Information"
    }
  }
}

Si el archivo host.json incluye varios registros que comienzan con la misma cadena, los más definidos se asignan primero. Considere el ejemplo siguiente que registra todo en el entorno de ejecución, excepto la categoría Host.Aggregator, en el nivel Error:

{
  "logging": {
    "fileLoggingMode": "debugOnly",
    "logLevel": {
      "default": "Information",
      "Host": "Error",
      "Function": "Error",
      "Host.Aggregator": "Information"
    }
  }
}

Puede usar un valor de nivel de registro de None para evitar que se escriban registros en una categoría.

Precaución

Azure Functions se integra con Application Insights almacenando los eventos de telemetría en tablas de Application Insights. Establecer un nivel de registro de categorías en cualquier valor diferente de Information impedirá que los datos de telemetría fluyan a esas tablas. Como resultado, no podrá ver los datos relacionados en Application Insights ni en la pestaña de supervisión de la función.

A partir de los ejemplos anteriores:

  • Si la categoría Host.Results se establece en el nivel de registro Error, solo se recopilarán los eventos de telemetría de la ejecución del host en la tabla requests correspondientes a las ejecuciones de funciones con error, lo que impide mostrar los detalles de ejecución del host de las ejecuciones correctas en Application Insights y en la pestaña de supervisión de la función.
  • Si la categoría Function se establece en el nivel de registro Error, se dejarán de recopilar datos de telemetría de las funciones relacionados con dependencies, customMetrics y customEvents para todas las funciones, lo que impide ver cualquiera de estos datos en Application Insights. Solo se recopilarán los objetos traces registrados con el nivel Error.

En ambos casos, seguirá recopilando datos de errores y excepciones en Application Insights y en la pestaña de supervisión de la función. Para más información, consulte Soluciones con un gran volumen de telemetría.

Configurar el agregador

Como se indicó en la sección anterior, el tiempo de ejecución agrega datos acerca de las ejecuciones de la función durante un período de tiempo. El período predeterminado es 30 segundos o 1000 ejecuciones, lo que ocurra primero. Puede configurar este valor en el archivo host.json. Este es un ejemplo:

{
    "aggregator": {
      "batchSize": 1000,
      "flushTimeout": "00:00:30"
    }
}

Configurar el muestreo

Application Insights tiene una característica de muestreo que le puede ayudar a impedir que se recopilen demasiados datos de telemetría sobre las ejecuciones completadas en los momentos de picos de carga. Cuando tasa de ejecuciones entrantes supera un umbral especificado, Application Insights empieza a omitir aleatoriamente algunas de las ejecuciones entrantes. La configuración predeterminada para el número máximo de ejecuciones por segundo es de 20 (cinco en la versión 1.x). Puede configurar el muestreo en el archivo host.json. Este es un ejemplo:

{
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond" : 20,
        "excludedTypes": "Request;Exception"
      }
    }
  }
}

Puede excluir determinados tipos de datos de telemetría del muestreo. En este ejemplo, se excluyen del muestreo los datos de tipo Request y Exception. Esto garantizará que se registren todas las ejecuciones (solicitudes) y excepciones de las funciones, en tanto que otros tipos de datos de telemetría siguen sujetos al muestreo.

Si el proyecto toma una dependencia del SDK de Application Insights para realizar el seguimiento de telemetría manual, puede tener lugar un funcionamiento extraño si la configuración de muestreo es diferente de la configuración de muestreo de la aplicación de funciones. En ese caso, use la misma configuración de muestreo que la de la aplicación de funciones. Para más información, consulte Muestreo en Application Insights.

Habilite la recopilación de consultas SQL

Application Insights recopila automáticamente datos sobre las dependencias de las solicitudes HTTP, las llamadas de la base de datos y varios enlaces. Para más información, consulte Dependencias. El nombre del servidor y la base de datos siempre se recopilan y almacenan para las llamadas SQL, pero el texto de la consulta SQL no se recopila de manera predeterminada. Puede usar dependencyTrackingOptions.enableSqlCommandTextInstrumentation para habilitar el registro del texto de las consultas SQL estableciendo en el archivo host.json (como mínimo) lo siguiente:

"logging": {
    "applicationInsights": {
        "enableDependencyTracking": true,    
        "dependencyTrackingOptions": {
            "enableSqlCommandTextInstrumentation": true
        }
    }
}

Para obtener más información, consulte Seguimiento avanzado de SQL para obtener consultas SQL completas.

Configuración de los registros del controlador de escala

Esta característica se encuentra en su versión preliminar.

Puede hacer que el controlador de escala de Azure Functions emita registros en Application Insights o en Blob Storage para comprender mejor las decisiones que este controlador está tomando para la aplicación de funciones.

Para habilitar esta característica, puede agregar una configuración de aplicación llamada SCALE_CONTROLLER_LOGGING_ENABLED a la configuración de la aplicación de funciones. El siguiente valor de la configuración debe tener el formato <DESTINATION>:<VERBOSITY>:

Propiedad Descripción
<DESTINATION> Destino al que se envían los registros. Los valores válidos son AppInsights y Blob.
Cuando use AppInsights, asegúrese de que Application Insights está habilitado en la aplicación de funciones.
Al establecer el destino en Blob, los registros se crean en un contenedor de blobs denominado azure-functions-scale-controller en la cuenta de almacenamiento predeterminada establecida en la configuración de la aplicación AzureWebJobsStorage.
<VERBOSITY> Especifica el nivel de registro. Los valores admitidos son None, Warning y Verbose.
Cuando se establece en Verbose, el controlador de escala registra una razón para cada cambio en el número de trabajos, así como información sobre los desencadenadores de tales decisiones. Los registros detallados incluyen advertencias de desencadenador y los valores hash que usan los desencadenadores antes y después de que se ejecute el controlador de escala.

Sugerencia

Tenga en cuenta que, aunque deje habilitado el registro del controlador de escala, afectará a los costos potenciales de la supervisión de la aplicación de funciones. Tenga en cuenta habilitar el registro hasta que haya recopilado suficientes datos para entender cómo se comporta el controlador de escala y, a continuación, deshabilítelo.

Por ejemplo, el siguiente comando de la CLI de Azure activa el registro detallado del controlador de escala para Application Insights:

az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:Verbose

En este ejemplo, reemplace <FUNCTION_APP_NAME> y <RESOURCE_GROUP_NAME> por el nombre de la aplicación de funciones y el nombre del grupo de recursos, respectivamente.

El siguiente comando de la CLI de Azure deshabilita el registro estableciendo el nivel de detalle en None:

az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:None

También puede deshabilitar el registro si quita la configuración de SCALE_CONTROLLER_LOGGING_ENABLED con el siguiente comando de la CLI de Azure:

az functionapp config appsettings delete --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--setting-names SCALE_CONTROLLER_LOGGING_ENABLED

Con el registro del controlador de escala habilitado, ahora puede consultar los registros del controlador de escala.

Habilitación de la integración de Application Insights

Para que una aplicación de funciones envíe datos a Application Ideas, debe conectarse al recurso application Ideas con solo una de estas opciones de configuración de la aplicación:

Nombre del valor Descripción
APPLICATIONINSIGHTS_CONNECTION_STRING Esta es la configuración recomendada, que es necesaria cuando la instancia de Application Ideas se ejecuta en una nube soberana. El cadena de conexión admite otras nuevas funcionalidades.
APPINSIGHTS_INSTRUMENTATIONKEY Configuración heredada, que está en desuso por Application Ideas en favor de la configuración de cadena de conexión.

Al crear la aplicación de funciones en Azure Portal, desde la línea de comandos mediante Azure Functions Core Tools o Visual Studio Code, la integración de Application Insights está habilitada de manera predeterminada. El recurso de Application Insights tiene el mismo nombre que la aplicación de función y se crea en la misma región o en la región más cercana.

Nueva aplicación de función en el portal

Para revisar el recurso de Application Insights que se está creando, selecciónelo para expandir la ventana Application Insights. Puede cambiar el valor de Nuevo nombre de recurso o seleccionar otro valor en Ubicación en la ubicación geográfica de Azure donde quiera almacenar los datos.

Screenshot of enabling Application Insights while creating a function app.

Al seleccionar Crear, se crea un recurso de Application Insights con la aplicación de funciones, que tiene la opción APPLICATIONINSIGHTS_CONNECTION_STRING establecida en la configuración de la aplicación. Todo está listo para funcionar.

Adición a una aplicación de función existente

Si no se creó ningún recurso de Application Insights con la aplicación de funciones, siga los pasos que se describen a continuación para crearlo. A continuación, puede agregar el cadena de conexión desde ese recurso como una configuración de aplicación en la aplicación de funciones.

  1. En Azure Portal, busque y seleccione aplicación de funciones y, a continuación, seleccione la aplicación de funciones.

  2. Seleccione el banner Application Insights no está configurado. en la parte superior de la ventana. Si no ve el banner, es posible que la aplicación ya tenga Application Insights habilitado.

    Screenshot of enabling Application Insights from the portal.

  3. Expanda Cambie su recurso y cree un recurso de Application Insights, para lo que deberá usar los valores que se especifican en la tabla siguiente:

    Configuración Valor sugerido Descripción
    Nuevo nombre de recurso Nombre de aplicación único Lo más fácil es usar el mismo nombre que usa para la aplicación de función, que debe ser único en su suscripción.
    Ubicación Oeste de Europa Si es posible, use la misma región que la aplicación de funciones o una que esté cerca de esa región.

    Screenshot of creating an Application Insights resource.

  4. Seleccione Aplicar.

    El recurso de Application Insights se crea en el mismo grupo de recursos y suscripción que su aplicación de función. Después de crear el recurso, cierre la ventana Application Insights.

  5. En la aplicación de funciones, seleccione Configuración en Configuración y, después, seleccione Configuración de la aplicación. Si ve una configuración denominada APPLICATIONINSIGHTS_CONNECTION_STRING, significa que la integración de Application Insights está habilitada para la aplicación de función que se ejecuta en Azure. Si por algún motivo esta configuración no existe, agréguela con el Ideas cadena de conexión de aplicación como valor.

Nota:

Es posible que las aplicaciones de funciones anteriores usen APPINSIGHTS_INSTRUMENTATIONKEY en lugar de APPLICATIONINSIGHTS_CONNECTION_STRING. Siempre que sea posible, debes actualizar la aplicación para usar el cadena de conexión en lugar de la clave de instrumentación.

Deshabilitar el registro integrado

Las primeras versiones de Functions usaban la supervisión integrada, que ya no se recomienda. Cuando habilite Application Insights, deshabilite el registro integrado que usa Azure Storage. El registro integrado es útil para realizar pruebas con cargas de trabajo ligeras, pero no está diseñado para su uso en producción de alta carga. Para la supervisión de producción, se recomienda Application Insights. Si el registro integrado se usa en producción, el registro resultante podría estar incompleto debido a la limitación de Azure Storage.

Para deshabilitar el registro integrado, elimine la configuración de la aplicación AzureWebJobsDashboard. Para obtener información acerca de cómo eliminar la configuración de la aplicación en Azure Portal, consulte la sección Trabajo con la configuración de la aplicación de Administración de la aplicación de funciones. Antes de eliminar la configuración de la aplicación, asegúrese de que ninguna función existente en la misma aplicación de funciones utilice la configuración para los desencadenadores o los enlaces de Azure Storage.

Soluciones con un gran volumen de telemetría

Las aplicaciones de funciones son una parte esencial de las soluciones que pueden provocar grandes volúmenes de datos de telemetría, como en soluciones de IoT, soluciones rápidas controladas por eventos, sistemas financieros de alta carga y sistemas de integración. En este caso, debe considerar una configuración adicional para reducir los costos al tiempo que mantiene la observabilidad.

Los datos de telemetría generados se pueden consumir en paneles en tiempo real, alertas, diagnósticos detallados, etc. En función de cómo se vayan a consumir los datos de telemetría generados, tendrá que definir una estrategia para reducir el volumen de datos generados. Esta estrategia le permitirá supervisar, operar y diagnosticar adecuadamente las aplicaciones de funciones en producción. Puede considerar las opciones siguientes:

  • Uso del muestreo: como se mencionó anteriormente, ayudará a reducir drásticamente el volumen de eventos de telemetría ingeridos al tiempo que se mantiene un análisis estadísticamente correcto. Podría ocurrir que, incluso con el muestreo, obtuviera un gran volumen de datos de telemetría. Inspeccione las opciones que proporciona el muestreo adaptable. Por ejemplo, establezca maxTelemetryItemsPerSecond en un valor que equilibre el volumen generado con sus necesidades de supervisión. Tenga en cuenta que el muestreo de telemetría se aplica por host que ejecuta la aplicación de funciones.

  • Nivel de registro predeterminado: use Warning o Error como valor predeterminado para todas las categorías de telemetría. Ahora, puede decidir qué categorías quiere establecer en el nivel Information para poder supervisar y diagnosticar las funciones adecuadamente.

  • Ajuste de la telemetría de las funciones: con el nivel de registro predeterminado establecido en Error o Warning, no se recopilará información detallada de cada función (dependencias, métricas personalizadas, eventos personalizados y seguimientos). En el caso de aquellas funciones que son clave para la supervisión en producción, defina una entrada explícita para la categoría Function.<YOUR_FUNCTION_NAME> y establézcala en Information, para poder recopilar información detallada. En este punto, para evitar la recopilación de registros generados por el usuario en el nivel Information, establezca la categoría Function.<YOUR_FUNCTION_NAME>.User en el nivel de registro Error o Warning.

  • Categoría Host.Aggregator: como se describe en Configuración de categorías, esta categoría proporciona información agregada de las invocaciones de funciones. La información de esta categoría se recopila en la tabla customMetrics de Application Insights y se muestra en la pestaña Información general de la función en Azure Portal. En función de cómo se configure el agregador, tenga en cuenta que habrá un retraso, determinado por el objeto flushTimeout, en la telemetría recopilada. Si establece esta categoría en otro valor distinto de Information, dejará de recopilar los datos en la tabla customMetrics y no se mostrarán las métricas en la pestaña Información general de la función.

    La siguiente captura de pantalla muestra los datos de telemetría correspondientes a Host.Aggregator en la pestaña Información general de la función:

    Screenshot of Host.Aggregator telemetry displayed in function Overview tab.

    En la captura de pantalla siguiente, se muestran los datos de telemetría correspondientes a Host.Aggregator en la tabla customMetrics de Application Insights:

    Screenshot of Host.Aggregator telemetry in customMetrics Application Insights table.

  • Categoría Host.Results: como se describe en Configuración de categorías, esta categoría proporciona los registros generados en tiempo de ejecución que indican el éxito o error de una invocación de función. La información de esta categoría se recopila en la tabla requests de Application Insights y se muestra en la pestaña Supervisión de la función y en diferentes paneles de Application Insights (Rendimiento, Errores, etc.). Si establece esta categoría en otro valor distinto de Information, solo recopilará los datos de telemetría generados en el nivel de registro definido (o superior). Por ejemplo, establecerla en error da como resultado el seguimiento de los datos de las solicitudes solo para las ejecuciones con errores.

    La siguiente captura de pantalla muestra los datos de telemetría correspondientes a Host.Results en la pestaña Supervisión de la función:

    Screenshot of Host.Results telemetry in function Monitor tab.

    En la captura de pantalla siguiente, se muestran los datos de telemetría correspondientes a Host.Results en el panel Rendimiento de Application Insights:

    Screenshot of Host.Results telemetry in Application Insights Performance dashboard.

  • Host.Aggregator frente a Host.Results: ambas categorías proporcionan una buena información sobre las ejecuciones de las funciones. Si es necesario, puede eliminar la información detallada de una de estas categorías, de modo que pueda utilizar la otra para la supervisión y las alertas. Aquí tiene un ejemplo:

{
  "version": "2.0",  
  "logging": {
    "logLevel": {
      "default": "Warning",
      "Function": "Error",
      "Host.Aggregator": "Error",
      "Host.Results": "Information", 
      "Function.Function1": "Information",
      "Function.Function1.User": "Error"
    },
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond": 1,
        "excludedTypes": "Exception"
      }
    }
  }
} 

Con esta configuración, tendrá lo siguiente:

  • El valor predeterminado para todas las funciones y categorías de telemetría se establece en Warning (incluidas las categorías Microsoft y Worker). Por lo tanto, de manera predeterminada, se recopilan todos los errores y advertencias generados por el entorno de ejecución y el registro personalizado.

  • El nivel de registro de categoría Function se establece en Error, por lo que para todas las funciones, de forma predeterminada, solo se recopilarán excepciones y registros de errores (se omitirán las dependencias y los eventos y las métricas generados por el usuario).

  • En el caso de la categoría Host.Aggregator, dado que está establecida en el nivel de registro Error, no se recopilará información agregada de las invocaciones de funciones en la tabla customMetrics de Application Insights y no se mostrará información sobre los recuentos de ejecuciones (total, correcto, error...) en el panel de información general de la función.

  • Para la categoría Host.Results, toda la información de ejecución del host se recopila en la tabla requests de Application Insights. Todos los resultados de las invocaciones se mostrarán en el panel Supervisión de la función y en los paneles de Application Insights.

  • En el caso de la función llamada Function1, hemos establecido el nivel de registro en Information. Por lo tanto, para esta función específica, se recopilan todos los datos de telemetría (dependencias, métricas personalizadas y eventos personalizados). Para la misma función, la categoría Function1.User (seguimientos generados por el usuario) se establece en Error, por lo que solo se recopilará el registro de errores personalizado.

    Nota

    No se admite la configuración por función en la versión v1.x.

  • El muestreo está configurado para enviar un elemento de telemetría por segundo por tipo, exceptuando las excepciones. Este muestreo se realizará para cada host de servidor que ejecuta la aplicación de funciones. Por lo tanto, si tenemos cuatro instancias, esta configuración emitirá cuatro elementos de telemetría por segundo y por tipo, y todas las excepciones que se puedan producir.

    Nota

    Los recuentos de métrica, como la tasa de solicitudes y la tasa de excepciones, se ajustan para compensar la frecuencia de muestreo, de modo que exhiban valores aproximadamente correctos en el Explorador de métricas.

Sugerencia

Experimente con diferentes configuraciones para asegurarse de que cubran sus requisitos de registro, supervisión y alertas. Asegúrese también de tener diagnósticos detallados en caso de errores inesperados o un funcionamiento incorrecto.

Invalidación de la configuración de supervisión en tiempo de ejecución

Por último, puede haber situaciones en las que necesite cambiar rápidamente el comportamiento del registro de una determinada categoría en producción y no quiera realizar una implementación completa solo por un cambio en el archivo host.json. En tales casos, puede invalidar los valores del archivo host.json.

Para configurar estos valores en el nivel de configuración de la aplicación (y evitar una nueva implementación solo por los cambios en el archivo host.json), debe invalidar valores específicos del archivo host.json mediante la creación de un valor equivalente como una configuración de la aplicación. Cuando el entorno de ejecución encuentra una configuración de aplicación en el formato AzureFunctionsJobHost__path__to__setting, invalida la configuración de host.json equivalente que se encuentra en path.to.setting en el archivo JSON. Cuando se expresa como una configuración de aplicación, el punto (.), que se utilizaba para indicar la jerarquía JSON, se reemplaza por un carácter de subrayado doble (__). Por ejemplo, puede usar la siguiente configuración de la aplicación para configurar los niveles de registro de funciones individuales como en host.json en el ejemplo anterior.

Ruta de acceso de Host.json Configuración de aplicación
logging.logLevel.default AzureFunctionsJobHost__logging__logLevel__default
logging.logLevel.Host.Aggregator AzureFunctionsJobHost__logging__logLevel__Host__Aggregator
logging.logLevel.Function AzureFunctionsJobHost__logging__logLevel__Function
logging.logLevel.Function.Function1 AzureFunctionsJobHost__logging__logLevel__Function__Function1
logging.logLevel.Function.Function1.User AzureFunctionsJobHost__logging__logLevel__Function__Function1__User

Puede invalidar la configuración directamente en la hoja Configuración de la aplicación de funciones de Azure Portal o mediante un script de la CLI de Azure o de PowerShell.

az functionapp config appsettings set --name MyFunctionApp --resource-group MyResourceGroup --settings "AzureFunctionsJobHost__logging__logLevel__Host__Aggregator=Information"

Nota

Al invalidar host.json mediante el cambio de la configuración de la aplicación, se reiniciará la aplicación de funciones. La configuración de la aplicación que contiene un período no se admite cuando se ejecuta en Linux en un plan Elastic Premium o en un plan dedicado (App Service). En estos entornos de hospedaje, debe seguir usando el archivo host.json .

Supervisión de las aplicaciones de funciones mediante la comprobación de estado

La característica Comprobación de estado se puede usar para supervisar las aplicaciones de funciones en los planes Premium (Elástico Premium) y Dedicado (App Service). La comprobación de estado no es una opción para el plan de consumo. Para más información sobre cómo configurarla, consulte Supervisión de instancias de App Service mediante la comprobación de estado. La aplicación de funciones debe tener una función de desencadenador HTTP que responda con un código de estado HTTP de 200 en el mismo punto de conexión que se ha configurado en el parámetro "Path" de la comprobación de estado. También puede hacer que esa función realice comprobaciones adicionales para asegurarse de que los servicios dependientes sean accesibles y funcionen.

Pasos siguientes

Para más información sobre la supervisión, consulte: