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

502 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 <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
```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