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
|
||||
Reference in New Issue
Block a user