# 🔧 TROUBLESHOOTING: Syslog Parser Bloccato ## 📊 Diagnosi Rapida (Sul Server) ### 1. Verifica Stato Servizio ```bash sudo systemctl status ids-syslog-parser journalctl -u ids-syslog-parser -n 100 --no-pager ``` **Cosa cercare:** - ❌ `[ERROR] Errore processamento file:` - ❌ `OperationalError: database connection` - ❌ `ProgrammingError:` - ✅ `[INFO] Processate X righe, salvate Y log` (deve continuare ad aumentare!) --- ### 2. Verifica Database Connection ```bash # Test connessione DB psql -h 127.0.0.1 -U $PGUSER -d $PGDATABASE -c "SELECT COUNT(*) FROM network_logs WHERE timestamp > NOW() - INTERVAL '5 minutes';" ``` **Se torna 0** → Parser non sta scrivendo! --- ### 3. Verifica File Log Syslog ```bash # Log syslog in arrivo? tail -f /var/log/mikrotik/raw.log | head -20 # Dimensione file ls -lh /var/log/mikrotik/raw.log # Ultimi log ricevuti tail -5 /var/log/mikrotik/raw.log ``` **Se nessun log nuovo** → Problema rsyslog o router! --- ## 🐛 Cause Comuni di Blocco ### **Causa #1: Database Connection Timeout** ```python # syslog_parser.py usa connessione persistente self.conn = psycopg2.connect() # ← può scadere dopo ore! ``` **Soluzione:** Riavvia il servizio ```bash sudo systemctl restart ids-syslog-parser ``` --- ### **Causa #2: Eccezione Non Gestita** ```python # Loop si ferma se eccezione non gestita except Exception as e: print(f"[ERROR] Errore processamento file: {e}") # ← Loop terminato! ``` **Fix:** Il parser ora continua anche dopo errori (v2.0+) --- ### **Causa #3: File Log Ruotato da Rsyslog** Se rsyslog ruota il file `/var/log/mikrotik/raw.log`, il parser continua a leggere il file vecchio (inode diverso). **Soluzione:** Usa logrotate + postrotate signal ```bash # /etc/logrotate.d/mikrotik /var/log/mikrotik/raw.log { daily rotate 7 compress postrotate systemctl restart ids-syslog-parser endscript } ``` --- ### **Causa #4: Cleanup DB Troppo Lento** ```python # Cleanup ogni ~16 minuti if cleanup_counter >= 10000: self.cleanup_old_logs(days_to_keep=3) # ← DELETE su milioni di record! ``` Se il cleanup impiega troppo tempo, blocca il loop. **Fix:** Ora usa batch delete con LIMIT (v2.0+) --- ## 🚑 SOLUZIONE RAPIDA (Ora) ```bash # 1. Riavvia parser sudo systemctl restart ids-syslog-parser # 2. Verifica che riparta sudo journalctl -u ids-syslog-parser -f # 3. Dopo 1-2 min, verifica nuovi log nel DB psql -h 127.0.0.1 -U $PGUSER -d $PGDATABASE -c \ "SELECT COUNT(*) FROM network_logs WHERE timestamp > NOW() - INTERVAL '2 minutes';" ``` **Output atteso:** ``` count ------- 1234 ← Numero crescente = OK! ``` --- ## 🔒 FIX PERMANENTE (v2.0) ### **Migliorie Implementate:** 1. **Auto-Reconnect** su DB timeout 2. **Error Recovery** - continua dopo eccezioni 3. **Batch Cleanup** - non blocca il processing 4. **Health Metrics** - monitoring integrato ### **Deploy Fix:** ```bash cd /opt/ids sudo ./update_from_git.sh sudo systemctl restart ids-syslog-parser ``` --- ## 📈 Metriche da Monitorare 1. **Log/sec processati** ```sql SELECT COUNT(*) / 60.0 AS logs_per_sec FROM network_logs WHERE timestamp > NOW() - INTERVAL '1 minute'; ``` 2. **Ultimo log ricevuto** ```sql SELECT MAX(timestamp) AS last_log FROM network_logs; ``` 3. **Gap detection** (se ultimo log > 5 min fa → problema!) ```sql SELECT NOW() - MAX(timestamp) AS time_since_last_log FROM network_logs; ``` --- ## ✅ Checklist Post-Fix - [ ] Servizio running e active - [ ] Nuovi log in DB (ultimo < 1 min fa) - [ ] Nessun errore in journalctl - [ ] ML backend rileva nuove anomalie - [ ] Dashboard mostra traffico real-time --- ## 📞 Escalation Se il problema persiste dopo questi fix: 1. Verifica configurazione rsyslog 2. Controlla firewall router (UDP:514) 3. Test manuale: `logger -p local7.info "TEST MESSAGE"` 4. Analizza log completi: `journalctl -u ids-syslog-parser --since "1 hour ago" > parser.log`