# SIAX Monitor Sistema de monitoreo en tiempo real para aplicaciones Node.js, desarrollado en Rust. Detecta automáticamente procesos Node.js, recolecta métricas de rendimiento (CPU, RAM, PID) y las envía a la nube SIAX. ## Características - **Monitoreo Automático**: Detecta y monitorea procesos Node.js basándose en su directorio de trabajo - **Métricas en Tiempo Real**: CPU, memoria RAM, PID y estado del proceso - **Interface Web**: Panel de control intuitivo en el puerto 8080 - **Sistema de Logs**: Registro completo con niveles (Info, Warning, Error, Critical) - **Configuración Dinámica**: Gestión de aplicaciones mediante archivo JSON - **Envío a la Nube**: Reportes automáticos cada 60 segundos a la API SIAX ## Arquitectura del Proyecto ``` siax_monitor/ ├── src/ │ ├── main.rs # Punto de entrada principal │ ├── monitor.rs # Lógica de monitoreo de procesos │ ├── interface.rs # Servidor web Axum │ ├── logger.rs # Sistema de logging │ └── config.rs # Gestión de configuración ├── web/ # Templates HTML │ ├── index.html │ ├── scan.html │ ├── select.html │ ├── success.html │ └── logs.html ├── config/ # Configuración generada automáticamente │ └── monitored_apps.json ├── logs/ # Logs del sistema │ └── errors.log └── Cargo.toml # Dependencias del proyecto ``` ## Requisitos Previos ### Sistema Operativo - Linux (Ubuntu/Debian recomendado) - macOS - Windows (con limitaciones en detección de procesos) ### Herramientas Necesarias #### 1. Rust (toolchain completo) ```bash # Instalar Rust usando rustup curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Verificar instalación rustc --version cargo --version ``` #### 2. Librerías del Sistema (Linux) **Ubuntu/Debian:** ```bash sudo apt update sudo apt install -y build-essential pkg-config libssl-dev ``` **Fedora/RHEL/CentOS:** ```bash sudo dnf groupinstall "Development Tools" sudo dnf install pkg-config openssl-devel ``` **Arch Linux:** ```bash sudo pacman -S base-devel openssl pkg-config ``` **macOS:** ```bash # Instalar Homebrew si no lo tienes /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # Instalar dependencias brew install openssl pkg-config ``` ## Instalación ### Opción 1: Clonar y Compilar ```bash # Clonar el repositorio (si aplica) git clone cd siax_monitor # Compilar el proyecto cargo build --release # El binario estará en: # ./target/release/siax_monitor ``` ### Opción 2: Compilación Directa ```bash # Si ya tienes el código fuente cd siax_monitor # Compilar en modo release (optimizado) cargo build --release ``` ## Configuración ### 1. Archivo de Configuración El archivo `config/monitored_apps.json` se crea automáticamente con valores por defecto: ```json { "apps": [ { "name": "app_tareas", "port": 3000 }, { "name": "fidelizacion", "port": 3001 } ] } ``` **Edita este archivo para agregar/modificar las aplicaciones a monitorear.** ### 2. Configuración de Credenciales Actualmente las credenciales están en `src/main.rs`. Para producción, edita: ```rust let server_name = "tu-servidor".to_string(); let api_key = "tu-api-key".to_string(); let cloud_url = "https://api.siax-system.net/api/apps_servcs/apps".to_string(); ``` ## Despliegue ### Despliegue Manual #### 1. Compilar el Proyecto ```bash cd /ruta/a/siax_monitor cargo build --release ``` #### 2. Ejecutar el Monitor ```bash # Opción 1: Ejecutar directamente ./target/release/siax_monitor # Opción 2: Ejecutar con Cargo cargo run --release ``` #### 3. Verificar que Funciona ```bash # El sistema mostrará: # ✅ Sistema SIAX operativo. Monitor en segundo plano e Interface en puerto 8080. # Acceder a la interface web: # http://localhost:8080 ``` ### Despliegue Automático con Script Bash Crea el archivo `desplegar_siax.sh`: ```bash #!/bin/bash # SIAX Monitor - Script de Despliegue Automático # Autor: Sistema SIAX # Descripción: Instala dependencias, compila y ejecuta el monitor set -e # Detener en caso de error echo "🚀 Iniciando despliegue de SIAX Monitor..." # ======================================== # 1. Verificar Rust # ======================================== echo "" echo "📦 Verificando instalación de Rust..." if ! command -v rustc &> /dev/null; then echo "❌ Rust no está instalado." echo "Instalando Rust..." curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source "$HOME/.cargo/env" echo "✅ Rust instalado correctamente" else echo "✅ Rust ya está instalado ($(rustc --version))" fi # ======================================== # 2. Detectar sistema operativo e instalar dependencias # ======================================== echo "" echo "🔧 Instalando dependencias del sistema..." if [[ "$OSTYPE" == "linux-gnu"* ]]; then # Detectar distribución Linux if [ -f /etc/debian_version ]; then echo "Detectado: Debian/Ubuntu" sudo apt update sudo apt install -y build-essential pkg-config libssl-dev elif [ -f /etc/redhat-release ]; then echo "Detectado: RHEL/Fedora/CentOS" sudo dnf groupinstall "Development Tools" -y sudo dnf install pkg-config openssl-devel -y elif [ -f /etc/arch-release ]; then echo "Detectado: Arch Linux" sudo pacman -S --noconfirm base-devel openssl pkg-config else echo "⚠️ Distribución no reconocida. Instala manualmente: build-essential, pkg-config, libssl-dev" fi elif [[ "$OSTYPE" == "darwin"* ]]; then echo "Detectado: macOS" if ! command -v brew &> /dev/null; then echo "Instalando Homebrew..." /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" fi brew install openssl pkg-config else echo "⚠️ Sistema operativo no soportado automáticamente" fi echo "✅ Dependencias instaladas" # ======================================== # 3. Compilar el proyecto # ======================================== echo "" echo "🔨 Compilando SIAX Monitor..." cargo build --release if [ $? -eq 0 ]; then echo "✅ Compilación exitosa" else echo "❌ Error en la compilación" exit 1 fi # ======================================== # 4. Crear directorios necesarios # ======================================== echo "" echo "📁 Creando directorios..." mkdir -p config mkdir -p logs echo "✅ Directorios creados" # ======================================== # 5. Verificar configuración # ======================================== echo "" echo "⚙️ Verificando configuración..." if [ ! -f "config/monitored_apps.json" ]; then echo "ℹ️ Archivo de configuración no encontrado. Se creará automáticamente al iniciar." fi # ======================================== # 6. Ejecutar el monitor # ======================================== echo "" echo "🎯 Iniciando SIAX Monitor..." echo "" echo "==========================================" echo " Interface Web: http://localhost:8080" echo " Logs: logs/errors.log" echo " Config: config/monitored_apps.json" echo "==========================================" echo "" ./target/release/siax_monitor ``` #### Usar el Script ```bash # Dar permisos de ejecución chmod +x desplegar_siax.sh # Ejecutar ./desplegar_siax.sh ``` ### Despliegue como Servicio Systemd (Linux) Para ejecutar SIAX Monitor como servicio en segundo plano: #### 1. Crear archivo de servicio ```bash sudo nano /etc/systemd/system/siax-monitor.service ``` #### 2. Contenido del servicio ```ini [Unit] Description=SIAX Monitor - Sistema de Monitoreo Node.js After=network.target [Service] Type=simple User=tu_usuario WorkingDirectory=/ruta/completa/a/siax_monitor ExecStart=/ruta/completa/a/siax_monitor/target/release/siax_monitor Restart=always RestartSec=10 # Variables de entorno (opcional) Environment="RUST_LOG=info" # Logs StandardOutput=append:/var/log/siax-monitor.log StandardError=append:/var/log/siax-monitor-error.log [Install] WantedBy=multi-user.target ``` #### 3. Activar y gestionar el servicio ```bash # Recargar systemd sudo systemctl daemon-reload # Habilitar inicio automático sudo systemctl enable siax-monitor # Iniciar el servicio sudo systemctl start siax-monitor # Ver estado sudo systemctl status siax-monitor # Ver logs sudo journalctl -u siax-monitor -f # Detener servicio sudo systemctl stop siax-monitor # Reiniciar servicio sudo systemctl restart siax-monitor ``` ## Uso ### Interface Web Accede a `http://localhost:8080` para: 1. **Dashboard Principal** (`/`) - Vista general del sistema 2. **Escanear Procesos** (`/scan`) - Lista todos los procesos Node.js detectados - Muestra PID, CPU, RAM y ruta 3. **Seleccionar Procesos** (`/select`) - Interfaz para agregar procesos al monitoreo - Auto-completa nombre basándose en la ruta 4. **Ver Logs** (`/logs`) - Historial completo de logs - Estadísticas por nivel - Filtros por tipo ### Línea de Comandos ```bash # Ver logs en tiempo real tail -f logs/errors.log # Editar configuración nano config/monitored_apps.json # Verificar procesos Node.js ps aux | grep node ``` ## Dependencias de Rust El proyecto utiliza las siguientes crates: - **tokio** `1.x` - Runtime asíncrono - **axum** `0.7` - Framework web - **reqwest** `0.11` - Cliente HTTP (con feature `json`) - **serde** `1.0` - Serialización/deserialización (con feature `derive`) - **serde_json** `1.0` - Manejo de JSON - **sysinfo** `0.30` - Información del sistema - **chrono** `0.4` - Manejo de fechas y timestamps ## Estructura de Datos ### AppStatusUpdate (enviado a la nube) ```json { "app_name": "app_tareas", "server": "siax-intel", "status": "running", "port": 3000, "pid": 12345, "memory_usage": "125.45MB", "cpu_usage": "2.30%", "last_check": "2025-01-11 14:30:00" } ``` ### MonitoredApp (configuración) ```json { "name": "nombre_app", "port": 3000 } ``` ## Solución de Problemas ### Error: "error: linker 'cc' not found" ```bash # Ubuntu/Debian sudo apt install build-essential # Fedora/RHEL sudo dnf groupinstall "Development Tools" ``` ### Error: "failed to run custom build command for openssl-sys" ```bash # Ubuntu/Debian sudo apt install pkg-config libssl-dev # Fedora/RHEL sudo dnf install pkg-config openssl-devel # macOS brew install openssl pkg-config ``` ### El monitor no detecta mis procesos Node.js 1. Verifica que los procesos estén corriendo: `ps aux | grep node` 2. Comprueba que el nombre en `config/monitored_apps.json` coincida con el directorio de trabajo del proceso 3. El monitor busca coincidencias en el `cwd` (current working directory) del proceso ### La interface web no carga 1. Verifica que el puerto 8080 esté libre: `lsof -i :8080` 2. Comprueba los logs: `cat logs/errors.log` 3. Asegúrate de que las templates HTML existan en `web/` ## Seguridad ⚠️ **IMPORTANTE**: - El API Key está hardcodeado en `src/main.rs` - Para producción, usa variables de entorno - No expongas el puerto 8080 a internet sin autenticación - Considera usar HTTPS en producción ## Contribuir 1. Fork el proyecto 2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`) 3. Commit tus cambios (`git commit -am 'Agrega nueva funcionalidad'`) 4. Push a la rama (`git push origin feature/nueva-funcionalidad`) 5. Crea un Pull Request ## Licencia [Especificar licencia] ## Contacto Sistema SIAX - [Información de contacto] --- **Versión**: 0.1.0 **Última actualización**: 2025-01-11