Análisis de la telemetría de Azure Functions en Application Insights

Azure Functions se integra con Application Insights para permitirle supervisar mejor las aplicaciones de funciones. Application Insights recopila los datos de telemetría 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 habilita normalmente al crear la aplicación de funciones. Si la aplicación de funciones no tiene establecida la clave de instrumentación, primero debe habilitar la integración de Application Insights.

De forma predeterminada, los datos recopilados de la aplicación de funciones se almacenan en Application Insights. En Azure Portal, Application Insights proporciona un amplio conjunto de visualizaciones de los datos de telemetría. Puede profundizar en los registros de errores y en los eventos de consulta y las métricas. En este artículo se proporcionan ejemplos básicos de cómo ver y consultar los datos recopilados. Para más información sobre cómo explorar los datos de la aplicación de funciones en Azure Application Insights, consulte ¿Qué es Application Insights?.

Para poder ver los datos de Application Insights desde una aplicación de funciones, debe tener al menos permisos del rol Colaborador en la aplicación de funciones. También debe tener el permiso Lector de supervisión en la instancia de Application Insights. Estos permisos se tienen de forma predeterminada para cualquier aplicación de funciones y la instancia de Application Insights que cree.

Para más información sobre la retención de datos y los posibles costos de almacenamiento, consulte Recopilación, retención y almacenamiento de datos en Application Insights.

Visualización de la telemetría en la pestaña Supervisar

Con la integración de Application Insights habilitada, puede ver los datos de telemetría en la pestaña Supervisar.

  1. En la página de la aplicación de función, seleccione una función que se haya ejecutado por lo menos una vez después de que se configurase Application Insights. A continuación, seleccione Supervisar en el panel izquierdo. Seleccione Actualizar periódicamente hasta que aparezca la lista de las invocaciones de funciones.

    Invocations list

    Nota:

    La lista puede tardar hasta cinco minutos en aparecer, mientras el cliente de telemetría agrupa los datos en lotes para su transmisión al servidor. Este retraso no se aplica a Live Metrics Stream. Este servicio se conecta al host de Functions cuando se carga la página, por lo que los registros se transmiten directamente a la página.

  2. Para ver los registros de una invocación de función determinada, seleccione el vínculo de la columna Fecha (UTC) para esa invocación. La salida del registro para esa invocación aparece en una nueva página.

    Invocation details

  3. Elija Ejecutar en Application Insights para ver el origen de la consulta que recupera los datos de registro de Azure Monitor en el registro de Azure. Si esta es la primera vez que usa Azure Log Analytics en la suscripción, se le pedirá que lo habilite.

  4. Después de habilitar Log Analytics, se muestra la siguiente consulta. Puede ver que los resultados de la consulta se limitan a los últimos 30 días (where timestamp > ago(30d)) y en los resultados no se muestran más de 20 filas (take 20). Por el contrario, la lista de detalles de invocación de la función es para los últimos 30 días sin límite.

    Application Insights Analytics invocation list

Para más información, consulte la sección Consultar datos de telemetría que se encuentra más adelante en este artículo.

Visualización de la telemetría en Application Insights

Para abrir Application Insights desde una aplicación de funciones en Azure Portal:

  1. Examine la aplicación de funciones en el portal.

  2. Seleccione Application Insights en Configuración en la página de la izquierda.

  3. Si esta es la primera vez que usa Application Insights con su suscripción, se le pedirá que lo habilite. Para ello, seleccione Activar Application Insights y, a continuación, seleccione Aplicar en la página siguiente.

Open Application Insights from the function app Overview page

Para obtener más información acerca de Application Insights, consulte Documentación de Application Insights. En esta sección se muestran algunos ejemplos de cómo ver los datos de Application Insights. Si ya está familiarizado con Application Insights, puede ir directamente a las secciones sobre cómo configurar y personalizar los datos de telemetría.

Application Insights Overview tab

Las siguientes áreas de Application Insights pueden ser útiles al evaluar el comportamiento, el rendimiento y los errores de las funciones:

Investigación Descripción
Errores Cree alertas y gráficos basados en errores de funciones y excepciones del servidor. Nombre de la operación es el nombre de la función. Los errores en las dependencias no se muestran, a no ser que se implemente telemetría personalizada para las dependencias.
Rendimiento Analice los problemas de rendimiento mediante la visualización del uso de recursos y el rendimiento por instancias de rol de nube. Estos datos de rendimiento pueden ser útiles para la depuración de escenarios en los que las funciones atascan los recursos subyacentes.
Métricas Cree gráficos y alertas basados en métricas. Las métricas incluyen el número de invocaciones de función, el tiempo de ejecución y las tasas de éxito.
Live Metrics Vea los datos de métricas a medida que se crean casi en tiempo real.

Consultar datos de telemetría

El Análisis de Application Insights proporciona acceso a todos los datos de telemetría en forma de tabla en una base de datos. Analytics ofrece un lenguaje de consulta para extraer, manipular y visualizar los datos.

Elija Registros para explorar o consultar eventos registrados.

Analytics example

Este es un ejemplo de consulta que muestra la distribución de solicitudes por trabajador durante los últimos 30 minutos.

requests
| where timestamp > ago(30m) 
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

Las tablas que están disponibles se muestran en la pestaña Esquema de la izquierda. Encontrará los datos generados por las invocaciones de función en las tablas siguientes:

Tabla Descripción
traces Registros que crea el runtime, el controlador de escala y seguimientos del código de función.
requests Una solicitud por cada invocación de función.
exceptions Cualquier excepción que produzca el tiempo de ejecución.
customMetrics Recuento de invocaciones correctas y erróneas, tasa de éxito y duración.
customEvents Eventos registrados por el tiempo de ejecución, por ejemplo: solicitudes HTTP que desencadenan una función.
performanceCounters Información acerca del rendimiento de los servidores en los que se ejecutan las funciones.

El resto de las tablas son para pruebas de disponibilidad, y telemetría de explorador y de cliente. Puede implementar telemetría personalizada para agregarles datos.

Dentro de cada tabla, algunos de los datos específicos de Functions están en un campo customDimensions. Por ejemplo, la consulta siguiente recupera todos los seguimientos que tienen el nivel de registro Error.

traces 
| where customDimensions.LogLevel == "Error"

El tiempo de ejecución proporciona los campos customDimensions.LogLevel y customDimensions.Category. Puede proporcionar campos adicionales en los registros que escriba en el código de función. Para obtener un ejemplo en C# , vea Registro estructurado en la guía del desarrollador de la biblioteca de clases .Net.

Consulta de invocaciones de función

A cada invocación de función se le asigna un identificador único. InvocationId se incluye en la dimensión personalizada y se puede usar para correlacionar todos los registros de una ejecución de función determinada.

traces
| project customDimensions["InvocationId"], message

Correlación de telemetría

Los registros de las distintas funciones se pueden correlacionar mediante operation_Id. Use la consulta siguiente para devolver todos los registros de una operación lógica específica.

traces
| where operation_Id == '45fa5c4f8097239efe14a2388f8b4e29'
| project timestamp, customDimensions["InvocationId"], message
| order by timestamp

Porcentaje de muestreo

La configuración de muestreo se puede usar para reducir el volumen de telemetría. Use la siguiente consulta para determinar si el muestreo está operativo o no. Si ve que RetainedPercentage para cualquier tipo es inferior a 100, se muestrea ese tipo de telemetría.

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

Consulta de registros del controlador de escala

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

Después de habilitar tanto el registro del controlador de escala como la integración de Application Insights, puede usar la búsqueda de registros de Application Insights para consultar los registros del controlador de escala emitidos. Los registros del controlador de escala se guardan en la colección traces de la categoría traces.

La siguiente consulta se puede usar para buscar en todos los registros del controlador de escala la aplicación de funciones actual dentro del período especificado:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"

La siguiente consulta se expande en la consulta anterior para mostrar cómo obtener únicamente aquellos registros que indican un cambio en la escala:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"
| where message == "Instance count changed"
| extend Reason = CustomDimensions.Reason
| extend PreviousInstanceCount = CustomDimensions.PreviousInstanceCount
| extend NewInstanceCount = CustomDimensions.CurrentInstanceCount

Métricas específicas del plan de consumo

Cuando se ejecuta un Plan de consumo, el costo de la ejecución de una única función se mide en GB-segundos. El costo de ejecución se calcula mediante la combinación del uso de memoria con el tiempo de ejecución. Para más información, consulte Estimación de los costos según el plan de consumo.

Las siguientes consultas de telemetría son específicas de las métricas que afectan al costo de la ejecución de funciones en el plan de consumo.

Determinación del uso de memoria

En Supervisión, seleccione Registros (Analytics) , copie la siguiente consulta de telemetría y péguela en la ventana de consulta y seleccione Ejecutar. Esta consulta devuelve el uso de memoria total en cada tiempo muestreado.

performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value

Los resultados deben tener un aspecto similar al ejemplo siguiente:

marca de tiempo [UTC] name value
9/12/2019, 1:05:14.947 AM Bytes privados 209,932,288
9/12/2019, 1:06:14.994 AM Bytes privados 212 189 184
9/12/2019, 1:06:30.010 AM Bytes privados 231,714,816
9/12/2019, 1:07:15.040 AM Bytes privados 210,591,744
9/12/2019, 1:12:16.285 AM Bytes privados 216,285,184
9/12/2019, 1:12:31.376 AM Bytes privados 235,806,720

Determinación de la duración

Azure Monitor realiza un seguimiento de las métricas en el nivel de recursos, que para en el caso de Functions es la aplicación de funciones. La integración de Application Insights emite métricas por función. Esta es una consulta de análisis de ejemplo para obtener la duración media de una función:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name averageDurationMilliseconds
QueueTrigger AvgDurationMs 16 087
QueueTrigger MaxDurationMs 90 249
QueueTrigger MinDurationMs 8522

Pasos siguientes

Más información acerca de la supervisión de Azure Functions: