Skip to content

Diagnóstico inicial

Diagnóstico inicial

Ejecuta esta batería de pruebas tras la instalación y configuración inicial para confirmar que TraceWall está listo para operar.

Matriz de validación

ÁreaPruebaComando / AcciónCriterio de éxito
AppArranque limpioLanzar app → sin errores en consola / Event ViewerVentana abre < 10 s, sin crashes
AppVentana principalUI renderiza, sidebar navegaCommand Center visible, sin pantallas blancas
SensorPanel sidebarLocal Sensor (izq) muestra datosInterfaces, CPU, RAM, Disco, Uptime poblados
SensorMódulo completoNavegar a Local Sensor (módulo)Todas las pestañas (Interfaces, Procesos, Puertos, Rutas, DNS) con datos
SensorPersistenciaReiniciar app → datos reaparecentracewall.db tiene filas en assets, interfaces, processes
InventarioActivosAssets & Inventory → filas > 0Host local + al menos 1 interfaz, confidence ≥ 0.9
InventarioFiltrosFiltrar por type=host, reachable=trueResultados coherentes
TopologíaGrafo renderizadoNetwork Topology → nodos/aristas visiblesGateway + subred local + host local como nodo
TopologíaInteracciónZoom, pan, clic nodo → panel detalleSin lag, detalle muestra metadata
ExposiciónPerfil DNSExposure Intelligence → Perfil DNS → [Ejecutar]Hallazgos generados (o “sin hallazgos” explícito)
ExposiciónPerfil WebPerfil Web → [Ejecutar]Escaneo puertos 80/443 → evidencia HTTP/TLS
ExposiciónPerfil Internet-facingPerfil Internet-facing → [Ejecutar]IP pública detectada (si hay salida a Internet)
EventosBuffer pobladoEvents / SIEM → últimos 100 eventosSeveridad, tipo, timestamp, origen, mensaje
EventosBúsquedaFiltrar por severity=criticalResultados instantáneos (< 500 ms)
EventosExportación[Exportar CSV] → archivo válidoCSV abre en Excel, columnas esperadas
ARGUSMotor iniciadoARGUS Workspace → estado 🟢 / “Listo”Health check 200 OK en loopback
ARGUSModelo cargadoSettings → ARGUS → modelo listadoTamaño GB > 0, nombre .gguf
ARGUSChat funcionalARGUS Workspace → “Resume estado actual”Respuesta en < 30 s, cita evidencia (sensor/inventario)
ARGUSHerramientasPreguntar “¿Qué puertos abiertos en 10.0.0.5?”Invoca get_interface_status o search_assets
Integr.ConectividadSettings → Integraciones → [Probar] cada una🟢 Éxito en test
Integr.Datos fluyenAssets filtrar source=<integ> → filas > 0Datos normalizados en inventario
LogsSin errores críticosSettings → Logs / carpeta logs → buscar ERROR/FATAL0 en último ciclo (warnings aceptables)
PerfCPU/MEM en idleTask Manager / htop → proceso TraceWallCPU < 5% idle, RAM < 2 GB (sin ARGUS) / < 10 GB (con ARGUS)

Script de diagnóstico automatizado

Windows (PowerShell) — diag-tracewall.ps1

Terminal window
# Requiere: TraceWall corriendo, acceso a %LOCALAPPDATA%\TraceWall\
$base = "$env:LOCALAPPDATA\TraceWall"
$db = "$base\tracewall.db"
$logs = "$base\logs"
Write-Host "=== TraceWall Diagnostic ===" -ForegroundColor Cyan
# 1. DB existe y accesible
if (Test-Path $db) {
Write-Host "✅ DB encontrada: $db" -ForegroundColor Green
# Query rápida via sqlite3 (si instalado) o .NET
Add-Type -AssemblyName System.Data.SQLite
$conn = New-Object System.Data.SQLite.SQLiteConnection
$conn.ConnectionString = "Data Source=$db;Read Only=True;"
$conn.Open()
$cmd = $conn.CreateCommand()
$cmd.CommandText = "SELECT COUNT(*) FROM assets;"
$count = $cmd.ExecuteScalar()
Write-Host " Assets en inventario: $count" -NoNewline
if ($count -gt 0) { Write-Host "" -ForegroundColor Green } else { Write-Host " ⚠️ Vacío" -ForegroundColor Yellow }
$conn.Close()
} else {
Write-Host "❌ DB NO encontrada: $db" -ForegroundColor Red
}
# 2. Logs recientes sin ERROR/FATAL
$recentLogs = Get-ChildItem "$logs\*.log" | Sort-Object LastWriteTime -Descending | Select-Object -First 3
foreach ($log in $recentLogs) {
$errors = Select-String -Path $log.FullName -Pattern "ERROR|FATAL" -SimpleMatch
Write-Host "Log: $($log.Name)" -NoNewline
if ($errors.Count -eq 0) { Write-Host " ✅ Sin errores" -ForegroundColor Green }
else { Write-Host " ⚠️ $($errors.Count) errores" -ForegroundColor Yellow; $errors | Select-Object -First 3 | ForEach-Object { Write-Host " $_" } }
}
# 3. Proceso TraceWall
$proc = Get-Process -Name "TraceWall" -ErrorAction SilentlyContinue
if ($proc) {
Write-Host "Proceso principal: PID $($proc.Id)" -NoNewline
Write-Host " CPU: $([math]::Round($proc.CPU,1))s RAM: $([math]::Round($proc.WorkingSet64/1MB,1)) MB"
# Child processes
$children = Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq $proc.Id }
foreach ($c in $children) {
Write-Host " └─ $($c.Name) (PID $($c.ProcessId)) CPU: $([math]::Round($c.CPU,1))s RAM: $([math]::Round($c.WorkingSetSize/1MB,1))MB"
}
} else {
Write-Host "❌ Proceso TraceWall NO encontrado" -ForegroundColor Red
}
# 4. ARGUS health (si habilitado)
$argusPort = Get-ChildItem "$base\argus" -Filter "port.txt" -ErrorAction SilentlyContinue
if ($argusPort) {
$port = Get-Content $argusPort.FullName -Raw
try {
$resp = Invoke-WebRequest -Uri "http://127.0.0.1:$port/health" -TimeoutSec 3 -UseBasicParsing
Write-Host "ARGUS health (port $port): $($resp.StatusCode) $($resp.Content)" -ForegroundColor Green
} catch {
Write-Host "ARGUS health: ❌ $($_.Exception.Message)" -ForegroundColor Red
}
} else {
Write-Host "ARGUS: No habilitado o puerto no detectado"
}
# 5. Sensor data freshness
if (Test-Path $db) {
$conn = New-Object System.Data.SQLite.SQLiteConnection
$conn.ConnectionString = "Data Source=$db;Read Only=True;"
$conn.Open()
$cmd = $conn.CreateCommand()
$cmd.CommandText = "SELECT MAX(last_seen) FROM assets;"
$last = $cmd.ExecuteScalar()
if ($last) {
$age = [DateTimeOffset]::FromUnixTimeSeconds($last)
$diff = (Get-Date) - $age
Write-Host "Última telemetría asset: $age (hace $([math]::Round($diff.TotalMinutes,1)) min)" -NoNewline
if ($diff.TotalMinutes -lt 5) { Write-Host "" -ForegroundColor Green }
elseif ($diff.TotalMinutes -lt 30) { Write-Host " ⚠️" -ForegroundColor Yellow }
else { Write-Host " ❌ STALE" -ForegroundColor Red }
}
$conn.Close()
}
Write-Host "`n=== Fin diagnóstico ===" -ForegroundColor Cyan

Linux (Bash) — diag-tracewall.sh

#!/usr/bin/env bash
set -euo pipefail
BASE="$HOME/.local/share/tracewall"
DB="$BASE/tracewall.db"
LOGS="$BASE/logs"
echo "=== TraceWall Diagnostic ==="
# 1. DB
if [[ -f "$DB" ]]; then
echo "✅ DB: $DB"
if command -v sqlite3 &>/dev/null; then
count=$(sqlite3 -readonly "$DB" "SELECT COUNT(*) FROM assets;")
echo " Assets: $count"
if [[ $count -gt 0 ]]; then
echo ""
else
echo " ⚠️ Vacío"
fi
# Freshness
last=$(sqlite3 -readonly "$DB" "SELECT MAX(last_seen) FROM assets;")
if [[ -n "$last" ]]; then
age=$(( $(date +%s) - last ))
echo " Última telemetría: $(date -d "@$last" '+%F %T') (hace ${age}s)"
if [[ $age -lt 300 ]]; then echo ""; elif [[ $age -lt 1800 ]]; then echo " ⚠️"; else echo " ❌ STALE"; fi
fi
fi
else
echo "❌ DB NO encontrada: $DB"
fi
# 2. Logs recientes
echo "Logs recientes:"
for log in $(ls -t "$LOGS"/*.log 2>/dev/null | head -3); do
errors=$(grep -c -E "ERROR|FATAL" "$log" 2>/dev/null || echo 0)
if [[ $errors -eq 0 ]]; then
echo " $(basename "$log") ✅"
else
echo " $(basename "$log") ⚠️ $errors errores"
grep -E "ERROR|FATAL" "$log" | head -3 | sed 's/^/ /'
fi
done
# 3. Procesos
pids=$(pgrep -f tracewall 2>/dev/null || true)
if [[ -n "$pids" ]]; then
echo "Procesos TraceWall:"
for pid in $pids; do
ps -p
ps -p "$pid" -o pid,ppid,cmd,%cpu,%mem --no-headers 2>/dev/null | sed 's/^/ /'
done
done
else
echo "❌ No hay procesos tracewall"
fi
# 4. ARGUS health
port_file=$(find "$BASE/argus" -name "port.txt" 2>/dev/null | head -1)
if [[ -f "$port_file" ]]; then
port=$(cat "$port_file")
if curl -sf --max-time 3 "http://127.0.0.1:$port/health" >/dev/null; then
echo "ARGUS health (port $port): ✅"
else
echo "ARGUS health (port $port): ❌"
fi
else
echo "ARGUS: No habilitado"
fi
echo "=== Fin diagnóstico ==="

Interpretación de resultados

EscenarioAcción
Todo ✅Sistema listo para operar. Proceder a uso en producción.
Sensor ⚠️/❌Ver Solución: Sensor inactivo y Interfaces no detectadas
Inventario vacíoSensor no inserta → revisar logs sensor, permisos, Npcap (Win)
Topología vacíaNo hay gateway detectado → verificar tabla de rutas, ARP, sensor interfaces
Exposición sin hallazgosNormal si red limpia; ejecutar perfil Puertos/Internet-facing para validar motor
Eventos vacíosSin integraciones o sin logs locales → configurar al menos Syslog local o Wazuh
ARGUS ❌Ver ARGUS: Diagnóstico — modelo, puerto, OOM, GPU
Integración ❌Ver página específica del conector + Integración sin conexión
Logs con ERRORRevisar mensaje; buscar en Solución de problemas o contactar soporte con ZIP logs
CPU/RAM altaSensor intervalo muy bajo, ARGUS en CPU sin GPU, leak → ajustar Settings

Lista de verificación para entrega a operaciones

  • Diagnóstico automatizado pasa (0 ❌, ≤ 2 ⚠️)
  • Sensor local 🟢 en Command Center y módulo
  • Inventario ≥ 1 host local + interfaces
  • Topología renderiza gateway + segmento
  • Al menos 1 perfil Exposure ejecutado sin error
  • Events buffer recibe datos (local o integración)
  • ARGUS 🟢 y responde a prompt de prueba
  • Integraciones configuradas 🟢 en test
  • Logs limpios de ERROR/FATAL
  • Retención y backups configurados
  • Documentado: config.json + tracewall.db en backup diario
  • Equipo operativo entrenado en Command Center, ARGUS, Incidentes

Páginas relacionadas