Files
SIAX-MONITOR/README.md
2026-01-11 23:10:43 -05:00

12 KiB
Raw Blame History

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:

  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

# 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)

{
  "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

  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