Usar el Depurador de flujo de eventos de StreamInsight

 

Los sistemas de operaciones en dominios tales como fabricación y control de procesos, utilidades, comercio financiero, Web y supervisión de TI generan flujos de eventos con complejas interrelaciones y requisitos de baja latencia. Dado el elemento temporal en el procesamiento de estos flujos de eventos, uno de los principales retos de estos sistemas consiste en determinar la validez de los resultados bajo comportamientos de flujo diferentes y dinámicos, y en solucionar problemas de la consulta en caso de errores.

Esto hace que las herramientas de análisis de consulta deban cumplir los siguientes requisitos:

  • Controlar grandes cantidades de datos y reducir el espacio de búsqueda de problemas.

  • Controlar rigurosos requisitos de coherencia.

  • Ser lo suficientemente intuitivas como para que el usuario pueda llegar rápidamente a un diagnóstico o una solución.

Microsoft StreamInsight proporciona una interfaz gráfica de usuario (GUI) de depurador de flujo de eventos independiente. El Depurador de flujo de eventos de StreamInsight le permite, como desarrollador o administrador de una aplicación de procesamiento de eventos complejos (CEP), inspeccionar, depurar y razonar acerca del flujo de eventos a través de una consulta de StreamInsight. En este tema se describen las características del Depurador de flujo de eventos y se proporcionan los procedimientos necesarios para empezar a utilizar rápidamente esta herramienta de depuración y análisis.

Descripción de la depuración de flujo de eventos

Antes de hablar sobre el Depurador de flujo de eventos, es importante indicar la diferencia fundamental entre un depurador de flujo de control (por ejemplo, un depurador de C# o C++) y el depurador de flujo de eventos.

En la depuración del flujo de control, el desarrollador "compila" un programa escrito en un lenguaje concreto en modo de depuración, habilita puntos de interrupción en instrucciones o uniones concretas del flujo de control del programa, "ejecuta" el programa hasta estos puntos de interrupción concretos, explica el código y el estado del sistema, pasa por funciones y procedimientos o los omite, inspecciona variables, etc., hasta finalizar la ejecución. El razonamiento temporal de las variables de "datos" (es decir, el análisis de la transformación de estas variables a medida que pasa el tiempo) es limitado o no existe.

Por el contrario, la depuración de flujo de eventos implica analizar un evento a medida que transcurre el tiempo, mientras pasa de una fase de la consulta CEP a la siguiente y, dentro de una fase de la consulta, de un operador al siguiente. Aquí, la depuración implica comprender los efectos de un evento en un flujo cuando tiene acceso a él desde un operador determinado y cómo se generan nuevos eventos como resultado de los cálculos en los eventos que entran en un operador. En la depuración de flujo de eventos se hace hincapié en la forma en que la semántica del operador (filtro, proyecto, combinación, agregado, multidifusión, etc.) afecta al evento y no en la ejecución (de flujo de control) de los propios operadores. Como consecuencia, el depurador ayuda a comprender el impacto que un evento determinado tiene en otros eventos y el impacto de otros eventos en el evento que se analiza.

Modos de depuración y supervisión

El Depurador de flujo de eventos es una herramienta independiente de depuración basada en el seguimiento de eventos. El depurador cumple dos propósitos:

  • Depurar un seguimiento de flujo de eventos. La sesión de depuración se puede basar en:

    • Un seguimiento generado a partir de una grabación activa de una consulta de operaciones concreta, con el depurador conectado a un servidor activo.

    • Un archivo de seguimiento generado fuera del depurador mediante un programa de línea de comandos y cargado posteriormente en el depurador.

  • Supervisar el servidor. En este modo, el depurador proporciona un explorador de objetos que muestra los objetos de sistema y de aplicación. Puede obtener diagnósticos operativos sobre cada una de estas entidades. El explorador de objetos es también la interfaz a través de la que se habilitan y deshabilitan las consultas para su seguimiento y, operativamente, donde se inicia y se detiene la ejecución de consultas.

Para poder utilizar el Depurador de flujo de eventos, el usuario debe formar parte del grupo de usuarios de registro de rendimiento de Windows. Esta pertenencia permite al usuario recopilar seguimientos fuera del depurador utilizando trace.cmd o grabar los eventos de una consulta mientras trabaja en el depurador. Vea la sección sobre administración y operaciones de Windows para obtener instrucciones para hacerlo.

Si ha instalado StreamInsight correctamente, se recomienda iniciar el depurador y revisar la página Iniciar para obtener información sobre las capacidades básicas de la herramienta. Para iniciar el depurador, haga clic en el botón Iniciar, seleccione Todos los programas, haga clic en Microsoft StreamInsight 2.0 y, a continuación, haga clic en Depurador de flujo de eventos de StreamInsight.

Depurar una consulta de StreamInsight

Puede conectar el depurador al servidor de StreamInsight como una aplicación cliente local o remota, y registrar y volver a reproducir el seguimiento de flujo de eventos de una o más consultas. También puede utilizarla como una aplicación cliente independiente separada del servidor y analizar las consultas en función de los seguimientos de eventos recopilados sin conexión. Esto le proporciona la flexibilidad necesaria para depurar una consulta concreta mientras está operativa o para volver a comprobar la consulta en función de los seguimientos históricos de sus ejecuciones.

Grabación activa de eventos de consulta

Para registrar los eventos de una consulta en ejecución, debe conectar el Depurador de flujo de eventos a un servidor de StreamInsight activo. El siguiente procedimiento describe cómo conectarse a un servidor activo, abrir una consulta en ejecución y habilitar el seguimiento en la consulta.

Nota


El Depurador de flujo de eventos puede registrar eventos únicamente en un servidor local. Es decir, debe estar ejecutándose en el mismo equipo físico que el servidor StreamInsight. La conexión del Depurador de flujo de eventos a un extremo del servidor remoto no generará un error, pero no se registrará ningún evento.

  1. Como requisito previo, el usuario (o el administrador del servidor) debe habilitar el servicio web para el servidor. Para obtener más información acerca de la habilitación del servicio web, vea Publicar en el servidor de StreamInsight y conectarse a él.

  2. Confirme que el usuario cliente tiene permisos para conectarse al servidor siendo miembro del grupo de usuarios de StreamInsight respectivo. Para obtener más información, vea la sección "Grupo de usuarios StreamInsight" en Instalación (StreamInsight).

  3. En el depurador, haga clic en Archivo y, a continuación, haga clic en Conectar con el servidor. Escriba la dirección de extremo del servidor. El extremo predeterminado de un servidor de StreamInsight instalado es del https://localhost/StreamInsight/<instance_name>.

    Si el servidor se ha configurado correctamente para las conexiones, el depurador mostrará un Explorador de objetos en el panel izquierdo.

  4. En el Explorador de objetos, haga clic en la jerarquía de objetos hasta que vea la consulta que va a depurar. Haga doble clic en el objeto de consulta. Así se abre el gráfico de consultas, tal como se muestra en la siguiente ilustración. En esta ilustración se muestra que la consulta de ejemplo 'Deltas' está actualmente en ejecución.

    Visualización de una consulta en el gráfico de consulta
    Ilustración 1 - Ver una consulta en el gráfico de consultas.

  5. Para grabar los eventos que se están procesando en la consulta, haga clic en el botón para iniciar grabación. Así iniciará el proceso de grabación, tal como se muestra en la siguiente ilustración. Después de grabar eventos durante unos minutos, haga clic en Detener.

    Eventos de registro en una consulta en ejecución
    Ilustración 2 - Grabar eventos de una consulta en ejecución.

De esta forma se iniciará en el depurador el estado que se muestra en la ilustración 1. En este punto, puede utilizar la herramienta de análisis de consulta que proporciona el depurador. Las características de análisis se describen en la sección siguiente.

Cargar archivos de seguimiento de flujo de eventos (EFT) o de seguimiento de eventos para Windows (ETL)

StreamInsight admite tanto las implementaciones de servidor independientes como incrustadas. Si la aplicación incrusta el servidor y no habilita el servicio web, una aplicación cliente como el depurador no se puede conectar al servidor. Necesita un mecanismo para depurar y diagnosticar los problemas de las consultas que se ejecutan en estas situaciones.

Para recopilar los registros de seguimiento de eventos de un servidor de StreamInsight en ejecución, puede iniciar la utilidad Trace.cmd incluida en la instalación de StreamInsight. En el siguiente procedimiento se describe cómo crear un archivo de seguimiento y cómo cargar el archivo en el Depurador de flujo de eventos.

  1. Con el servidor y la consulta o consultas correspondientes en ejecución, en el símbolo del sistema de Windows, escriba la siguiente instrucción. Es importante utilizar la extensión de archivo .etl al denominar el archivo de seguimiento.

trace.cmd start <filename>.etl

  1. Tras un período suficiente de ejecución de la consulta, detenga el seguimiento mediante:

trace.cmd stop <filename>.etl

  1. Para cargar el archivo resultante en el depurador, haga clic en Archivo y, a continuación, haga clic en Abrir. En el cuadro de diálogo Abrir, vaya a la ubicación de <filename>.etl y haga clic en Abrir. Aparecerá el gráfico de consultas, tal como se muestra en la siguiente ilustración.

    Visualización de una consulta cargada desde un archivo de seguimiento
    Ilustración 3 - Ver una consulta cargada desde un archivo de seguimiento.

Si la comparamos con los objetos que se muestran en la ilustración 1, esta ilustración muestra menos entidades en el Explorador de objetos. Esto se debe a que el depurador no está conectado al servidor. Concretamente, los objetos de diagnóstico de nivel de servidor, como los programadores, no se pueden mostrar si el depurador no está conectado al servidor.

Observe que la ilustración muestra un indicador de progreso en la barra de estado para indicar el progreso de carga del archivo ETL. Como parte de la carga, el depurador convierte un archivo ETL a su formato EFT propio comprimido.

Es importante tener en cuenta que la utilidad trace.cmd es un script basado en el comando Windows Logman. Logman utiliza a su vez la infraestructura de Seguimiento de eventos de Windows (ETW) para la colección de eventos. Durante el proceso de carga del registro de seguimiento, el depurador puede advertirle de que se han perdido algunos eventos. Esto se debe a la configuración inadecuada de la sesión y el búfer ETW. Para resolver el problema, modifique el comando Logman en el archivo trace.cmd y aumente el tamaño de búfer especificado en la opción -bs (por ejemplo, -bs 3000) o aumente el número de búferes especificado en la opción -nb. Para obtener más información y ejemplos, vea la documentación de Logman.

Consultar análisis mediante la herramienta Depurador de flujo de eventos

El Depurador de flujo de eventos proporciona las siguientes funcionalidades clave para el análisis de consultas.

  • Capacidad para ver el plan de consulta de una consulta determinada; los operadores de consulta y los flujos de eventos. Esto le ayuda a entender la consulta de Language Integrated Query (LINQ) en lo que se refiere a su flujo de eventos subyacente y a los nodos de procesamiento del flujo de eventos.

  • Capacidad para inspeccionar todos los eventos en la entrada y las salidas de un flujo de eventos complejos, así como los resultados intermedios de cada fase del cálculo. Esto incluye los metadatos de evento en lo que se refiere a las marcas de tiempo de inicio y fin, y los campos de carga.

  • Capacidad para ver flujos de eventos complejos que se dividen en particiones para el escalado. El depurador puede mostrar cómo la operación de agrupación del operador para agrupar y aplicar divide los eventos en particiones y cómo los eventos se transforman en el operador Apply.

  • Capacidad para realizar un conjunto de análisis globales que reducen el espacio de búsqueda de problemas o que correlacionan los eventos de varias fases del flujo de eventos.

  • Capacidad para recorrer el seguimiento de una ejecución de consulta a lo largo del tiempo y entender cómo se propagan los eventos a través de una consulta de flujo.

  • Capacidad para analizar los eventos y entender cómo alcanzaron un estado determinado, es decir, cómo otros eventos u operadores afectaron a sus cargas y tiempos de evento.

  • Capacidad para analizar el impacto que un evento determinado tiene en los eventos de nivel inferior con respecto al operador actual. Básicamente, la capacidad para adelantarse al procesamiento futuro de los eventos hasta que el evento afecta finalmente al resultado.

El depurador proporciona tres características de análisis para implementar estas funcionalidades:

  • Reproducir: mediante esta característica, puede recorrer el flujo de eventos pasando por un evento a la vez y observar su progreso de un operador al siguiente. También puede establecer puntos de interrupción en operadores concretos del gráfico de consultas y "ejecutar" el depurador (es decir, activar el flujo de eventos) hasta que se cumpla dicho operador o una condición concreta de dicho operador.

  • Análisis de causa raíz: mediante esta característica, puede examinar la "causa raíz", o la secuencia de operaciones o cambios que hicieron que el evento alcanzara su condición actual.

  • Análisis de propagación de eventos: mediante esta característica, puede analizar los efectos de este evento a lo largo del flujo, ya sea en términos de los cambios por los que pasa el propio evento o en términos de cómo afecta a otros eventos o cómo produce la generación de nuevos eventos. Esta característica es la opuesta al análisis de causa raíz.

Utilizar la reproducción

Una vez cargados los eventos en el depurador a través de la grabación activa o mediante su carga desde un archivo de registro de seguimiento, el paso siguiente consiste en detectar estos eventos. Para ello, debe hacer clic en el icono Reloj para reproducir los eventos. De esta forma se muestra un reproductor de eventos. Puede recorrer los eventos mediante el icono Avanzar paso a paso. También puede establecer un punto de interrupción en cualquiera de los operadores si hace clic en el botón Radio situado en el lado izquierdo de un operador y, a continuación, hace clic en Paso a paso hasta el punto de interrupción siguiente en el reproductor de eventos.

En la siguiente ilustración, se ha establecido un punto de interrupción en el operador de multidifusión y se ha activado el flujo de eventos. La línea resaltada en verde del operador de multidifusión indica la progresión del flujo de eventos hasta este punto.

Configuración de un punto de interrupción en el operador de agregación
Ilustración 4 - Establecer un punto de interrupción en el operador Aggregation.

Ahora que la consulta tiene eventos que fluyen en ella, puede expandir cada operador haciendo clic en los iconos triangulares situados en el lado derecho de cada operador. Puede seguir recorriendo los eventos y consultando su progresión.

Utilizar el análisis de causa raíz

El análisis de causa raíz permite analizar cómo alcanzó el evento su estado actual. Para iniciar el Análisis de causa raíz, en la cuadrícula de eventos de un operador, haga clic con el botón secundario en el evento que le interese y seleccione Análisis de causa raíz.

Si elige Análisis de causa raíz, el depurador muestra una vista expandida de todos los operadores que contienen los eventos que pueden haber contribuido potencialmente al estado actual del evento que se analiza. Por ejemplo, la siguiente ilustración muestra cómo se llegó a un valor avgCount de 18 con las marcas de tiempo de inicio y finalización determinadas. Para ello, desde el menú Contexto, haga clic con el botón secundario en el evento resaltado y elija Análisis de causa raíz. El depurador muestra la opción de reproducción del apilamiento de análisis de causa raíz, colocando una segunda flecha en el encabezado del lienzo de consulta con fichas. Esto se muestra en la siguiente ilustración. Un elemento que ha contribuido al estado de este evento en esta fase del procesamiento de la consulta es una operación Insert en el operador SensorInput con el valor 38 en VehicularCount.

Uso del análisis de causa raíz
Ilustración 5 - Usar el análisis de causa raíz.

Utilizar el análisis de propagación de eventos

En tanto el análisis de causa raíz estudia el impacto de otros eventos o pasos de procesamiento en un evento, el análisis de propagación de eventos es un análisis de previsión para comprender el impacto que el evento actual tiene en los eventos de nivel inferior. Para iniciar el Análisis de propagación de eventos, en la cuadrícula de eventos de un operador, haga clic con el botón secundario en el evento que le interese y seleccione Análisis de propagación de eventos.

Apilar análisis

Los análisis se pueden apilar uno encima de otro. Puede iniciar la depuración con la opción Reproducir. En algún punto de este análisis, puede iniciar un análisis de causa raíz para un evento determinado. En esta vista, también puede seleccionar otro evento para el análisis de propagación. De esta manera, puede apilar los análisis uno encima de otro.

También puede abrir la misma consulta en varias fichas y mostrar los diferentes análisis y vistas en las distintas fichas; de esta forma, dispondrá de la flexibilidad necesaria para comparar los mismos segmentos, o segmentos diferentes, de la consulta según los distintos análisis.

Operadores

Cada cuadro rectangular del gráfico de consultas representa un operador, el nodo de cálculo de una consulta de StreamInsight. El álgebra de las consultas admite varios operadores, como Select (Filter), Project, Import, Export, Group-and-Apply, Join, Multicast, Union, Top-K, AlterLifetime, Advancetime y Cleanse. Cada operador se etiqueta con el nombre proporcionado en los metadatos del servidor y su tipo de operador.

Es importante tener en cuenta que quizá no haya una correspondencia 1:1 entre los operadores que se ven en el gráfico de consultas y las operaciones que crean un consulta LINQ. Por ejemplo, un operador Import representa una instancia de un adaptador de entrada y Export representa una instancia de un adaptador de salida. Cleanse es operador interno que introduce el optimizador de consultas para administrar los datos no ordenados y no tiene ninguna presencia en la consulta LINQ. De igual forma, AdvanceTime y AlterLifetime representan las operaciones de tiempo básicas en el álgebra de la consulta que se producen como resultado de la especificación de extensiones LINQ AlterEventDuration o AlterEventLifeTime, o de las operaciones de ventana de la consulta. Sin embargo, podrá correlacionar un consulta LINQ con el gráfico de consultas resultante sin demasiada dificultad.

Cada cuadrícula de eventos incluye las siguientes secciones.

Etiqueta de operador

El título de la cuadrícula es el nombre de operador que proporciona la consulta, junto con el tipo de operador.

Filtro

En este cuadro de texto puede especificar una expresión de C# condicional para filtrar los eventos de interés. Por ejemplo, puede que solo desee examinar eventos que cumplan o superen un determinado valor o tiempo.

Campos de evento

El resto de la ventana de cuadrícula de eventos muestra los campos de un evento. Los campos incluyen el tipo de evento especificado por el usuario (Insert o Cti), junto con los eventos internos (Retract y Expand). Las columnas de campo que se muestran de forma predeterminada son EventKind, StartTime, EndTime y los campos de carga del evento. Puede agregar o quitar campos de la cuadrícula de eventos si hace clic con el botón secundario en la barra de encabezado para ver el menú contextual; también puede hacer clic en Ver, hacer clic en Columnas y, a continuación, activar o desactivar los nombres de campo. Tenga en cuenta que todos los campos de marca de tiempo se muestran según la hora universal coordinada (UTC). El menú contextual proporciona los medios para cambiar las zonas horarias.

Los campos disponibles aparecen en el orden indicado en la siguiente tabla. Los eventos de un operador determinado se pueden exportar a un archivo haciendo clic con el botón secundario en la barra de título del operador y eligiendo la opción 'Escribir eventos en archivo'. Normalmente, esta operación se usa para exportar eventos y continuar su procesamiento en otro programa.

Nombre de campo Descripción
EventKind Insert, Cti, Retract o Expand.
StartTime Hora de inicio del evento.
EndTime Hora de finalización del evento.
NewEndTime La hora de finalización modificada del evento para algunos tipos de evento de sistema especiales. Debe omitir los valores de esta columna.
Latency La latencia de sistema del evento en el momento determinado. Corresponde al intervalo de tiempo entre el momento en que entró en el sistema el evento de entrada que hizo que se generase este evento y el momento en que el sistema generó este evento.
EnqueueTime La hora del sistema en que el operador generó el evento.
Uno o más campos de carga Los campos de datos definidos por el usuario disponibles en el evento.

Operador para agrupar y aplicar

El operador para agrupar y aplicar es un operador especial que está compuesto por un operador de agrupación como punto de entrada, un conjunto de operadores de rama de aplicación y operador de unión de grupo como operador de límite en la salida. Al expandir el nodo de agrupación se muestran todas las ramas de aplicación delimitadas a los valores de clave de agrupación correspondientes. Para expandir (o contraer) el operador para agrupar y aplicar, arrastre la rama de interés desde el nodo de agrupación al lienzo. Ahora cada operador de la rama se puede expandir para un análisis más detallado. Si hace clic en el signo X en cada rama, se contrae de nuevo al subgráfico de flujo de agrupar y aplicar maestro. La siguiente ilustración muestra un nodo de agrupar y aplicar en el Depurador de flujo de eventos.

Group_and_Analysis
Ilustración 6 - Ver un nodo de agrupar y aplicar.

Características adicionales para facilitar el uso

El depurador proporciona las siguientes características que permiten facilitar el uso:

  • Puede aplicar el zoom para ver los operadores o el gráfico completo de consultas en el lienzo de forma sencilla.

  • Toda la funcionalidad disponible a través de los iconos también está disponible mediante la selección de opciones en los menús contextuales.

  • Cuando el depurador está conectado al servidor, los errores que devuelva el servidor aparecerán en la configuración regional en-US, independientemente de la configuración regional instalada. En las configuraciones regionales con un idioma distinto al inglés, estos mensajes de error se pueden utilizar para obtener soporte técnico y diagnóstico adicionales.

  • Todos los operadores se pueden expandir o contraer mediante las características Expandir todo y Contraer todo.

  • Las opciones disponibles en el menú Herramientas permiten establecer valores predeterminado para diferentes configuraciones de depurador. Puede leer el archivo de seguimiento del flujo de eventos en segmentos de tamaños concretos. Esto permite conseguir una experiencia de depuración predecible y más sencilla. Puede especificar el formato de DateTime y TimeZone para todos los operadores del gráfico de consultas. También puede especificar la duración máxima y mínima de la grabación del flujo de eventos para los casos en que el depurador está conectado a un servidor.

Supervisión

Además de ser una herramienta de depuración, el Depurador de flujo de eventos actúa como una herramienta de supervisión para el servidor de StreamInsight. Puede conectar el depurador a un servidor activo con los pasos descritos anteriormente. El depurador muestra un Explorador de objetos con todas las entidades del servidor. En el nivel superior, muestra el resumen de estadísticas del administrador de eventos, el administrador de consultas y los programadores. Para mostrar el diagnóstico en tiempo de ejecución de uno de estos objetos, haga clic con el botón secundario en el icono del objeto y seleccione Diagnóstico.

También puede hacer clic en la jerarquía de objetos y elegir una consulta determinada registrada en el servidor. Puede iniciar o detener una consulta. Además, si la consulta se está ejecutando, puede obtener el diagnóstico en tiempo de ejecución de ella. Esta interfaz permite supervisar información sobre los eventos generados y utilizados, las características de latencia y rendimiento, y los requisitos de memoria de la consulta.

Puede enumerar todos los orígenes, receptores, asuntos y procesos que se han creado en la aplicación. También puede eliminar orígenes, receptores, asuntos y procesos.

Visualización de entidades creadas por la aplicación
Ilustración 7: ver entradas creadas por la aplicación

Estas métricas también se pueden recuperar mediante programación con las API de vista de diagnóstico. Para obtener una descripción de la información de diagnóstico disponible para cada entidad, vea Supervisar el servidor y las consultas de StreamInsight.

Vea también

Guía del desarrollador de software (StreamInsight)
Operaciones (StreamInsight)