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)
# 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:
sudo apt update
sudo apt install -y build-essential pkg-config libssl-dev
Fedora/RHEL/CentOS:
sudo dnf groupinstall "Development Tools"
sudo dnf install pkg-config openssl-devel
Arch Linux:
sudo pacman -S base-devel openssl pkg-config
macOS:
# 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
# Clonar el repositorio (si aplica)
git clone <repository-url>
cd siax_monitor
# Compilar el proyecto
cargo build --release
# El binario estará en:
# ./target/release/siax_monitor
Opción 2: Compilación Directa
# 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:
{
"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:
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
cd /ruta/a/siax_monitor
cargo build --release
2. Ejecutar el Monitor
# Opción 1: Ejecutar directamente
./target/release/siax_monitor
# Opción 2: Ejecutar con Cargo
cargo run --release
3. Verificar que Funciona
# 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:
#!/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
# 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
sudo nano /etc/systemd/system/siax-monitor.service
2. Contenido del servicio
[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
# 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:
-
Dashboard Principal (
/)- Vista general del sistema
-
Escanear Procesos (
/scan)- Lista todos los procesos Node.js detectados
- Muestra PID, CPU, RAM y ruta
-
Seleccionar Procesos (
/select)- Interfaz para agregar procesos al monitoreo
- Auto-completa nombre basándose en la ruta
-
Ver Logs (
/logs)- Historial completo de logs
- Estadísticas por nivel
- Filtros por tipo
Línea de Comandos
# 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 featurejson) - serde
1.0- Serialización/deserialización (con featurederive) - 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)
{
"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)
{
"name": "nombre_app",
"port": 3000
}
Solución de Problemas
Error: "error: linker 'cc' not found"
# Ubuntu/Debian
sudo apt install build-essential
# Fedora/RHEL
sudo dnf groupinstall "Development Tools"
Error: "failed to run custom build command for openssl-sys"
# 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
- Verifica que los procesos estén corriendo:
ps aux | grep node - Comprueba que el nombre en
config/monitored_apps.jsoncoincida con el directorio de trabajo del proceso - El monitor busca coincidencias en el
cwd(current working directory) del proceso
La interface web no carga
- Verifica que el puerto 8080 esté libre:
lsof -i :8080 - Comprueba los logs:
cat logs/errors.log - 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
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Agrega nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - 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