Base de datos
OBSIDIUM utiliza MariaDB como sistema de almacenamiento para gestionar métricas, nodos monitorizados, usuarios y eventos del sistema.
Visión general
La base de datos está diseñada bajo un modelo relacional estructurado, permitiendo escalabilidad, integridad de datos y eficiencia en consultas.
- Motor: InnoDB
- Relaciones mediante claves foráneas
- Soporte para datos estructurados y JSON
Modelo de datos
El sistema se organiza en varias entidades principales:
- Usuarios
- Servidores
- Agentes
- Métricas
- Alertas
- Notificaciones
- Logs
- Reglas
Tablas principales
Usuario
Gestiona los usuarios del sistema y sus roles.
- email: Identificador único
- rol: admin, operador, viewer
Servidor
Representa cada máquina monitorizada dentro del sistema.
- IP y localización
- Sistema operativo
- Estado (online/offline)
Agente
Asocia un agente de monitorización a un servidor.
- Clave única de autenticación
- Estado activo/inactivo
Monitorización
Almacena métricas de rendimiento enviadas por los agentes.
- CPU y RAM
- Ping
- Tiempo activo
- Servicios en formato JSON
Alertas
Eventos generados cuando se detectan condiciones anómalas.
- Nivel: info, warning, critical
- Estado: activo, resuelto
Notificaciones
Registro de notificaciones enviadas a usuarios.
- Canales: email o SMS
- Estado de envío
Log
Registro de acciones realizadas en el sistema.
Reglas
Define condiciones para generar alertas automáticamente.
- Métrica evaluada
- Operador lógico
- Límite y duración
Relaciones
- Un servidor puede tener múltiples métricas.
- Un servidor puede tener un agente asociado.
- Las alertas están vinculadas a servidores.
- Las notificaciones dependen de alertas.
- Los logs pueden asociarse a usuarios o agentes.
Ejemplo de flujo de datos
- El agente envía métricas.
- Se almacenan en la tabla monitorizacion.
- Se evalúan reglas.
- Se generan alertas si es necesario.
- Se envían notificaciones a usuarios.
Diseño y escalabilidad
- Estructura modular y extensible.
- Preparado para grandes volúmenes de datos.
- Posibilidad de particionado futuro.
Ejemplo de consulta
SELECT cpu, ram, ultimo_chekeo
FROM monitorizacion
WHERE server_id = 1
ORDER BY ultimo_chekeo DESC
LIMIT 10;
OBSIDIUM