502 lines
12 KiB
Markdown
502 lines
12 KiB
Markdown
# 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
|