En este capítulo, vas a aprender lo siguiente:
- Solucionar problemas de Azure Functions
- Integrar Azure Functions con Application Insights
- Supervisar Azure Functions
- Insertar datos de telemetría personalizados en Application Insights Analytics
- Enviar datos de telemetría de la aplicación por correo electrónico
- Integrar datos de supervisión de Application Insights en tiempo real con Power BI mediante Azure Functions
Introducción
El proceso de implementación no termina cuando se completa el desarrollo de un proyecto y se lanza una aplicación. Debemos supervisar continuamente nuestras aplicaciones, analizar su rendimiento y revisar los registros para determinar si el usuario final está experimentando problemas.
Azure nos proporciona diversas herramientas para satisfacer todos nuestros requisitos de supervisión, directamente desde las fases de desarrollo y mantenimiento.
En este capítulo, vas a aprender a utilizar estas herramientas y a tomar las medidas necesarias en función de la información disponible.
Solucionar problemas de Azure Functions
En esta receta, vas a aprender a ver los registros de aplicación de las aplicaciones de funciones mediante la característica de secuencias de registro de las funciones.
Cómo hacerlo…
Una vez desarrolladas y probadas tus aplicaciones en el entorno local, puedes intentar implementarlas en Azure. Puede haber casos en los que surjan problemas después de implementar una aplicación en Azure, ya que el entorno es diferente. Por ejemplo, es posible que un desarrollador no haya creado la configuración de la aplicación en la aplicación. Si falta una clave de configuración, es posible que la aplicación no funcione de la forma prevista y no es fácil solucionar el error. Afortunadamente, el entorno de Azure facilita esta resolución gracias a la característica de secuencias de registro. En esta receta, vamos a aprender a ver los registros en tiempo real y a utilizar la función Diagnosticar y solucionar problemas.
Ver registros de aplicaciones en tiempo real
Sigue estos pasos:
- Ve a Características de la plataforma de la aplicación de la función y haz clic en el botón Secuencias de registro, donde podrás ver los Registros de aplicación, tal como se muestra en la captura de pantalla siguiente:

- Vamos a abrir cualquiera de las Azure Functions que hayas agregado anteriormente en una nueva pestaña del explorador y a agregar una línea de código que genere una excepción. Para que resulte sencillo (y simplemente para ilustrar cómo funcionan los registros de aplicación de la secuencia de registros), he agregado la línea siguiente al desencadenador de HTTP simple creado anteriormente:

- A continuación, haz clic en el botón Guardar y luego en el botón Ejecutar. Tal como estaba previsto, recibirás una excepción, junto con el mensaje de la sección Registros de aplicación que se muestra en la siguiente captura de pantalla:

Diagnosticar la aplicación de funciones completa
En la sección anterior, hemos aprendido a supervisar los errores de la aplicación en tiempo real, lo que resulta útil para identificar y corregir rápidamente cualquier problema. Sin embargo, no siempre es posible supervisar los registros de aplicación y comprender los errores que los usuarios finales podrían estar experimentando. Azure Functions proporciona otra excelente herramienta, denominada Diagnosticar y solucionar problemas:
- Ve a Características de la plataforma y haz clic en Diagnosticar y solucionar problemas, como se muestra en la siguiente captura de pantalla:

- Poco después, se abrirá otra hoja, donde puedes seleccionar la categoría adecuada para los problemas que estés tratando de solucionar en ese momento. Haz clic Todos los errores 5xx para ver los detalles sobre las excepciones que estén experimentando los usuarios finales, tal como se muestra en la captura de pantalla siguiente:

- A continuación, se abrirá la opción Disponibilidad de funciones y rendimiento y, dentro de esta, verás Bloqueos de aplicación. Haz clic en la opción Disponibilidad de funciones y rendimiento para ver los enlaces reales, como se muestra en la siguiente captura de pantalla:

- Haz clic en Ejecuciones de la función y errores para ver las excepciones detalladas, como se muestra en la siguiente captura de pantalla:

Y eso no es todo…
Cada evento de función se registra en un servicio de Almacenamiento de tablas de Azure. Cada mes, se crea una tabla con el nombre AzureWebJobsHostLogs<año><mes>.
Como parte de la solución de problemas, si deseas obtener más detalles sobre cualquier error, busca primero el campo Id. en la sección Detalles de la invocación, como se muestra en la siguiente captura de pantalla:

Busca esos datos en la columna RowKey de la tabla
AzureWebJobsHostLogs<año><mes>, como se muestra en la siguiente captura de pantalla:

Como se muestra en la captura de pantalla anterior, obtendrás la entrada de registro almacenada en el Almacenamiento de tablas. Al hacer clic en la fila, se abrirán todos los datos del error, como se muestra en la siguiente captura de pantalla:

Integrar Azure Functions con Application Insights
Application Insights es un servicio de administración del rendimiento de aplicaciones. Una vez que integres Application Insights en la aplicación, comenzará a enviar datos de telemetría a tu cuenta de Application Insights, alojada en el cloud. En esta receta, aprenderás lo fácil que es integrar Azure Functions con Application Insights.
Preparación
Hemos creado una cuenta de Application Insights en la receta Probar y validar la capacidad de respuesta de Azure Functions mediante Application Insights del capítulo 5, Explorar herramientas de prueba para la validación de Azure Functions. Sigue estos pasos para crear una cuenta si aún no lo has hecho:
- Ve al portal de Administración de Azure, haz clic en Crear un recurso y, a continuación, selecciona Herramientas de administración.
- Selecciona Application Insights y proporciona todos los datos necesarios. Si ya has creado una cuenta de Application Insights en la receta anterior, puedes omitir este paso.
Cómo hacerlo…
Sigue estos pasos:
- Una vez creada la cuenta de Application Insights, abre la pestaña Información general y ve a Clave de instrumentación, como se muestra en la siguiente captura de pantalla:

- Ve a Function Apps para seleccionar las aplicaciones para las que deseas habilitar la supervisión y ve a Configuración de la aplicación.
- Agrega una nueva clave con el nombre APPINSIGHTS_INSTRUMENTATIONKEY y proporciona la clave de instrumentación que has copiado de la cuenta de Application Insights, tal como se muestra a continuación, y haz clic en Guardar para guardar los cambios:

- Eso es todo; puedes empezar a utilizar todas las características de Application Insights para supervisar el rendimiento de las Azure Functions. Abre Application Insights y la función RegisterUser en dos pestañas diferentes para probar cómo funciona Live Metrics Stream:
° Abre Application Insights y haz clic en Live Metrics Stream en la primera pestaña del navegador, como se muestra en la siguiente captura de pantalla:

° Abre cualquier función de Azure (en mi caso, he abierto el desencadenador de HTTP) en otra pestaña y ejecuta algunas pruebas para asegurarte de que emite algunos registros en Application Insights.
- Una vez realizadas las pruebas, ve a la pestaña que contiene Application Insights. Debería verse el tráfico dinámico existente en la aplicación de la función, como se muestra en la siguiente captura de pantalla:

Cómo funciona…
Hemos creado una cuenta de Application Insights. Una vez que integres la Clave de instrumentación de Application Insights con Azure Functions, el runtime se encargará de enviar los datos de telemetría asincrónicamente a tu cuenta de Application Insights.
Y eso no es todo…
En Live Metrics Stream, también se pueden ver todas las instancias, junto con otros datos, como el número de solicitudes por segundo administradas por las instancias.
Supervisar Azure Functions
Ahora ya sabemos cómo integrar Azure Functions con Application Insights.
A continuación, vamos a aprender cómo se ven los registros que se escriben en Application Insights mediante el código de Azure Functions para que, como desarrollador, puedas solucionar las excepciones que se produzcan.
Vamos a realizar un pequeño cambio en la función de desencadenador de HTTP y, a continuación, lo ejecutaremos varias veces.
Cómo hacerlo…
Sigue estos pasos:
1. Ve al desencadenador de HTTP que has creado y reemplaza el código siguiente. Acabo de mover la línea de código que registra la información a la consola de registros y he agregado el parámetro name al final del método:
public static async Task<IActionResult> Run(HttpRequest req,
ILogger log)
{
string name = req.Query[«name»]; string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); dynamic data = JsonConvert. DeserializeObject(requestBody); name = name ?? data?.name;
log.LogInformation($»C# HTTP trigger function processed
a request with the input value {name}»); return name != null
? (ActionResult)new OkObjectResult($»Hello, {name}») : new BadRequestObjectResult(«Please pass a name on the query string or in the request body»);
}
- Ahora, ejecuta la función proporcionando el valor del parámetro name con valores diferentes, como Azure Test Run 1, Azure Test Run 2 y Azure Test Run 3. Esto es solo para fines de demostración. Puedes usar la entrada que desees. La consola de registros mostrará el siguiente resultado:

- Los registros de la consola de registros anterior solo están disponibles cuando se está conectado a la consola de registros. No estarán disponibles si no hay conexión. En estos casos es cuando resulta útil Application Insights. Ve a la instancia de Application Insights que has integrado con la aplicación de la función de Azure.
- Haz clic en el botón Análisis que está disponible en la pestaña Información general de Application Insights, como se muestra en la siguiente captura de pantalla:

- En la ventana de consulta de análisis, escribe el comando traces | sort by timestamp desc, que devuelve todos los seguimientos ordenados por fecha descendente, como se muestra en la siguiente captura de pantalla:

En el desencadenador de HTTP, hemos agregado una instrucción de registro que muestra el valor del parámetro name proporcionado por el usuario. Hemos ejecutado el desencadenador de HTTP varias veces. Transcurridos unos instantes, haz clic en el botón Análisis del botón Application Insights, lo que abrirá la ventana Análisis, donde puedes escribir consultas para ver los datos de telemetría emitidos por Azure Functions. Todo esto se puede llevar a cabo sin necesidad de escribir ningún código personalizado.
Insertar datos de telemetría personalizados en Application Insights Analytics
Nuestros clientes te han pedido que proporciones informes de análisis para una métrica derivada dentro de Application Insights. Pero ¿qué es una métrica derivada? Pues bien, de forma predeterminada, Application Insights te proporciona abundante información sobre métricas, como solicitudes, errores, excepciones, etcétera.
Puedes ejecutar consultas en la información que Application Insights proporciona utilizando su lenguaje de consulta de análisis.
En este contexto, solicitudes por hora es una métrica derivada y, si deseas compilar un nuevo informe dentro de Application Insights, tendrás que proporcionar datos a Application Insights sobre la nueva métrica derivada de forma periódica. Una vez que proporciones los datos requeridos periódicamente, Application Insights se encargará de proporcionar informes para que los analices.
Vamos a usar Azure Functions que proporcionan datos a Application Insights con una métrica derivada denominada solicitudes por hora:

Para este ejemplo, vamos a desarrollar una consulta mediante el lenguaje de consulta de análisis para la métrica derivada solicitudes por hora. Puedes realizar cambios en la consulta para generar otras métricas derivadas para tus requisitos, como, por ejemplo, solicitudes por hora para mi campaña o una métrica similar.
Puedes obtener más información sobre el lenguaje de consulta de análisis en https://docs.microsoft.com/en-us/azure/ application-insights/app-insights-analyticsreference.
Preparación
Sigue estos pasos de requisitos previos:
- Crea una cuenta de Application Insights nueva si aún no tienes una.
- Asegúrate de que tienes una aplicación en ejecución que se integra con Application Insights. Puedes obtener información sobre cómo integrar la aplicación con Application Insights en https://docs.microsoft.com/enus/azure/application-insights/app-insights-asp-net.

Cómo hacerlo…
Vamos a llevar a cabo los siguientes pasos para insertar detalles de telemetría personalizados en Análisis de Application Insights.
Crear una función de Application Insights
Sigue estos pasos:
- Crea una plantilla de función nueva. Para ello, selecciona Supervisión en la lista desplegable Escenario, como se muestra en la siguiente captura de pantalla. También puedes buscar análisis programados para encontrar fácilmente la plantilla:

- Ahora, haz clic en C# (que aparece en la captura de pantalla anterior) y proporciona el nombre y la frecuencia de programación a la que debe ejecutarse la función:

- Como se muestra en la captura de pantalla anterior, haz clic en el botón Crear para crear la función.
Configurar claves de acceso
Sigue estos pasos:
- Ve a la hoja Información general de Application Insights, tal como se muestra, y copia la Clave de instrumentación. Vamos a utilizar la Clave de instrumentación para crear una configuración de aplicación denominada AI_IKEY en la aplicación de la función:

- Ve a la hoja Acceso de API y copia el Id. de aplicación. Vamos a utilizar este Id. de aplicación para crear una nueva configuración de aplicación con el nombre AI_APP_ID en la aplicación de función:

- También tenemos que crear una nueva clave de API. Como se muestra en el paso anterior, haz clic en el botón Crear clave de API para generar la nueva clave de API, como se muestra en la siguiente captura de pantalla. Proporciona un nombre descriptivo, comprueba los datos de Leer telemetría y haz clic en Generar clave:

- Poco después, podrás ver y copiar la clave, como se muestra en la siguiente captura de pantalla. Vamos a utilizar esto para crear una nueva configuración de aplicación con el nombre AI_APP_KEY en nuestra aplicación de función:

- Crea las tres claves de configuración de aplicaciones en la aplicación de función, como se muestra en la siguiente captura de pantalla. Estas tres claves se utilizarán en nuestra función de Azure denominada FeedAIwithCustomDerivedMetric.

Integrar y probar una consulta de Application Insights
Sigue estos pasos:
- Ahora, vamos a desarrollar una consulta que nos proporcione el valor de la métrica derivada solicitudes por hora. Ve a la hoja Información general de Application Insights y haz clic en el botón Análisis.
- A continuación, se abrirá la hoja Análisis. Escribe la siguiente consulta en la pestaña de consultas. Puedes escribir tu propia consulta según tus requisitos. Asegúrate de que la consulta devuelve un valor escalar:
requests
| where timestamp > now(-1h)
| summarize count()
- Una vez realizada la consulta, ejecútala haciendo clic en el botón Ejecutar para ver el recuento de registros, como se muestra en la siguiente captura de pantalla:

- Ahora ya tenemos lista la consulta de Application Insights requerida. Vamos a integrar la consulta con nuestra función FeedAIwithCustomDerivedMetrics. Ve al editor de código de Azure Functions y realiza los siguientes cambios:
- Proporciona un nombre descriptivo para la métrica derivada, en este caso, Solicitudes por hora.
- Reemplaza la consulta predeterminada con la que hemos desarrollado.
- Guarda los cambios a través del botón Guardar:

- Vamos a llevar a cabo una prueba rápida para comprobar si has configurado los tres ajustes de la aplicación y la consulta correctamente. Ve a la pestaña Integrar y cambia la frecuencia de ejecución a un minuto, como se muestra en la captura de pantalla siguiente:

- Ahora, abriremos la pestaña Supervisar para ver si todo funciona correctamente. Si hay algún problema, aparecerá una marca X en la columna Estado. Consulta el error en la sección Registros de la pestaña Supervisar haciendo clic en la entrada Registro de invocaciones:

- Asegúrate de que la función se está ejecutando sin problemas e invierte la frecuencia de programación a una hora.
Configurar el informe de métrica derivada personalizada
Sigue estos pasos:
- Ve a la pestaña Información general de Application Insights y haz clic en el menú Métrica, como se muestra en la siguiente captura de pantalla:

- En el Explorador de métricas podrás encontrar todos los análisis relativos a las diferentes métricas. En el Explorador de métricas, haz clic en el botón Editar de cualquier informe para configurar tu métrica personalizada, como se muestra en la siguiente captura de pantalla (o puedes hacer clic en el botón Agregar gráfico en la parte superior izquierda de la siguiente captura de pantalla):

- A continuación, se abrirá la hoja Detalles de gráfico, donde puedes configurar tu métrica personalizada y todos los detalles restantes relacionados con el gráfico. En la lista desplegable ESPACIO DE NOMBRES DE MÉTRICAS, selecciona azure.applicationinsghts, como se muestra en la siguiente captura de pantalla, y luego selecciona la métrica personalizada solicitudes por hora que hayas creado:

- A continuación, se creará el gráfico, como se muestra en la siguiente captura de pantalla:

Cómo funciona…
Así es como funciona todo el proceso:
- Hemos creado la función de Azure mediante la plantilla de Análisis programados de Application Insights.
- Hemos configurado las siguientes claves en la Configuración de la aplicación de Function App de Azure:
° Clave de instrumentación de Application Insights
° Id. de la aplicación
° Clave de acceso de la API
- El runtime de la función de Azure ha consumido automáticamente la API de Application Insights, ha ejecutado la consulta personalizada para recuperar las métricas necesarias y ha realizado las operaciones necesarias para proporcionar los datos de telemetría derivados a Application Insights.
- Una vez configurados todos los parámetros de la función de Azure, hemos desarrollado una consulta sencilla que nos ha permitido obtener el recuento de la última hora y lo ha transferido a Application Insights como una métrica derivada personalizada. Este proceso se repite cada hora.
- Posteriormente, hemos configurado un informe nuevo a través de las métricas de Application Insights con nuestra métrica derivada personalizada.
Enviar datos de telemetría de la aplicación por correo electrónico
Una de las actividades de tu aplicación, una vez activa, será recibir un correo electrónico de notificación con información de estado, errores, tiempo de respuesta, etc., al menos una vez al día.
Azure Functions nos permite obtener todos los datos básicos mediante una plantilla de función con código que es responsable de recuperar todos los valores necesarios de Application Insights y el código de asociación que enmarca el cuerpo del correo electrónico y envía el correo electrónico mediante SendGrid. En esta receta, aprenderemos cómo hacerlo.
Preparación
Sigue estos pasos de requisitos previos:
- Crea una nueva cuenta de SendGrid, si no la has creado todavía, y obtén la clave de la API de SendGrid.
- Crea una cuenta de Application Insights nueva si aún no tienes una.
- Asegúrate de que tienes una aplicación en ejecución que se integra con Application Insights.
Puedes obtener información sobre cómo integrar la aplicación con Application Insights en https://docs.microsoft.com/en-us/ azure/application-insights/app-insights-asp-net.
Cómo hacerlo…
Sigue estos pasos:
- Para crear una nueva función, selecciona Supervisión en la lista desplegable Escenario y selecciona la plantilla Resumen programado de Application Insights: C#, como se muestra en la siguiente captura de pantalla:

- Poco después, tendrás que proporciona el nombre de la función, la frecuencia programada y la Clave de API de SendGrid para el enlace de salida de SendGrid, como se muestra en la siguiente captura de pantalla:

- A continuación, haz clic en el botón Crear mostrado en el paso anterior para crear la nueva función de Azure. La plantilla crea todo el código necesario para consultar los datos de Application Insights y envía un correo electrónico a la persona mencionada en el campo Dirección de destino de la captura de pantalla anterior.
Asegúrate de seguir los pasos descritos en la sección Configurar claves de acceso de la receta Insertar datos de telemetría personalizada en análisis de Application Insights para configurar estas claves de acceso: Clave de instrumentación de Application Insights, el Id. de la aplicación y la clave de acceso de la API. - Ve a la función run.csx y cambia el nombre de la aplicación por el nombre de tu aplicación, como se muestra en la siguiente captura de pantalla:

- Si has configurado todos los ajustes correctamente, comenzarás a recibir correos electrónicos basados en la configuración del temporizador.
- Hagamos una ejecución de prueba rápida haciendo clic en el botón Ejecutar situado encima del editor de código, como se muestra en la siguiente captura de pantalla:

- Esta es una captura de pantalla del correo electrónico que recibí después de hacer clic en el botón Ejecutar en la captura de pantalla anterior:

Cómo funciona…
La función de Azure usa la API de Application Insights para ejecutar todas las consultas de Análisis de Application Insights, recupera todos los resultados, enmarca el cuerpo del correo electrónico con todos los datos e invoca la API de SendGrid para que envíe un correo electrónico a la cuenta de correo electrónico configurada.
Y eso no es todo…
Las plantillas de Azure proporcionan un código predeterminado que contiene una serie de consultas que suelen resultar útiles para supervisar el estado de las aplicaciones. Si tienes requisitos específicos para obtener alertas de notificación, continúa y agrega nuevas consultas al método GetQueryString. Para incorporar los nuevos valores, también tendrás que cambiar la clase DigestResult y la función GetHtmlContentValue.
Consulta también
La receta Enviar una notificación por correo electrónico al administrador del sitio web mediante el servicio SendGrid del capítulo 2, Trabajar con notificaciones mediante los servicios SendGrid y Twilio.
Integrar datos de supervisión de
Application Insights en tiempo real con Power BI mediante Azure Functions
En ocasiones, necesitarás ver datos en tiempo real sobre la disponibilidad de tu aplicación o información relacionada con el estado de esta en un sitio web personalizado. Recuperar información de Application Insights e integrarla en un informe personalizado es un trabajo tedioso, ya que habría que desarrollar un sitio web independiente y, luego, crearlo, probarlo y alojarlo en algún sitio.
En esta receta, comprobarás lo fácil que es ver información de estado de la aplicación en tiempo real mediante la integración de Application Insights y Power BI. Para ello, vamos a aprovechar las capacidades de Power BI para la transmisión en directo de datos y las funciones de temporizador de Azure para proporcionar la información de estado a Power BI de manera continua. A continuación, se muestra un diagrama de alto nivel de lo que vamos a hacer en la última parte de esta receta:

En esta receta, vamos a utilizar la plantilla de Power BI de Application Insights de una aplicación de función creada con el runtime de Azure Functions v1. El runtime de Azure Functions V2 no cuenta con ella. Si estás utilizando el runtime v2, puedes crear simplemente un desencadenador de temporizador y seguir las instrucciones de esta receta.
Preparación
Sigue estos pasos de requisitos previos:
- Crea una cuenta de Power BI en https://powerbi.microsoft.com/.
- Crea una cuenta de Application Insights nueva si aún no tienes una.
- Asegúrate de que tienes una aplicación en ejecución que se integra con Application Insights. Puedes obtener información sobre cómo integrar la aplicación con Application Insights en https://docs.microsoft.com/enus/azure/application-insights/app-insights-asp-net.
Debes utilizar tu cuenta de profesional para crear una cuenta de Power BI. En el momento de redactar esta receta, no fue posible crear una cuenta de Power BI con una dirección de correo electrónico personal, por ejemplo, de Gmail, Yahoo, etc.
Asegúrate de seguir los pasos descritos en la sección Configurar claves de acceso de la receta Insertar datos de telemetría personalizada en análisis de Application Insights para configurar estas claves de acceso: Clave de instrumentación de Application Insights, el Id. de la aplicación y la clave de acceso de la API.
Cómo hacerlo…
Vamos a seguir estos pasos para integrar Application Insights y Power BI.
Configurar Power BI con un panel, un conjunto de datos y el URI de inserción
Sigue estos pasos:
- Si estás utilizando el portal de Power BI por primera vez, es posible que tengas que hacer clic en Omitir en la página de bienvenida, como se muestra en la siguiente captura de pantalla:

- El siguiente paso es crear un conjunto de datos de transmisión. Para ello, haz clic en Crear y, a continuación, selecciona Conjunto de datos de transmisión, como se muestra en la siguiente captura de pantalla:

- En el paso Nuevo conjunto de datos de transmisión, selecciona API y haz clic en el botón Siguiente, como se muestra en la siguiente captura de pantalla:

- En el paso siguiente, debes crear los campos para el conjunto de datos de transmisión. Proporciona un nombre descriptivo para el conjunto de datos y proporciona los valores que te gustaría enviar a Power BI. Para esta receta, he creado un conjunto de datos con un solo campo, denominado RequestsPerSecond, de tipo Número y he hecho clic en Crear, como se muestra en la siguiente captura de pantalla:

- Una vez creado el conjunto de datos, se te pedirá que proporciones una URL de inserción, como se muestra en la siguiente captura de pantalla.
Utilizarás esta URL de inserción en Azure Functions para insertar los datos RequestsPerSecond cada segundo (o según tus requisitos) con el valor real de las solicitudes por segundo. Haz clic en Hecho:

- El siguiente paso es crear un panel con un icono en él. Vamos a crear un nuevo panel. Para ello, haz clic en Crear y selecciona Panel, como se muestra en la siguiente captura de pantalla:

- En la ventana emergente Crear panel, proporciona un nombre descriptivo y haz clic en Crear, como se muestra en la siguiente captura de pantalla, para crear un panel vacío:

- En el panel vacío, haz clic en el botón Agregar icono para crear un nuevo icono. Al hacer clic en Agregar icono, se abrirá una ventana nueva donde puedes seleccionar la fuente de datos de la que debe rellenarse el icono:

- Selecciona Datos de transmisión personalizados y haz clic en Siguiente, como se muestra en la captura de pantalla anterior. En el siguiente paso, selecciona el conjunto de datos Solicitudes y haz clic en el botón Siguiente:

- El siguiente paso es elegir el Tipo de visualización (en este caso es Tarjeta) y seleccionar los campos de la fuente de datos, como se muestra en la siguiente captura de pantalla:

- El último paso es proporcionar un nombre para el icono. Yo le he asignado el nombre RequestsPerSecond. El nombre no tiene por qué tener sentido en este caso; puedes ponerle el que desees en función de tus requisitos.
Crear una función C# de Power BI en tiempo real para Azure Application Insights
Para crear una función C# de Power BI en tiempo real para Azure Application Insights, sigue estos pasos:
- Ve a Azure Functions y crea una nueva función con la siguiente plantilla:

- Haz clic en C# en la captura de pantalla anterior, proporciona el Nombre y haz clic en el botón Crear, como se muestra en la siguiente captura de pantalla:

- Reemplaza el código predeterminado por el código siguiente. Asegúrate de configurar el valor correcto para el que la consulta de análisis debe extraer los datos. En mi caso, he especificado cinco minutos (5 m) en el siguiente código:
#r «Newtonsoft.Json» using System.Configuration; using System.Text; using Newtonsoft.Json.Linq;
private const string AppInsightsApi = «https://api.applicationinsights.io/beta/apps»; private const string RealTimePushURL =
«PastethePushURLhere»;
private static readonly string AiAppId = ConfigurationManager.AppSettings[«AI_APP_ID»]; private static readonly string AiAppKey = ConfigurationManager.AppSettings[«AI_APP_KEY»];
public static async Task Run(TimerInfo myTimer,
TraceWriter log)
{
if (myTimer.IsPastDue)
{
log.Warning($»[Warning]: Timer is running late! Last
ran
at: {myTimer.ScheduleStatus.Last}»);
}
await RealTimeFeedRun(
query: @» requests
| where timestamp > ago(5m)
| summarize passed = countif(success == true),
total = count() | project passed
«, log: log ); log.Info($»Executing real-time Power BI run at:
{DateTime.Now}»);
}
private static async Task RealTimeFeedRun( string query,
TraceWriter log)
{ log.Info($»Feeding Data to Power BI has started at:
{DateTime.Now}»);
string requestId = Guid.NewGuid().ToString(); using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Add(«x-api-key», AiAppKey);
httpClient.DefaultRequestHeaders.Add(«x-ms-app»,
«FunctionTemplate»);
httpClient.DefaultRequestHeaders.Add(«x-ms-client-
request-id», requestId); string apiPath = $»{AppInsightsApi}/{AiAppId}/query? clientId={requestId}×pan=P1D&query={query}»;
using (var httpResponse = await httpClient.GetAsync(apiPath))
{
httpResponse.EnsureSuccessStatusCode();
var resultJson = await
httpResponse.Content.ReadAsAsync<JToken>();
double result;
if (!double.TryParse(resultJson.SelectToken («Tables[0].Rows[0][0]»)?.ToString(), out
result))
{
throw new FormatException(«Query must result
in a
single metric number. Try it on Analytics
before
scheduling.»);
}
string postData = $»[{{ «requests»: «{result}» }}]»; log.Verbose($»[Verbose]: Sending data:
{postData}»);
using (var response = await httpClient.PostAsync(RealTimePushURL, new
ByteArrayContent(Encoding.UTF8.
GetBytes(postData))))
{
log.Verbose($»[Verbose]: Data sent with response:
{response.StatusCode}»);
}
}
}
}
El código anterior ejecuta una consulta de análisis de Application Insights que extrae datos de los últimos cinco minutos (solicitudes) y envía los datos a la dirección URL de inserción de Power BI. Este proceso se repite continuamente conforme a la frecuencia de temporizador configurada.
4. En la captura de pantalla siguiente se muestra una secuencia de imágenes que contienen los datos en tiempo real:

Cómo funciona…
Hemos creado lo siguiente en este orden específico:
- Un conjunto de datos de transmisión en la aplicación de Power BI
- Un panel y un nuevo icono que pueden mostrar los valores disponibles en el conjunto de datos de transmisión
- Una nueva función de Azure que ejecuta una consulta de Análisis de Application Insights y proporciona los datos a Power BI a través de la URL de inserción del conjunto de datos
- Una vez hecho todo, se podrán ver los datos en tiempo real del icono de Power BI del panel
Y eso no es todo…
- Power BI nos permite crear datos en tiempo real en informes de varias maneras. En esta receta, has aprendido a crear informes en tiempo real mediante el conjunto de datos de transmisión. Las otras formas de crearlos son con el conjunto de datos de inserción y con el conjunto de datos de transmisión de PubNub. Puedes obtener más información sobre los tres procedimientos en https://powerbi.microsoft.com/documentation/ powerbi-service-real-time-streaming/.
- Debes prestar especial cuidado cuando intentes obtener datos de estado de la aplicación en tiempo real. La API de Application Insights tiene un límite de velocidad. Echa un vistazo a https://dev.applicationinsights. io/documentation/Authorization/Rate-limits para obtener más información acerca de los límites de API.