iniciando proyecto
This commit is contained in:
501
README.md
Normal file
501
README.md
Normal file
@@ -0,0 +1,501 @@
|
|||||||
|
# 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
|
||||||
0
src/config.rs
Normal file
0
src/config.rs
Normal file
0
src/interface.rs
Normal file
0
src/interface.rs
Normal file
0
src/logger.rs
Normal file
0
src/logger.rs
Normal file
0
src/monitor.rs
Normal file
0
src/monitor.rs
Normal file
Reference in New Issue
Block a user