Monitoreo de Servicios en Azure con Application Insigths

Al hablar de soluciones productivas, y más en un entorno empresarial, es de fundamental importancia poder monitorear la salud de nuestra solución. Dentro de los ambientes On Premise existen diversos mecanismos y software que ayudan a realizar esta tarea. Al pensar en una solución dentro de ambiente cloud, y más cuando nos orientamos al desarrollo sobre PaaS; esta tarea se puede volver compleja y podemos llegar a tener la sensación de “perdida de control”, o desconocimiento sobre el funcionamiento y salud del sistema.

La instrumentación es una de las principales características que distingue a un sistema corporativo y profesional, de uno que no lo es. Es fundamental no solo resolver lo que el negocio requiere, sino hacerlo de una forma en que podamos gobernar el sistema y saber que acción tomar para asegurar su crecimiento saludable.

Típicamente, los sistemas utilizan Performance Counters para exponer información que permite monitorear el funcionamiento interno del sistema, la mayoría de las aplicaciones que utilizamos definen sus propios performance counters, eventos de sistema, logs, trace, etc. Por tal motivo, monitorear la salud de un sistema depende de dos partes:

1. El sistema que desarrollamos debe implementar los mecanismos necesarios para su monitoreo, en función del nivel de control y conocimiento que se quiere tener del mismo en producción. De no hacerlo, corremos el riesgo de que el sistema opere como una caja negra y en producción no sepamos que ocurre.

2. Tener las herramientas correctas para acceder a la información de monitoreo generada por el sistema.

En este caso, utilizaremos Application Insights para monitorear nuestro sistema. Dentro de las capacidades de Applications Insights podemos monitorear los siguientes elementos:

  • Request rates, response times, and failure rates
  • Dependency rates, response times, and failure rates
  • Exceptions
  • Page Views and load performance
  • AJAX calls
  • User and session counts
  • Host Diagnostics
  • Diagnostics trace logs
  • Custom events and metrics

Podemos obtener más información de este servicio aquí.

Para este ejemplo, primero vamos a crear un Cloud Service con una solución Web en MVC:

Seleccionamos nuestro proyecto web, y dentro de la opción “Add” encontraremos la configuración de Applications Insights.

Seleccionamos la cuenta y la suscripción donde vamos a desplegar el servicio:

Una vez finalizado el proceso de configuración:

Una vez configurado, dentro de nuestro proyecto podremos encontrar los siguientes archivos:

Dentro del portal de Azure ya tendremos acceso al servicio de Application Insights:

Al ejecutar nuestra aplicación, incluso en el ambiente local, podremos obtener la información sobre como se comportó el sistema durante la ejecución:

Dentro del portal de Azure lo podemos visualizar de la siguiente manera

Cuando hacemos análisis de problemas dentro de nuestro sistema es importante tener en consideración todas las dependencias que existan, como servicios, repositorios de datos SQL, Storage, etc. Dado que nuestro problema puede provenir tanto de nuestro código como del uso que le damos a alguna de las dependencias.

Dentro de Application Insigths podemos definir todas nuestras dependencias para tener una vista completa del monitoreo de nuestra solución:

Documentación de Application Insights:

https://docs.microsoft.com/es-mx/azure/application-insights/

Despliegue automatizado hacia Raspberry utilizando Team Services y Azure

Les comparto el video de la sesión del evento en Colombia, el cual pudimos terminar una vez resueltos los problemas que hubieron con internet y la caída de servicio de Azure Service Bus.

Arquitectura para la automatización del despliegue

image

Video de la presentación y demostración:

Agradezco personalmente la colaboración de Jorge Castro quien participó de la presentación conmigo y sufrió los desperfectos de internet y la caída del servicio de Azure de Service Bus.

Les comparto un blog de Fabrizio Hernandez, en donde podrán encontrar los pasos necesarios para ejecutar una app simple de .Net Core en Raspbian.

Análisis sentimental en español con Machine Learning

A medida que el avance nos permite darle una mayor inteligencia a los sistemas que implementamos, para que el uso sea más natural, nos encontramos con diversas características que nos gustaría desarrollar. Sin duda, una de estas características es la posibilidad de analizar una frase y determinar si es positiva, negativa o neutral.

Por supuesto, que este análisis de información tiene muchas implicaciones, entre ellas cuestiones culturales, de idioma, expresiones regionales, etc. No existe un algoritmo que de forma determinista pueda dar ese resultado. Incluso no podría reconocer aspectos del lenguaje, como la ironía.

Existen distintas alternativas para resolver este problema e implementar estas capacidades en nuestros sistemas.

Existe un API de Machine Learning que permite resolver este problema, sin embargo actualmente solo tiene soporte para Ingles, por lo cual debemos resolver este problema sin utilizar este API.

En este artículo primero vamos a ver como utilizar el API para análisis sentimental de Azure Machine Learning y posteriormente como podemos resolver este problema para realizar un análisis sentimental en español:

Para poder comenzar a utilizar este servicio, primero debemos ingresar al siguiente link para crear una instancia de la API:

http://go.microsoft.com/fwlink/?LinkID=761108

image

Una vez creada la instancia de la API tendremos acceso a una Key para poder utilizar el servicio.

Como datos de ejemplo utilizaremos el siguiente registro en donde tenemos 3 frases distintas que deseamos analizar:

  1. hello world
  2. hello foo world
  3. hello my world

image

En el primer escenario se solicitan analizar las palabras claves de la oración:

image

En el segundo escenario se solicita analizar el idioma en que se encuentra la frase:

image

En el tercer escenario se solicita hacer un análisis sentimental de la frase:

image

Como resultado de ejecución se obtiene:

image

Ahora bien, si queremos realizar un análisis sentimental en español, este servicio aún no está preparado.

En el siguiente link podrán encontrar un experimento para realizar en machinen lerarning análisis sentimental. Este experimento requiere ser entrenado con una base de tweets precalificados sentimentalmente.

https://gallery.cortanaintelligence.com/Experiment/Binary-Classification-Twitter-sentiment-analysis-4

image

Por supuesto, mientras mayor sea la base calificada mayor precisión tendrá el algoritmo. La base de datos que se utilizará para entrenar a este experimento en un pequeño porcentaje de la base generada en sentiment140.

El problema que tenemos al utilizar este experimento para realizar análisis sentimental en español, es que la base se encuentra en ingles y esta es la parte más importante para que el análisis funcione correctamente.

Lo ideal, es contar con tweets generados por culturas de habla hispana y que sean calificados sentimentalmente por personas de esa misma cultura. Por distintos motivos esto representa un gran esfuerzo humano. Inicialmente lo que podemos hacer es traducir la base de entrenamiento utilizada para el experimento.

Esa tarea la he realizado utilizando tanto bing como google translate. Les comparto los resultado para que puedan utilizar el experimento con una base en español:

https://maxmvpstorage.blob.core.windows.net/max/tweet_translated.txt

También se puede solicitar acceso al uso del corpus del TASS, aunque hay que solicitar permiso y tienen algunas limitaciones.

Realizando el mismo experimento, pero utilizando esta base de tweets que les comparto, podemos realizar el análisis semántico en español.

Por supuesto, tenemos 3 problemas principales:

  1. 160,000 frases calificadas es un número muy bajo para hacer un análisis preciso, dado que esa cantidad de frases no son representativas para algo preciso.
  2. Las frases fueron traducidas en forma automática, por lo que las palabras que se encontraban mal escritas no fueron interpretadas. Para esto se podría utilizar un diccionario online, identificar las palabras no encontradas y manualmente hacer una sanidad de la fuente de datos.
  3. La traducción automática no permite hacer una traducción precisa de como se expresaría ese concepto en español y menos aún en una cultura particular.

Sin embargo, aún con estos problemas, el ejercicio es interesante y permite realizar el análisis sentimental en español con cierta precisión.

De esta manera podemos comenzar a utilizarlo, con tweets en español. Para aquellas frases que el resultado no ha sido el correcto se puede hacer una revisión manual y posteriormente corregirlos he incorporarlos a la base de entrenamiento. De esta manera vamos incrementando la base y mejorando la calidad de la misma. El resultado a lo largo del tiempo irá mejorando en base al entrenamiento.

Ahora podemos actualizar el ejercicio del post anterior, incluyendo el sentimiento de cada frase. Nuevamente el resultado no es el más preciso, pero aún así es bastante correcto.

Actualmente está tomando algunas frases como positivas, cuando en realidad el sentido es negativo. Para estas frases lo correcto es incluirlas en la base de entrenamiento, con la calificación correspondiente, para que el algoritmo tenga una mejor precisión.

image

Análisis de redes sociales con Azure App Logic y Power BI – Tomando decisiones

Desde hace mucho tiempo múltiples compañías conocen la necesidad que tienen de capitalizar la información que se encuentra en redes sociales. Un hecho muy simple de comprender es que si somos capaces de entender la tendencia, gustos y diversos factores fundamentales, sobre un determinado sector de población o clientes, podremos tomar decisiones más certeras.

Sin embargo, son muy pocas las compañías que logran llegar a realizar dicho análisis. Muchas veces por falta de madurez en los datos de clientes y en caso de distintos organismos, por no tener conocimiento de los grupos en donde se deben analizar las diversas opiniones.

También existe un cierto grupo de empresas, que aún teniendo la información de sus clientes, no son capaces de abarcar un proyecto que pueda obtener la información relevante. Y en los pocos casos donde logran llevar a cabo esta tarea, no saben que análisis realizar sobre los datos para poder obtener información útil en la toma de decisiones.

Dentro de App Logic de Azure, hay distintas funciones que nos permiten acceder a diversas Apis de diferentes proveedores, como twitter, facebook, etc. Primero y principal, debemos comprender que App Logic en un componente para procesos recurrentes, y no es la alternativa ideal para ejecutar un proceso del tipo Long Runing. Este aspecto es importante a la hora de determinar si App Logic será o no útil para resolver nuestro problema.

Problema a resolver:

A modo de ejemplo, voy a proponer en análisis de un tema bastante polémico dentro del país en el cual radico (México). Dicho tema se trata de la Reforma Energética, les dejo unos links para que puedan conocer un poco acerca del tema:

http://www.presidencia.gob.mx/reformaenergetica/#!landing

https://es.wikipedia.org/wiki/Reforma_energ%C3%A9tica_(M%C3%A9xico)

Incluso dentro de la página oficial de gobierno podrán encontrar una opción para opinar a favor o en contra de la reforma.

image

Claramente este tema es de interés para distintos actores y el poder analizar la información y las tendencias es fundamental para la correcta toma de decisiones.

Por tal motivo, primero vamos a buscar que información podemos encontrar al respecto en twitter.

image

Inicialmente debemos separar el problema en dos partes:

  1. Analizar los posts que ya se han realizado anteriormente.
  2. Poder captar los futuros posts a medida que se realizan.

Para resolver la parte (1) del problema debemos realizar un proceso el cual se ejecutará una única vez y obtendrá el histórico de las publicaciones. Este problema podemos resolverlo de múltiples formas, incluso hay muchos códigos de ejemplo que podemos utilizar de ejemplo.

La segunda parte del problema, sin embargo, implica un proceso que constantemente esté verificando las publicaciones realizadas. Dentro de App Logic tenemos las siguientes opciones para utilizar la API de Twitter:

imageimage

Sin embargo, no todas estas funciones pueden ser utilizadas como inicio de un flujo, sobre todo porque no todos pueden ser considerados como un disparador periódico o eventual de una acción.

Creación del componente de recolección de Tweets con App Logic:

El primer paso que debemos realizar es crear un componente de App Logic en Azure.

image

En nuestro caso de estudio iniciaremos nuestro flujo con la acción “Cuando se publica un tweet nuevo

image  

Posteriormente agregamos acción que nos permita guardar el resultado de la acción anterior para poder realizar un posterior análisis.

image

Para realizar este paso debemos seguir las acciones indicadas y establecer una conexión a una base de datos. Por supuesto, si la misma no existe debemos crear una.

Como resultado de la consulta a la API de twitter tenemos una serie de propiedades que podemos utilizar sobre el tweet:

image

image image

Para nuestro ejemplo utilizaremos los siguientes

  • Creado: indica la fecha del tweet.
  • Texto del Tweet: devuelve el texto de la publicación. Claramente el contenido pudiera ser un link a otro tipo de contenidos, imágenes, etc. No es objetivo de este artículo hacer un análisis más profundo, pero se podría obtener el contenido de estos posts e incluso utilizar los servicios de Media Services para obtener el texto de un video o analizar la imagen con cortana analytics.
  • Nombre del usuario: devuelve el nombre del usuario que realizó el post. Este dato también podría ser utilizado para diferenciar si la fuente del comentario es gobierno, privado o una persona sin relación política / empresarial.
  • Id del tweet: este dato es útil para identificar si existe algún contenido duplicado en la tabla.

El análisis podría ser más profundo y también incluir un análisis sentimental, el cual estaré mostrando en un siguiente post.

El formato de la tabla donde insertaremos la información queda definida de la siguiente forma (no es el formato ideal pero en cuestiones prácticas para el ejemplo es lo mismo):

image

Una vez finalizada la creación del flujo guardamos los cambios.

image

Visualizando el proceso de ejecución:

Cuando el flujo comienza a ejecutarse podremos visualizar la actividad dentro del panel de información general:

image

Al seleccionar una ejecución en particular podremos ver el estado de cada uno de los pasos y el resultado devuelto:

image

Al seleccionar cada uno de los pasos obtendremos el detalle del mismo:

image

image

Si visualizamos la base de datos veremos los registros procesados:

image

El siguiente paso es realizar un análisis de la información.   

Para comenzar a construir nuestro proyecto de BI para el análisis de datos utilizaremos Power BI Desktop.

image

En mi caso seleccionaré la opción de Recent Sources para acceder a mi base de datos.

image 

seleccionamos la tabla que utilizaremos para el reporte

image

image

En mi caso he utilizado el componente de visualización WordCloud, el cual lo pueden descargar del siguiente link: 

https://app.powerbi.com/visuals/?WT.mc_id=Blog_Visuals

image

Dentro del cuadro de “Visualizations” podemos importar un nuevo componente de visualización. Una vez que realicemos este paso aparecerá el componente descargado.

image

Seleccionando el campo de descripción agregamos dos componentes de visualización, uno que nos muestra los comentarios y otro que nos muestra la ocurrencia de cada palabra dentro de todos los tweets: 

image

image

Al seleccionar una palabra en particular podremos filtrar los comentarios que contienen dicha palabra:

image

image

Posteriormente solo nos resta publicar el reporte y compartirlo con el equipo de trabajo.

Arquitectura para el monitoreo de huertos con IoT + Azure

En algunos posts anteriores les he compartido la forma en la que podemos enviar datos desde RPi hacia un Event Hub, como crearlo y como procesarlo utilizando Stream Analytics.

Esas piezas son solo una parte de una arquitectura integral de IoT. Por supuesto cada escenario tendrá diversas arquitecturas candidatas en base a los objetivos del proyecto y los atributos de calidad que busque.

image

Primero les comparto un video que les va a dar una mayor idea del contexto de la solución y el escenario de IoT al cual se enfoca este post:

Componentes de la arquitectura

image

image

image

image

image

image

image

image

image

image

ebook Microsoft Azure Essentials

Les comparto un link para descargar un libro con los fundamentos básicos de Azure. Muy útil para aquellas personas que quieren conocer los distintos componentes que conforman la plataforma de Azure. Muchos de ellos están comentados solo de manera superficial, sin embargo los servicios fundamentales de computo se encuentran detallados.

https://blogs.msdn.microsoft.com/microsoft_press/2016/09/01/free-ebook-microsoft-azure-essentials-fundamentals-of-azure-second-edition/

Baja de Servicio Azure RemoteApp

Microsoft el día de hoy anuncia la baja de este servicio de Azure.

El 12 de agosto de 2016, Microsoft comunica su plan de retirar Azure RemoteApp. A raíz de los comentarios de los clientes y de la dinámica del mercado, han ajustado la estrategia para centrarse más en la plataforma en la nube que sustenta servicios finales de virtualización y escritorio. Por este motivo, van a ampliar las relacionales con los partners que crean estas soluciones completas y más concretamente con Citrix. Citrix es el partner desde hace mucho tiempo en este espacio y recientemente han ampliado la relación para abordar estos y otros escenarios nuevos de clientes comunes que usan la nube de Azure.

A partir de este momento, ya no están disponibles nuevas versiones de evaluación y compras de Azure RemoteApp. Los clientes de pago existentes que usan activamente Azure RemoteApp pueden utilizar el servicio durante un año después de la fecha del anuncio para que puedan migrar sin que su negocio se vea interrumpido.