TensorFlow

Plugin para monitorizar y detectar posibles anomalías, usando TensorFlow y numphy.

Introducción

Este plugin es una implementación de detección de anomalías utilizando un autoencoder simple con TensorFlow. Un autoencoder es un tipo de red neuronal que aprende a codificar y decodificar datos. En este caso, el autoencoder se utiliza para reconstruir datos y calcular el error de reconstrucción. La idea es que si el autoencoder no puede reconstruir con precisión un dato nuevo, podría considerarse una anomalía.

El plugin recoge datos históricos de los módulos de un agente seleccionado y evalúa si el ultimo dato es anómalo comparándolo con su histórico de datos.

 

image-1690970258648.png

Funcionamiento de la detección de anomalías

 

Modelo

El modelo utilizado es un Autoencoder, una red neuronal especializada en aprendizaje no supervisado. Su propósito principal es reducir la dimensionalidad de los datos y luego reconstruirlos. Se compone de un codificador que comprime la entrada en un espacio latente de menor dimensión y un decodificador que intenta reconstruir la entrada original. El entrenamiento implica alimentar los mismos datos a la entrada y salida del modelo, optimizando la función de pérdida que mide el error de reconstrucción.

Recolección de datos

Los datos históricos de módulos se recolectan desde la base de datos, indicando la fecha a partir de la que se buscarán los datos con el parémetro --time_data, y el intervalo de datos con el parámetro --time_interval. Se puede indicar un número mínimo de datos con --level_data.

Evaluación de los datos

La evaluación de anomalías se basa en el cálculo del error de reconstrucción entre el dato original y su versión reconstruida por el modelo Autoencoder. Primero, se preparan los datos de entrenamiento y prueba, donde se utiliza la secuencia de datos hasta el penúltimo valor para entrenar el modelo y el último valor se considera el dato que se evaluará para detectar anomalías.

Una vez entrenado el modelo, se realiza una predicción en el último valor de prueba para obtener su versión reconstruida . A continuación, se calcula el error de reconstrucción como la media del valor absoluto de la diferencia entre el dato original y su versión reconstruida.

Además, se calcula la media y la desviación estándar de los errores de reconstrucción de los datos de entrenamiento. Ajustando un umbral basado en la desviación estándar (multiplicada por un factor), se determina si el último valor es una anomalía o no. Si el error de reconstrucción es mayor que el umbral, se considera una anomalía. De lo contrario, no se consideraría anomalía.

Este enfoque de evaluación de anomalías permite identificar valores atípicos en la secuencia de datos, ya que el modelo Autoencoder aprende a representar patrones normales en el espacio latente y encuentra dificultades en reconstruir datos anómalos, generando una discrepancia significativa entre la entrada original y la versión reconstruida.

Matriz de compatibilidad

 

Sistemas donde se ha probado

CentOS 7, Fedora, rocky linux

Sistemas donde debería funcionar

Cualquier sistema linux 

 

 

Prerrequisitos

Parámetros

 

Parámetros de configuración de la monitorización

--agent_name Nombre del agente del que se pretende monitorizar los módulos. (Obligatorio)
--target_agent Crea un agente nuevo, que contendrá los módulos generados por el plugin, si no se usa estos módulos se generaran en el agente indicado con --agent_name. 
--time_data
Periodo de tiempo a monitorizar en segundos. Por defecto : 604800 ( una semana, opcional)
--time_interval
Intervalo de datos para el periodo de tiempo. Por defecto : 60 (opcional)
--level_data
Mínimo de nivel de datos históricos necesario en el módulo para monitorizar anomalías. Por defecto 50
--threads
Número de hilos a usar en la creación de módulos. Por defecto 1
--modules_list

Lista de nombres de módulos a monitorizar (opcional), la sintaxis es la siguiente :

 

'["Memory_Used","Cswap"]'

 Si no se usa este parámetro se monitorizará todos los módulos del agente seleccionado.

 

Parámetros de conexión a la base de datos.

--dbhost Host de la base de datos. Por defecto "127.0.0.1"
--dbname Nombre de la base de datos. Por defecto "pandora"
--dbuser Usuario de la base de datos. Por defecto "pandora"
--dbpass Contraseña de la base de datos. Por defecto "pandora"
--dbport Puerto de la base de datos. Por defecto 3306

 


Parámetros configuración PandoraFMS

--transfer_mode Modo de transferencia, local o tentacle. Por defecto será local. (opcional)
--tentacle_port Puerto de tentacle. Por defecto 41121 (opcional)
--tentacle_address Ip del servidor tentacle al que mandar los datos (opcional)
--tentacle_client Ruta del cliente de tentacle. Por defecto "tentacle_client" (opcional)
--tentacle_opts Opciones extras de tentacle. (opcional)
--interval Intervalo de monitorización del agente. Por defecto 300 (opcional)
--temporal Ruta para ficheros temporales. Por defecto "/tmp" (opcional)
-g,--group Grupo de destino de Pandora FMS (opcional)
--data_dir Directorio de datos de Pandora FMS. Por defecto es /var/spool/pandora/data_in/ (opcional)

Ejecución manual

 

./pandora_tf_anomaly --agent_name < Nombre del agente que se pretende monitorizar > 
[ --dbhost < host > ] [ --dbname < nombre de la base de datos > ] [ --dbuser < usuario de la base de datos > ] [ --dbpass < contraseña de la base de datos > ] [ --dbport < puerto de la base de datos > ] 
[ --time_data < periodo de tiempo en segundos > ] [ --time_interval < intervalo de tiempo en segundos > ] [ --modules_list < lista con los modulos > ] [ --level_data < numero de datos mínimo > ] [ --agent_name < nombre del agente > ] [ --target_agent < nombre de agente a crear > ] [ --threads < número de hilos > ] 
[ --transfer_mode < local o tentacle > ] [ --tentacle_port < puerto de tentacle > ] [ --tentacle_address < IP de tentacle > ] [ --tentacle_client < ruta del tentacle client ] [ --tentacle_opts < opciones extra de tentacle ]
[ -g < grupo > ] [ --data_dir < ruta de data_dir > ] [ --temporal < ruta temporal > ] [ --interval < intervalo de monitorización en segundos > ]

Ejemplo :

./pandora_tf_anomaly --agent_name c600b04d3c949fe70e53a7fe4cc0a63901280a8dedcc0b23b6d3118432636f44 --dbhost 172.42.42.101 --tentacle_address 172.42.42.101 --level_data 50 --time_data 360000

 

image-1692275321595.png

Configuración en PandoraFMS

Como plugin de servidor

Instalación manual

Se debe ir a la opción a servidores > plugins:

image-1689158588025.png

Se debe pinchar en añadir:

image-1689158615757.png

Se le pone el nombre y la descripción que se prefiera.

Se debe meter como comando la ejecución con la ruta del plugin:

/path_pandora_tf_anomaly

Recuerda que la ruta recomendada para el uso de los plugins de servidor es: /usr/share/pandora_server/util/plugin/

Y en parámetros del plugin introduciremos estos seguidos de la macro "_field<N>_", el único parámetro obligatorio es --agent_name.

Una vez hecho esto, daremos a "crear".

Una vez hecho esto, solo queda llamarlo por lo que iremos a la vista de algún agente y crearemos un módulo de complementos:

image-1689158791553.png

Le daremos un nombre y en el apartado "plugin" pondremos el que acabamos de configurar.

Una vez hecho esto, damos a crear.

Si el modulo se muestra con 1, quiere decir que se esta ejecutando correctamente.

Módulos generados por el plugin

 

El plugin creará el siguiente módulo por cada módulo monitorizado.

<module_name>.TF.ANOMALY
Reconstruction error: < reconstruction_error > / < threshold >
1 si el último dato no es anómalo, 0 si lo es.

Si se usa el parámetro --target_agent la sintáxis del nombre del módulo sera la siguiente :

<target_agent>.<module_name>.TF.ANOMALY