En informática , la monitorización de eventos es el proceso de recopilación, análisis y señalización de ocurrencias de eventos a suscriptores, como procesos del sistema operativo , reglas de bases de datos activas y operadores humanos. Estas ocurrencias de eventos pueden provenir de fuentes arbitrarias, tanto de software como de hardware , como sistemas operativos, sistemas de administración de bases de datos , software de aplicación y procesadores . La monitorización de eventos puede utilizar una base de datos de series temporales .
La monitorización de eventos utiliza un bus lógico para transportar las ocurrencias de eventos desde las fuentes a los suscriptores , donde las fuentes de eventos envían las ocurrencias de eventos a todos los suscriptores de eventos y los suscriptores de eventos reciben las ocurrencias de eventos. Un bus de eventos se puede distribuir en un conjunto de nodos físicos , como sistemas informáticos independientes. Se encuentran ejemplos típicos de buses de eventos en sistemas gráficos como X Window System , Microsoft Windows , así como en herramientas de desarrollo como SDT.
La recopilación de eventos es el proceso de recopilar ocurrencias de eventos en un registro de eventos filtrado para su análisis. Un registro de eventos filtrado registra ocurrencias de eventos que pueden tener un uso significativo en el futuro; esto implica que las ocurrencias de eventos se pueden eliminar del registro de eventos filtrado si son inútiles en el futuro. El análisis del registro de eventos es el proceso de analizar el registro de eventos filtrado para agregar ocurrencias de eventos o para decidir si una ocurrencia de evento debe ser señalizada o no. La señalización de eventos es el proceso de señalizar ocurrencias de eventos a través del bus de eventos.
Todo lo que se monitoriza se denomina objeto monitorizado ; por ejemplo, una aplicación, un sistema operativo, una base de datos, un hardware, etc. pueden ser objetos monitorizados. Un objeto monitorizado debe estar debidamente acondicionado con sensores de eventos para permitir el monitoreo de eventos, es decir, un objeto debe estar instrumentado con sensores de eventos para ser un objeto monitorizado. Los sensores de eventos son sensores que señalan la ocurrencia de eventos cada vez que ocurre un evento. Siempre que se monitoriza algo, se debe gestionar el efecto de la sonda .
Como lo discutió Gait, [1] cuando se monitorea un objeto, su comportamiento cambia. En particular, en cualquier sistema concurrente en el que los procesos pueden ejecutarse en paralelo , esto plantea un problema particular. La razón es que siempre que se introducen sensores en el sistema, los procesos pueden ejecutarse en un orden diferente. Esto puede causar un problema si, por ejemplo, estamos tratando de localizar una falla y al monitorear el sistema cambiamos su comportamiento de tal manera que la falla no resulte en un fallo; en esencia, la falla puede enmascararse al monitorear el sistema. El efecto sonda es la diferencia de comportamiento entre un objeto monitoreado y su contraparte no instrumentada.
Según Schütz, [2] podemos evitar, compensar o ignorar el efecto de la sonda. En sistemas críticos en tiempo real, en los que la puntualidad (es decir, la capacidad de un sistema para cumplir con las restricciones de tiempo, como los plazos) es significativa, la evitación es la única opción. Si, por ejemplo, instrumentamos un sistema para realizar pruebas y luego eliminamos la instrumentación antes de la entrega, esto invalida los resultados de la mayoría de las pruebas basadas en el sistema completo. En sistemas en tiempo real menos críticos (por ejemplo, sistemas basados en medios), la compensación puede ser aceptable para, por ejemplo, las pruebas de rendimiento . En sistemas no concurrentes, la ignorancia es aceptable, ya que el comportamiento con respecto al orden de ejecución no cambia.
El análisis de registros de eventos se conoce como composición de eventos en bases de datos activas , reconocimiento de crónicas en inteligencia artificial y como evaluación lógica en tiempo real en sistemas en tiempo real. Esencialmente, el análisis de registros de eventos se utiliza para la coincidencia de patrones , el filtrado de ocurrencias de eventos y la agregación de ocurrencias de eventos en ocurrencias de eventos compuestos. Comúnmente, se emplean estrategias de programación dinámica de algoritmos para guardar resultados de análisis anteriores para uso futuro, ya que, por ejemplo, el mismo patrón puede coincidir con las mismas ocurrencias de eventos en varios procesamientos de análisis consecutivos. A diferencia del procesamiento de reglas generales (empleado para afirmar nuevos hechos a partir de otros hechos, cf. motor de inferencia ) que generalmente se basa en técnicas de retroceso , los algoritmos de análisis de registros de eventos son comúnmente voraces ; por ejemplo, cuando se dice que se ha producido un compuesto, este hecho nunca se revoca como puede hacerse en un algoritmo basado en retroceso.
Se han propuesto varios mecanismos para el análisis de registros de eventos: autómatas de estados finitos , redes de Petri , procedimentales (basados ya sea en un lenguaje de programación imperativo o en un lenguaje de programación orientado a objetos), una modificación del algoritmo de búsqueda de cadenas de Boyer-Moore y redes temporales simples .